从这节开始,正式进入系统代码阶段的讲解,大部分工程都由两个modle组成:一个是facade,用来向外暴露接口;另一个是ddd,以领域驱动设计的模式来完成业务逻辑,业务逻辑部分代码不是大家所关心的,我将只保留代码结构,供大家参考。为了降低大家阅读代码的难度,相似的代码我会省略,代替以文字进行说明。
我将在系统中引入的工程如下:
代码结构
什么是DDD,不了解的同学自己查,我只在这里说明各包的约定:
1. interfaces:这可以说是传统意义上的Controller层,req和resp分别是入参和出参的对象声明,如果是提供给其它微服务的接口,则出入参的声明都需要写到facade模块里。这一层的代码只能调用application层。
2. application:这一层大家可以暂时理解为不需要写任何业务代码,如果是有业务逻辑的方法,则调用domain层;如果只是单纯操作数据库,这一层可以直接调用infrastructure层。
3. domain-entities: 这里是聚合根,关于聚合根的理解,这篇短文说的比较清楚:什么是聚合和聚合根?
4. domain-aggregates:聚合
5. domain-repository:可以理解为数据库操作的接口定义
6. domain-service:业务逻辑代码所在
7. infrastructure-enums:枚举
8. infrastructure-utils:工具包
9. infrastructure-jpa-assembler:实体对象和数据库对象互换
10. infrastructure-jpa-mapper:sql
11. infrastructure-jpa-po:实体定义
12. infrastructure-jpa-repository:可以理解为数据库操作的接口实现
gateway-app
这是系统的汇款网关,网关主要的作用是反向代理、验签、加解密、分发等,所有和业务无关的处理都在这里完成。
channel-route
因为系统会对接各家银行,而各家银行的api接口完全不一样,在这个工程里会进行统一处理和路由选择。
channel-trans
一般来说,对接一家银行就会有一个channel-XXX微服务工程,当我们拿到银行的demo,只需要将他的返回值改为channel-route要求的统一格式就可以。
api-trans
这是给app提供的接口工程。
service-common
这里提供用户的登陆注册服务和积分规则引擎(drools)。
service-account
这里提供用户及备付金账户和账务服务。
service-rate
这里提供不同币种对的汇率查询及汇率规则配置。
service-fee
这里提供手续费配置和计算。
service-basic
这里提供的是各微服务工程都需要使用的共通服务。
basejar
这不是一个微服务,它只是一个jar包,大部分是各种配置和枚举,如各种aop,供所有微服务使用。
eureka-center
这只是一个简单的注册中心,本系列讲解中不会涉及,因为没什么可讲的。
mq-jar
本系统使用rocketMQ,这里封装了mq的基本方法。。
service-parent
父工程,没什么可说的。
config-center
这是配置中心。
上一章:搭建一个完整的微服务系统(二):动态切换数据库
下一章:搭建一个完整的微服务系统(四):微服务的公共依赖