我对 DDD 中的服务有点困惑。
首先。为什么服务总是表示为接口?这是规定吗?
为什么服务只包含一种方法?有时在单个类中实现相关方法是有意义的。
我必须为每个存储库提供服务吗?我一定是做错了什么,因为我发现自己在为 CRUD 操作提供服务。
例如,我有一个使用常用方法的存储库。如何控制对存储库中持久化对象的访问?我倾向于使用多种阅读方法来提供服务。这些服务可以检查用户角色,然后决定用户是否可以使用这些对象。我觉得我的设计有些地方不好。
我对 DDD 中的服务有点困惑。
首先。为什么服务总是表示为接口?这是规定吗?
为什么服务只包含一种方法?有时在单个类中实现相关方法是有意义的。
我必须为每个存储库提供服务吗?我一定是做错了什么,因为我发现自己在为 CRUD 操作提供服务。
例如,我有一个使用常用方法的存储库。如何控制对存储库中持久化对象的访问?我倾向于使用多种阅读方法来提供服务。这些服务可以检查用户角色,然后决定用户是否可以使用这些对象。我觉得我的设计有些地方不好。
我假设您在谈论域服务。DDD 中还有其他类型的服务,例如应用程序服务和基础设施服务。
首先。为什么服务总是表示为接口?这是规定吗?
不,这不是规则。仅在需要时才创建接口抽象。
为什么服务只包含一种方法?有时在单个类中实现相关方法是有意义的。
可以将具有单个方法的服务视为实现单个操作 - 单个用例。如果将多个操作封装在一个对象中是有意义的,那么这也是可以接受的。但是,将多个职责合并到一个类中通常会导致违反 SRP。
我必须为每个存储库提供服务吗?
不,存储库已经是一种服务。更具体地说,可以将存储库实现视为基础设施服务。
它是调用存储库以实现某些用例的应用程序服务。它委托给域实体并协调给定操作可能需要的其他服务。查看DDD中的服务,了解各种服务交互的示例。