
# 订单系统服务开发示例
#### 业务场景及设计流程说明
在AstroPro中，用户通过业务建模，可生成高可用、高可靠、以及安全稳定的企业级IT应用框架。本入门通过创建一个简单的订单系统，帮助您快速上手AstroPro。
本入门为创建一个简单的订单系统，订单系统中包括用户（User）、订单（Order）和订单详情（OrderDetail）三个业务对象，且三个对象之间存在聚合关系，即用户存在时，订单才会存在，订单存在时，订单详情才会存在。同时一个用户可以关联多个订单，订单通过单号进行标识，一个订单又可以关联多个商品，例如手机、耳机等，商品可以记录数量。在AstroPro中，构建上述一个订单系统的流程，如图[图1]所示。
图1开发订单系统流程图   
![](https://support.huaweicloud.com/qs-astropro/zh-cn_image_0000001982305437.png)
1. [步骤一：添加一个项目]
   项目是使用AstroPro核心业务的入口。在AstroPro中会为每个租户提供一个工作空间，您可以在工作空间中新建项目。
   
2. [步骤二：新建一个服务]
   在AstroPro中，快速添加一个服务，新增服务中的配置均采用默认配置。此处创建的服务相当于为服务搭建了一个框架，如果需要实现某些特定的功能，还需要您根据自身业务需求进行业务建模。
   
3. [步骤三：编辑服务]
   在已创建的服务中，根据自身业务需求，设置服务的基本信息、框架配置、生成策略、业务设计和服务依赖。
   
4. [步骤四：生成服务代码]
   基于配置的业务模型生成服务的基本代码。代码生成后，会提供一个压缩包，供您直接使用。
   
 
 #### 步骤一：添加一个项目
项目是使用AstroPro核心业务的入口。在AstroPro中会为每个账号提供一个工作空间，您可以在工作空间中新建项目。
1. 进入[AstroPro服务控制台](https://console.huaweicloud.com/astro-pro/#/home)，在已购买的实例中单击"进入首页"，进入AstroPro界面。
2. 在左侧导航栏中，选择"服务管理 \> 项目"，进入项目页面。 
   首次进入时，请单击"确认"，开通工作空间。工作空间是为了方便用户全面管理资源而提供的通用空间。工作空间之间的资源是相互隔离的，默认情况下，每个账号仅能看到自己工作空间下的资源，且每个账号只能拥有一个工作空间。在AstroPro中会为每个账号提供一个工作空间，您可以在工作空间中新建项目。
   图2开通工作空间   
   ![](https://support.huaweicloud.com/qs-astropro/zh-cn_image_0000001982345565.png)
   
   
3. 单击"新建项目"，设置项目基本信息。 
   图3新建所需的项目   
   ![](https://support.huaweicloud.com/qs-astropro/zh-cn_image_0000001950786064.png)
   - 项目名称：新增项目的名称，只能包含大小写字母、数字、连字符（-）和下划线（_）。
   
   - 描述：设置项目的描述信息，通常设置为项目的用途或者功能。
   
   - 版权信息：自定义代码的版权信息，请以"//"开头或者以"/\*"开头并以"\*/"结尾。
   
   - Package：设置生成代码的顶层包名，由一个或多个小写字母和数字组成，片段之间用点号（.）连接，且必须以小写字母开头。
     图4顶层包名   
     ![](https://support.huaweicloud.com/qs-astropro/zh-cn_image_0000001982305457.png) 
   
   - Group：设置项目的默认组名，只能包含大小写字母、数字、连字符（-）、下划线（_）和点（.）。
   
   
   
   
4. 单击"确定"，完成项目的创建。 
   项目创建后，可以为当前账号下的其他用户（如IAM用户）添加项目级角色或工作空间级角色，来协助您一起开发或管理项目。如何为用户添加角色，请参见[项目角色管理](https://support.huaweicloud.com/usermanual-astropro/astropro_05_0025.html)。
   
   
 
 #### 步骤二：新建一个服务
在AstroPro中，快速添加一个服务，新增服务中的配置均采用默认配置。此处新建服务的操作，相当于为服务搭建了一个框架。
1. 项目创建完成后，在左侧导航栏中，选择"服务管理 \> 服务"。
2. 选择[步骤一：添加一个项目]中创建的项目和服务组，单击"新建服务"。
   
   创建项目时，默认会创建一个和项目同名的服务组，所有新建服务默认在此分组下（本示例使用默认服务组）。服务组用于对项目中的服务进行分组，一般一个分组对应一个研发团队。
   图5新增服务   
   ![](https://support.huaweicloud.com/qs-astropro/zh-cn_image_0000001982345589.png)
   
   
3. 设置服务的基本信息。 
   图6新建Order服务   
   ![](https://support.huaweicloud.com/qs-astropro/zh-cn_image_0000001950786068.png)
   - 服务名称：设置待添加服务的名称。服务名称由英文字母、数字或"-"组成，且必须以字母开头，一般采用驼峰格式，长度最低为两位。
   
   - 服务类型：当前仅支持创建原子服务。原子服务是指对外提供业务对象管理API，有独立数据存储（一般为独立数据库）的服务。原子服务之间可以相互调用。
   
   - 服务组：选择服务所属的分组，本示例选择创建项目后，生成的默认服务组AstroProject。
   
   - 服务单元化策略：服务在子域内的单元化策略。服务单元化策略必须在一个子域内定义，不能跨子域。当应用比较复杂时，可基于领域的特定概念将应用分解为多个领域，每个领域就是一个子域，如核心子域、支撑子域和通用子域。 新增服务时，只能设置为SINGLE，即单库，无论子域是否进行单元化部署，该服务只在一个单元（一般以region为单元）内部署。
     
   
   - API版本：服务API版本，对应服务Service段的apiVersion字段，一般为v1、v2类型的值。
   
   - 描述：设置服务的描述信息。
   
   
   
   
4. 单击"确定"，完成服务的创建。 
   此处创建的服务相当于为服务搭建了一个框架，如果需要实现某些特定的功能，还需要您根据自身业务需求进行业务建模。在AstroPro中，用户通过业务建模，可生成高可用、高可靠及安全稳定的企业级IT应用框架。
   
   
 
 #### 步骤三：编辑服务
服务创建后，请根据自身业务的需求，设置服务的基本信息、框架配置、生成策略、业务设计和服务依赖，完成业务建模。
1. 在服务列表中，单击[步骤二：新建一个服务]中已创建服务后的"编辑"。
   
   图7编辑服务   
   ![](https://support.huaweicloud.com/qs-astropro/zh-cn_image_0000002032751061.png)
   
   
2. 本示例中，基本配置、框架配置和生成策略均保持默认，直接单击"下一步"。 
   - 基本配置：用于配置服务的基本信息，直接在界面进行勾选配置，不同的配置会呈现不同的效果。
     图8基本配置   
     ![](https://support.huaweicloud.com/qs-astropro/zh-cn_image_0000001991705674.png) 
   
   - 框架配置：配置服务使用的中间件或云服务，直接在界面进行勾选配置，不同的配置会呈现不同的效果。
     图9框架配置   
     ![](https://support.huaweicloud.com/qs-astropro/zh-cn_image_0000002028184833.png) 
   
   - 生成策略：配置服务的代码风格，直接在界面进行勾选配置，不同的配置会呈现不同的效果。
     图10生成策略   
     ![](https://support.huaweicloud.com/qs-astropro/zh-cn_image_0000001991511368.png) 
   
   
   
   
3. 业务设计。 
   业务设计是AstroPro提供的核心能力，是用户设计业务的基础。业务设计过程中，使用到的对象及对象间关系介绍，请参见[对象详解](https://support.huaweicloud.com/usermanual-astropro/astropro_05_0040.html)。
   本示例中，订单系统中包括用户（User）、订单（Order）和订单详情（OrderDetail）三个业务对象，且三个对象之间存在聚合关系，即用户存在时，订单才会存在，订单存在时，订单详情才会存在。同时一个用户可以关联多个订单，订单通过单号进行标识，一个订单又可以关联多个商品，商品可以记录数量。
   1. 在business中，拖拽BO对象到设计区，并修改对象名称为User。
      图11新建User对象   
      ![](https://support.huaweicloud.com/qs-astropro/zh-cn_image_0000001982345601.png) 
   
   2. 在BO属性操作中，单击"编辑字段"，新增name（用户名）字段，用于记录用户信息。
      图12新增name字段   
      ![](https://support.huaweicloud.com/qs-astropro/zh-cn_image_0000002028266333.png) 
   
   3. 按照上述操作，在business中，分别拖拽两个BO对象到设计区，并修改对象名称为"Order"和"OrderDetail"。
      图13新增对象Order和OrderDetail   
      ![](https://support.huaweicloud.com/qs-astropro/zh-cn_image_0000001983921405.png) 
   
   4. 为"Order"对象添加"orderNo（订单编号）"字段，为"OrderDetail"对象添加"product（商品）"、"amount（数量，integer类型）"字段。
      其中，"orderNo"用于记录订单的编号，"product"用于记录商品的详情，"amount"用于记录商品的数量。
      图14为Order对象添加orderNo字段   
      ![](https://support.huaweicloud.com/qs-astropro/zh-cn_image_0000002028186777.png)
      图15为OrderDetail添加product和amount字段   
      ![](https://support.huaweicloud.com/qs-astropro/zh-cn_image_0000001991547138.png) 
   
   5. 建立业务场景关系，即为User和Order，Order和OrderDetai建立聚合关系。 在订单系统中，要求用户存在时，订单才会存在，订单存在时，订单详情才会存在，故需要为对象建立聚合关系。
      聚合关系中，次要方必须依赖首要方，任何对次要方的操作先要经过首要方才能继续往下操作。关于对象间关系的详细介绍，请参见[对象间关系](https://support.huaweicloud.com/usermanual-astropro/astropro_05_0045.html)。
      图16建立业务场景关系   
      ![](https://support.huaweicloud.com/qs-astropro/zh-cn_image_0000001982305509.png) 
   
   6. 设计完成后，单击"下一步"。
   
   
   
   
4. （可选）为服务添加依赖，本示例不涉及，恭喜您已完成服务业务模型的配置。 
   通常情况下，一个应用不是一个单独的服务，可能由多个服务共同组成。这些服务之间可能存在一些跨服务的调用，此时就需要通过添加依赖服务，把这些服务的客户端集成过来。如何添加服务依赖，请参见[添加依赖服务](https://support.huaweicloud.com/usermanual-astropro/astropro_05_0019.html)。
   
   
 
 #### 步骤四：生成服务代码
基于配置的业务模型生成服务的基本代码。代码生成后，会提供一个压缩包，供您直接使用。
1. 在服务依赖页面，单击"创建"。 
   图17创建服务   
   ![](https://support.huaweicloud.com/qs-astropro/zh-cn_image_0000001982345613.png)
   
   
2. 输入变更日志描述信息，单击"创建"。 
   系统开始创建服务，并生成该服务的基本代码。代码生成后，将直接生成一个压缩包，下载至本地使用。压缩包命名格式为"服务名称+唯一ID"。
   图18创建服务并生成代码   
   ![](https://support.huaweicloud.com/qs-astropro/zh-cn_image_0000001950786108.png)
   
   
3. 完成整个订单系统的创建。 
   打开生成的服务代码包，在"README.md"文件中可查看代码目录结构的说明，如[图19]。
   图19代码目录结构说明   
   ![](https://support.huaweicloud.com/qs-astropro/zh-cn_image_0000001982305529.png)
   代码目录结构分为"base/service"、"单Module"和"DDD"三种，在编辑元数据的"生成策略 \> 代码风格 \> 工程目录"中可进行定义，生成效果差异如[图21]所示。本示例采用默认配置即"base/service"样式，关于"单Module"和"DDD"样式的代码目录结构说明，请参见[服务开发框架详解](https://support.huaweicloud.com/usermanual-astropro/astropro_05_0056.html)。
   图20设置代码风格   
   ![](https://support.huaweicloud.com/qs-astropro/zh-cn_image_0000002028109825.png)
   图21工程目录不同类型设置效果   
   ![](https://support.huaweicloud.com/qs-astropro/zh-cn_image_0000001950786144.png)
   
   
 
