首页 > 解决方案 > 关于封装和单一职责设计的最佳实践

问题描述

我已经开发了很多年,我面临的一个常见问题是如何最好地分离出服务层。我一直主要使用存储库模式,但我仍然在这个常见的场景中挣扎。

返回单个客户的客户服务。按客户返回发票列表的发票服务。

服务的消费者有时只想要一个客户,有时他们想要客户和发票,这可以作为两个电话留下。

但是一个新的要求可能是他们想要客户,但也想要各个客户拥有的发票总数。

我不想破坏 GetCustomer 方法,也不想返回发票列表并让他们进行计数(这会起作用)。是否有一种最佳实践,而不需要创建很多方法,同时仍然牢记性能和往返行程?我看到很多设计都会有 GetCustomer、GetCustomerDeepLo​​ad 等。

谢谢。

标签: oopdesign-patterns

解决方案


这就是我改用 CQRS 的原因。操作(写入/命令)通常针对单个实体类型,而读取(查询)通常需要实体的组合。

您不希望将这些查询放入存储库,因为当您这样做时,存储库往往会获得泄漏的抽象。

在您的情况下,您可以拥有两种类型的服务:负责处理更改的实体服务和负责向客户端提供信息的查询服务(不同实体的组合)。

我通常只在写入端使用存储库,让查询服务直接查询数据库。当您将业务逻辑包含在实体服务中时,它就会起作用。


推荐阅读