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