Collections 域驱动设计中对象集合的检索方法

Collections 域驱动设计中对象集合的检索方法,collections,domain-driven-design,object-model,Collections,Domain Driven Design,Object Model,我正在使用Zend框架,并试图转向DDD方法(领域驱动设计)。我有用于域对象的模型、映射器和数据库表 在很多情况下,我需要同时获取多个实体,例如系统中所有用户的列表,因此我的用户模型将有一个方法“getAllUsers”,它将返回所有用户(现在它返回所有用户的数组,但我正在考虑创建一个集合类)。到目前为止,我使用一个普通的方法(非静态)来获取集合,为此,我需要创建一个“空”对象。另一个选项是将其转换为静态方法 我不确定哪种方法更好,将这些方法保留为非静态方法,还是将它们转换为静态方法。更好的方法

我正在使用Zend框架,并试图转向DDD方法(领域驱动设计)。我有用于域对象的模型、映射器和数据库表

在很多情况下,我需要同时获取多个实体,例如系统中所有用户的列表,因此我的用户模型将有一个方法“getAllUsers”,它将返回所有用户(现在它返回所有用户的数组,但我正在考虑创建一个集合类)。到目前为止,我使用一个普通的方法(非静态)来获取集合,为此,我需要创建一个“空”对象。另一个选项是将其转换为静态方法

我不确定哪种方法更好,将这些方法保留为非静态方法,还是将它们转换为静态方法。更好的方法/实践是什么?为什么?还有哪些方法密切遵循DDD方法


PS:如果你能想出一个更好的标题,请告诉我。不,这不是一个课程问题。

首先,我认为这不是DDD相关的问题。使用或不使用静态方法更像是OOP或设计问题

基本上,使用类静态方法并不是真正的OOP,而是过程编程,因为您不能使用任何OOP范例,如封装或继承。它指出了可能的设计缺陷/代码气味

它还使单元测试变得困难,因为方法更复杂,而且添加它只是为了通过单元测试覆盖遗留代码

如果发布一些代码示例,回答您的问题会更容易


回答了类似的问题,或者。

在域驱动设计中,持久的用户集合应该表示为
UserRepository
接口。该接口的具体实现有一个状态,例如包括数据库连接的状态。因此,您需要存储库实现的实例,其方法将是实例方法而不是静态方法。

静态方法意味着不需要实例化对象来调用它。通常静态方法用于对与整个类相关的方法进行分组,而不仅仅是类的特定实例。相反,非静态方法用于对与特定单个对象相关的方法进行分组

所以,如果您将getAllUsers()标记为非静态,并将其放在user下面,基本上就是要求一个特定的用户了解所有其他用户。使用类比法——这就像从一个公民那里询问有关该国所有公民的完整信息(你在你的国家认识他们吗?)

将其标记为静态,就好像是向政府询问所有公民的信息。这比将其标记为非静态要好,但仍然有点奇怪和尴尬


通常,各国都有人口登记册,负责处理公民信息。将类比转换回来-您将拥有“其他”集合,如register,负责此操作。

谢谢,所以我应该创建一个类“UserCollection”,并使用它检索多个users@Bryan您可能想要签出所谓的存储库模式