0

我正在使用 Zend Framework,并尝试转向 DDD 方法(领域驱动设计)。我有域对象的模型、映射器和 DbTables。

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

我不确定,哪种方法更好,将这些方法保留为非静态方法或将它们转换为静态方法。什么是更好的方法/实践,为什么?哪种方法紧跟 DDD 方法。

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

4

3 回答 3

1

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

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

它也使单元测试变得困难,因为静态方法的模拟更加复杂,并且 AFAIK 添加它只是为了允许通过单元测试覆盖遗留代码。

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

类似的问题在此处此处此处得到了解答。

于 2011-11-21T07:24:48.597 回答
0

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

于 2011-11-21T21:22:30.310 回答
0

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

因此,如果您将 getAllUsers() 标记为非静态并将其放在用户下方,则基本上您是在要求一个特定用户了解其他所有用户。使用类比 - 这就像从一个公民那里询问有关该国所有公民的全部信息(您在您的国家/地区都认识他们吗?)。

将其标记为静态就像从百科全书中的公民定义中询问有关所有公民的信息。这比将其标记为非静态要好,但仍然有点奇怪和尴尬。

通常,各国都有人口登记册,负责处理有关公民的信息。将类比转换回来-您将拥有“其他东西”,类似于集合的寄存器来负责此操作。

于 2011-12-01T13:28:03.973 回答