php - 将 Doctrine 与领域驱动设计结合使用

标签 php orm domain-driven-design doctrine-1.2

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

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

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

我知道 Doctrine 2 应该为 DDD 技术提供一种更友好的方法,但我不确定我是否愿意等那么久。我想做的事情有意义吗,还是我应该寻找其他方法?

谢谢。

最佳答案

在我看来,由于缺少 Repository,DDD 不完善 Doctrine。类(class)。 Doctrine 支持 Table Data Gateway 和 Active Record 等模式,虽然它们是解决某些问题的好模式,但不一定是“经典”DDD 的最佳选择。但是,您可以解决这些缺陷。

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

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

关于php - 将 Doctrine 与领域驱动设计结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1295450/

相关文章:

php - PHP中是否有类似NEGATIVE_INFINITY的东西?

php - ORM 类的对象无法使用 Idiorm 转换为字符串

design-patterns - 域对象封装 : static methods vs Service classes

php - 在构造函数中注入(inject)所有变量或使用 setter 并在未设置时抛出异常是更好的做法吗?

javascript - laravel5.3 中带有图像上传的 Laravel 表单

php - MYSQL计算收到消息和第一次回答之间的平均时间

java - 复合键的 JPQL 异常

php - 多态关系和同名模型和 morphTo 函数

domain-driven-design - 贫血域模型或 "where to put logic"

c# - TDD 和 DDD 入门