一 背景
很多同学在熟悉一个新系统时,第一关注点应该都是这个系统有哪些模块,模块之间的依赖关系是什么,不同模块内部具体是做什么的?
当把上面的问题都搞清楚后,做为一个开发人员,就可以很快的上手对这个系统做需求迭代了。
带着上面的问题,我们这篇文章就针对forum-java
系统展开详细解答。
二 模块依赖及简介
模块依赖关系图
- starter模块:项目启动入口模块,
SpringBootApplication
启动类就在这个模块,这个模块也会把一些通过依赖倒置实现的功能infrastructure
模块依赖进项目中; - portal模块:系统门户模块,用户和管理员需要访问的页面都在这里,系统提供的http接口也都在这里;
- api模块:系统提供的所有对外接口,参考dubbo项目的api模块设计,如果企业用户系统之间调用使用dubbo的话,可以将api模块打包提供出去,就是对外提供的接口服务了;
- facade模块:对api模块接口的实现,以及对接口请求参数的合法性校验,不做任何业务逻辑处理,将校验合法的请求转发给app模块进行业务处理;
- app模块:业务用例处理模块,这里将领域服务domain模块和外部服务infrastructure模块做了聚合,用于实现业务用例、还做了一些领域事件监听等业务处理;
- domain模块:核心领域实体、领域仓储、领域服务等都在这里定义;
- infrastructure模块:基础设置及三方依赖模块,数据库、邮件发送、文件上传、搜索等三方服务的实现都在这里;
- common模块:公共枚举的定义、工具类、自定义业务异常等都在这里;
三 模块功能详解
3.1 starter模块
- ForumJavaApplication:Spring boot项目启动入口类;
- application.properties:项目配置文件,自定义配置信息都在这里配置;
- application-qa.properties:qa环境项目配置文件;
- data.sql:项目初始化数据sql脚本;
- logback.xml:项目日志配置;
- schema.sql:项目初始化数据表结构脚本;
3.2 portal模块
- forum-vue:用户编辑页vue源码文件,打包编译后的编译文件在vue-dist文件夹内;
- controller:http rest接口及页面请求转发控制器;
- request:http rest请求body参数;
- support:其他支持类;
3.3 api模块
- model:请求和响应模型;
- request:接口请求参数;
- response:接口响应参数;
- service:对外提供的接口服务;
- vo:可公用请求或响应模型;
3.4 facade模块
- aspect:接口统一异常处理、请求日志输出、获取请求上下文登录用户信息;
- impl:api模块接口实现,请求参数合法性校验;
- support:其他支持类;
- validator:请求参数校验器;
3.5 app模块
- listener:业务处理中产生的事件监听处理逻辑(观察者模式实现的事件监听器);
- manager:接口具体的业务实现逻辑;
- support:其他支持类;
- transfer:请求和响应参数与领域对象之间的转换器;
3.6 domain模块
- entity:领域对象;
- repository:领域对象的仓储接口定义(具体的实现在infrastructure模块);
- service:领域服务及外部服务接口定义(具体的实现在infrastructure模块);
3.7 infrastructure模块
- audit:发布的文章和问答的内容审核,企业用户可接入自己的风控系统做内容合规性校验,校验通过后回调此接口将文章和问答审核通过用户可见;
- cache:缓存服务的接口实现,用户登录的分布式session解决方案一般是存放在redis等缓存服务器,企业用户可接入自己的缓存服务器;
- dal:数据库dao接口和do对象的定义;
- file:文件上传的接口实现,目前文件上传到七牛云,企业用户可自定义上传到自己文件服务器;
- mail:邮件发送的接口实现,企业用户可接入自己的消息服务发送邮件;
- search:搜索服务的接口实现,企业用户可接入自己的搜索服务;
- transfer:领域模型和数据模型之间的转换器;
3.8 common模块
- constant:系统常量定义;
- enums:系统枚举值定义;
- exception:自定义业务异常;
- model:自定义模型;
- support:其他支持类;
以上就是forum-java系统所有模块及每个模块的功能详解,看完以后,相信各位购买商业版二开的同学,和学习源码的同学都能对forum-java内部实现有一个整体和详细的认识。