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