3

我正在考虑实现一种领域驱动设计方法(类似于此处描述的方法),但希望将其与 Doctrine ORM 集成。有没有人成功地做这样的事情?

我最初的直觉是使用 Doctrine 作为 DAO 层,但 Doctrine 映射我的数据库字段似乎有点令人费解,而我的实体对象映射到(基本上)Doctrine 对象上的同一组字段。

我最初的目标是将我的所有 DQL/查询逻辑与我的域实体分开,但现在我在设计模式领域感到有点迷失。

我知道 Doctrine 2 应该为 DDD 技术提供更友好的方法,但我不确定我是否要等那么久。我想做的事情是否有意义,或者我应该找到另一种方法?

谢谢。

4

1 回答 1

2

在我看来,Doctrine 对于 DDD 来说是不完美的,因为缺少Repository类。Doctrine 支持诸如 Table Data Gateway 和 Active Record 之类的模式,虽然这些模式对于某些问题来说是很好的模式,但不一定是“经典”DDD 的最佳选择。但是,您可以解决这些缺陷。

一种选择是从 Doctrine_Table 派生并将其用作穷人的存储库。例如,如果您有一个名为“BlogPost”的类,您可能有一个表类“BlogPostTable”,它继承自 Doctrine_Table。然后,您可以将诸如“findByCategory”之类的方法添加到 BlogPostTable 类,使此类逻辑与您的域对象(继承自 Doctrine_Record)分开。它与“纯” DDD 所倡导的模式并不完全相同,但已经足够接近了。

即使没有完全相同的设计模式,您仍然可以使用 DDD 的核心见解。主要的是通用语言,即尝试使用领域专家和开发人员都可以阅读的精确语言来描述您的领域的概念。

于 2009-08-26T12:00:51.447 回答