DDD应用程序分为四层结构,应用层位于领域层之上。
image.png1.区分应用程序逻辑和领域逻辑
1.1 应用层的处理的相关逻辑
- 负责基础架构相关问题
管理事务、发送电子邮件类似的技术任务。 - 协调领域
调用多个domain完成实现业务逻辑。 - 事务
开启一个事务,在事务中调用domain层,根据业务逻辑清晰的设定边界。 - 错误处理和转换
将domain层的错误转换成应用层的错误,返回给用户接口层。 - 日志、指标、监控
打印请求和返回结果、上报metric、监控耗时一般都是在框架级别支持,大多用拦截器和中间件实现。 - 认证和授权
判断用户是否登录、是有具备权限。 - 在有界上下文之间传递事件
有界上下文发生的事件会影响其他有界上下文处理事件时,通过应用层转发。 - 验证参数
验证请求参数合法(因为领域层不关心这些)
1.2 应用程序逻辑和领域程序逻辑的边界怎么区别?
应用层不包含业务逻辑,但是应用层要调用不同的domain实现功能比较矛盾。
决定一系列调用是否属于领域逻辑的方式是思考【这些步骤无法分开么】或者【这种情况总是会出现么】如果答案是肯定的就应该放在领域层,否则说明是步骤是任意组合的,需要放在应用层,此外领域逻辑的每次迭代都具有表述性。
2.应用层的实现方式
2.1 命令处理模式
命令处理模式,能够避免具有许多问题的大型应用程序
应用层可能有类似下面的接口,接口很多,每个方法实现可能差异较大,业务复杂时冲突会比较多。
image.png image.png image.png image.png就是把原来位于一个文件的实现分别放在了不同的命令文件里面,减少了冲突,同时对于需要通用处理的,通过泛型实现了责任链模式,将不同的命令串起来了。
2.2 发布订阅
image.png一种松耦合实现,当命令传入领域中并且不接收返回值时可以使用。
2.3 请求回复模式
用的最多,就是顶一个request、response的DTO,构造请求并返回响应结果的模式。
网友评论