pro*_*mer 2 domain-driven-design presentation-layer cqrs
我正在努力决定照顾演示逻辑的最佳位置.我已经使用查询的每个方法分离出我的读取查询(CQRS),并为我的View生成DTO.但我的观点只是散布着变量的模板,它们来自DTO.他们没有任何逻辑.
假设我想做一些事情,比如重新格式化日期的外观,将标志转换为实际的描述性单词,或根据从数据库中查询的内容添加显示内容的条件,等等.我想把这个逻辑放在每个查询中,并且不要担心太干(我发现在某些情况下,如果你干得太多,那么你可能会难以改变,因为你必须检查每个依赖或者希望你的单元测试能够坚持下去).我可能会在这里和那里使用一些"帮助器"进行格式化,我发现我一直在做,但我没有看到需要添加一个完整的"表示层".因此,表示逻辑将驻留在每个查询中,并进入返回的DTO,直接放入View中.这将使CQRS的Read端保持超薄,并且每个View对应于Read查询是有意义的.但我也担心这个表示逻辑中的一些非常特定于域.一个新的开发人员需要查看其他查询并重复相同的格式化技术,而不是直接从原始查询中抛出数据.
这是合理的方法,还是在DDD/CQRS中使用了另一种方法?我很难找到CQRS研究的任何指导.注意:我碰巧使用PHP/MySQL,但我想这个问题与语言无关.
我认为理解CQRS最重要的部分是它不必复杂.事实上,对于事物的阅读方面,最简单的解决方案将起作用并且可以维护.如果您只需要一个视图中的SELECT语句绑定到网格,为什么要创建一堆图层,DTO和Web服务?这会给业务增加任何价值吗?但是,如果有合理的理由在等式中添加图层,那么您可以这样做,通常DTO是在这些图层之间进行通信的好方法.
您的系统可能会根据手头的使用情况调用不同的查询策略,因此这不一定是一种适合所有方法.性能应始终是您首先关注的问题之一,因此尽可能使数据尽可能接近消费表示代码,并且只在真正需要时增加复杂性.
有些人可能会说,如果表示层直接从数据库中读取,则不会松散耦合.但是,仅仅因为你在两件事之间有很多层,并不会使它们松散耦合.事实上,它可能是相同数量的耦合,但现在你添加了一个维护头痛,因为每次添加一个字段时你必须触摸10个位置.
更专注于你的命令方面,并为读取方做任何实际操作.
| 归档时间: |
|
| 查看次数: |
344 次 |
| 最近记录: |