文档首页/ Astro企业应用 AstroPro/ 快速入门/ 订单系统服务开发示例
更新时间:2024-08-23 GMT+08:00
分享

订单系统服务开发示例

业务场景及设计流程说明

在AstroPro中,用户通过业务建模,可生成高可用、高可靠、以及安全稳定的企业级IT应用框架。本入门通过创建一个简单的订单系统,帮助您快速上手AstroPro。

本入门为创建一个简单的订单系统,订单系统中包括用户(User)、订单(Order)和订单详情(OrderDetail)三个业务对象,且三个对象之间存在聚合关系,即用户存在时,订单才会存在,订单存在时,订单详情才会存在。同时一个用户可以关联多个订单,订单通过单号进行标识,一个订单又可以关联多个商品,例如手机、耳机等,商品可以记录数量。在AstroPro中,构建上述一个订单系统的流程,如图图1所示。

图1 开发订单系统流程图
  1. 步骤一:添加一个项目

    项目是使用AstroPro核心业务的入口。在AstroPro中会为每个租户提供一个工作空间,您可以在工作空间中新建项目。

  2. 步骤二:新建一个服务

    在AstroPro中,快速添加一个服务,新增服务中的配置均采用默认配置。此处创建的服务相当于为服务搭建了一个框架,如果需要实现某些特定的功能,还需要您根据自身业务需求进行业务建模。

  3. 步骤三:编辑服务

    在已创建的服务中,根据自身业务需求,设置服务的基本信息、框架配置、生成策略、业务设计和服务依赖。

  4. 步骤四:生成服务代码

    基于配置的业务模型生成服务的基本代码。代码生成后,会提供一个压缩包,供您直接使用。

步骤一:添加一个项目

项目是使用AstroPro核心业务的入口。在AstroPro中会为每个账号提供一个工作空间,您可以在工作空间中新建项目。

  1. 进入AstroPro服务控制台,在已购买的实例中单击“进入首页”,进入AstroPro界面。
  2. 在左侧导航栏中,选择服务管理 > 项目,进入项目页面。

    首次进入时,请单击“确认”,开通工作空间。工作空间是为了方便用户全面管理资源而提供的通用空间。工作空间之间的资源是相互隔离的,默认情况下,每个账号仅能看到自己工作空间下的资源,且每个账号只能拥有一个工作空间。在AstroPro中会为每个账号提供一个工作空间,您可以在工作空间中新建项目。
    图2 开通工作空间

  3. 单击“新建项目”,设置项目基本信息。

    图3 新建所需的项目
    • 项目名称:新增项目的名称,只能包含大小写字母、数字、连字符(-)和下划线(_)。
    • 描述:设置项目的描述信息,通常设置为项目的用途或者功能。
    • 版权信息:自定义代码的版权信息,请以“//”开头或者以“/*”开头并以“*/”结尾。
    • Package:设置生成代码的顶层包名,由一个或多个小写字母和数字组成,片段之间用点号(.)连接,且必须以小写字母开头。
      图4 顶层包名
    • Group:设置项目的默认组名,只能包含大小写字母、数字、连字符(-)、下划线(_)和点(.)。

  4. 单击“确定”,完成项目的创建。

    项目创建后,可以为当前账号下的其他用户(如IAM用户)添加项目级角色或工作空间级角色,来协助您一起开发或管理项目。如何为用户添加角色,请参见项目角色管理

步骤二:新建一个服务

在AstroPro中,快速添加一个服务,新增服务中的配置均采用默认配置。此处新建服务的操作,相当于为服务搭建了一个框架。

  1. 项目创建完成后,在左侧导航栏中,选择服务管理 > 服务
  2. 选择步骤一:添加一个项目中创建的项目和服务组,单击“新建服务”

    创建项目时,默认会创建一个和项目同名的服务组,所有新建服务默认在此分组下(本示例使用默认服务组)。服务组用于对项目中的服务进行分组,一般一个分组对应一个研发团队。

    图5 新增服务

  3. 设置服务的基本信息。

    图6 新建Order服务
    • 服务名称:设置待添加服务的名称。服务名称由英文字母、数字或“-”组成,且必须以字母开头,一般采用驼峰格式,长度最低为两位。
    • 服务类型:当前仅支持创建原子服务。原子服务是指对外提供业务对象管理API,有独立数据存储(一般为独立数据库)的服务。原子服务之间可以相互调用。
    • 服务组:选择服务所属的分组,本示例选择创建项目后,生成的默认服务组AstroProject。
    • 服务单元化策略:服务在子域内的单元化策略。服务单元化策略必须在一个子域内定义,不能跨子域。当应用比较复杂时,可基于领域的特定概念将应用分解为多个领域,每个领域就是一个子域,如核心子域、支撑子域和通用子域。

      新增服务时,只能设置为SINGLE,即单库,无论子域是否进行单元化部署,该服务只在一个单元(一般以region为单元)内部署。

    • API版本:服务API版本,对应服务Service段的apiVersion字段,一般为v1、v2类型的值。
    • 描述:设置服务的描述信息。

  4. 单击“确定”,完成服务的创建。

    此处创建的服务相当于为服务搭建了一个框架,如果需要实现某些特定的功能,还需要您根据自身业务需求进行业务建模。在AstroPro中,用户通过业务建模,可生成高可用、高可靠及安全稳定的企业级IT应用框架。

