是否有任何好的 API 设计模式将写入与 READS 分开
本文关键字:READS 分开 设计模式 任何好 API 是否 | 更新日期: 2023-09-27 18:36:04
我正在编写一个由三层组成的相对简单的Web应用程序:
- 前端:超薄控制器
- 业务逻辑:特定于域的服务
- 存储:精简存储库类
如上所述,大多数业务逻辑都位于服务层 2 中。
当我编写这些类时,我发现自己对待 READ 方法与 WRITE 方法非常不同。
服务类中的读取方法
例如,READ 方法中没有过于严格的参数检查。很多时候,对于简单的读取,服务方法几乎只用一行就实现了存储库方法。
服务类中的写入方法
然而,使用 WRITE 方法,我发现自己做了更多的参数检查和业务逻辑实现。事实上,在我的服务类中,我依赖于一个规则类,该类仅由我的 WRITE 方法真正使用。READS 中也有商业逻辑,但 WRITE 的逻辑更严格。
可能分离 READS 和 WRITE 的其他参数
我也觉得在实现服务类并在类中寻找方法时,首先在脑海中有一个想法,即我是否要读取或写入,然后我寻找方法。
我也觉得在类中寻找方法时,必须通过以"创建"、"更新"、"获取"、"检索"等开头的任意方法名称分隔 READS 和 WRITE 似乎很混乱。
可能的问题,分开是个好主意吗?
我想我正在寻找一种久经考验的模式。我可以尝试自己实现它,但我已经觉得可能存在问题,例如设计过于复杂,或循环引用,重复逻辑,例如。READ 类可能依赖于 WRITE 类,反之亦然。
听起来你指的是命令查询责任分离,CQRS
乌迪大汉有一篇很好的文章可以让你从这里开始。
MS 模式和实践有一个开源项目 http://cqrsjourney.github.com/这是一个很好的例子。
这种模式的缺点是它可能过度工程化,特别是如果你正在编写一个"相对简单的 Web 应用程序"。
Udi 写了另一篇关于何时避免 CQRS 的文章,然后又写了一篇关于为什么你应该在几乎所有地方使用 CQRS 希望这有帮助。