25.命令:用于处理业务用例的程序的服务模式

DDD应用程序分为四层结构,应用层位于领域层之上。

image.png

1.区分应用程序逻辑和领域逻辑

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,构造请求并返回响应结果的模式。

你可能感兴趣的:(25.命令:用于处理业务用例的程序的服务模式)