步骤三:编辑服务

服务创建后,请根据自身业务的需求,设置服务的基本信息、框架配置、生成策略、业务设计和服务依赖,完成业务建模。

  1. 在服务列表中,单击步骤二:新建一个服务中已创建服务后的“编辑”

    图7 编辑服务

  2. 本示例中,基本配置、框架配置和生成策略均保持默认,直接单击“下一步”

    • 基本配置:用于配置服务的基本信息,直接在界面进行勾选配置,不同的配置会呈现不同的效果。
      图8 基本配置
    • 框架配置:配置服务使用的中间件或云服务,直接在界面进行勾选配置,不同的配置会呈现不同的效果。
      图9 框架配置
    • 生成策略:配置服务的代码风格,直接在界面进行勾选配置,不同的配置会呈现不同的效果。
      图10 生成策略

  3. 业务设计。

    业务设计是AstroPro提供的核心能力,是用户设计业务的基础。业务设计过程中,使用到的对象及对象间关系介绍,请参见对象详解

    本示例中,订单系统中包括用户(User)、订单(Order)和订单详情(OrderDetail)三个业务对象,且三个对象之间存在聚合关系,即用户存在时,订单才会存在,订单存在时,订单详情才会存在。同时一个用户可以关联多个订单,订单通过单号进行标识,一个订单又可以关联多个商品,商品可以记录数量。

    1. 在business中,拖拽BO对象到设计区,并修改对象名称为User。
      图11 新建User对象
    2. 在BO属性操作中,单击“编辑字段”,新增name(用户名)字段,用于记录用户信息。
      图12 新增name字段
    3. 按照上述操作,在business中,分别拖拽两个BO对象到设计区,并修改对象名称为“Order”“OrderDetail”
      图13 新增对象Order和OrderDetail
    4. “Order”对象添加“orderNo(订单编号)”字段,为“OrderDetail”对象添加“product(商品)”“amount(数量,integer类型)”字段。
      其中,“orderNo”用于记录订单的编号,“product”用于记录商品的详情,“amount”用于记录商品的数量。
      图14 为Order对象添加orderNo字段
      图15 为OrderDetail添加product和amount字段
    5. 建立业务场景关系,即为User和Order,Order和OrderDetai建立聚合关系。

      在订单系统中,要求用户存在时,订单才会存在,订单存在时,订单详情才会存在,故需要为对象建立聚合关系。

      聚合关系中,次要方必须依赖首要方,任何对次要方的操作先要经过首要方才能继续往下操作。关于对象间关系的详细介绍,请参见对象间关系

      图16 建立业务场景关系
    6. 设计完成后,单击“下一步”

  4. (可选)为服务添加依赖,本示例不涉及,恭喜您已完成服务业务模型的配置。

    通常情况下,一个应用不是一个单独的服务,可能由多个服务共同组成。这些服务之间可能存在一些跨服务的调用,此时就需要通过添加依赖服务,把这些服务的客户端集成过来。如何添加服务依赖,请参见添加依赖服务

步骤四:生成服务代码

基于配置的业务模型生成服务的基本代码。代码生成后,会提供一个压缩包,供您直接使用。

  1. 在服务依赖页面,单击“创建”

    图17 创建服务

  2. 输入变更日志描述信息,单击“创建”

    系统开始创建服务,并生成该服务的基本代码。代码生成后,将直接生成一个压缩包,下载至本地使用。压缩包命名格式为“服务名称+唯一ID”

    图18 创建服务并生成代码

  3. 完成整个订单系统的创建。

    打开生成的服务代码包,在“README.md”文件中可查看代码目录结构的说明,如图19

    图19 代码目录结构说明

    代码目录结构分为“base/service”“单Module”“DDD”三种,在编辑元数据的生成策略 > 代码风格 > 工程目录中可进行定义,生成效果差异如图21所示。本示例采用默认配置即“base/service”样式,关于“单Module”“DDD”样式的代码目录结构说明,请参见服务开发框架详解

    图20 设置代码风格
    图21 工程目录不同类型设置效果

相关文档