【问题标题】:Builder pattern with Datamappers带有数据映射器的构建器模式
【发布时间】:2014-08-26 16:30:22
【问题描述】:

我目前正在完成一个项目,并且正在尝试尽可能多地使用 DDD 主体。

我已经实现了一些实体、值对象、工厂、构建器,并且刚刚开始使用依赖注入服务。我可以清楚地看到以 DDD 方式做事的好处。

我正需要开始处理数据访问层。我对实现有点困惑。我想使用存储库模式,但我对如何从数据库中获取对象到实体有点困惑。我假设我应该使用我的构建器类,但是如何在我的数据访问层中获取它们。我应该在存储库中实例化构建器的新实例吗?我认为这里不应该使用依赖注入(或者说错了吗?)

我在我的项目中使用 PHP,所以 PHP 示例会很好,但伪代码或 C# 可能也可以。

基本上,我有点困惑的是,将在我的数据访问层中从数据库构建对象的代码放在哪里。

【问题讨论】:

    标签: php domain-driven-design entities


    【解决方案1】:

    在存储库中,您通常不会使用构建器来构建实体。

    当有许多可能的方法来实例化一个对象时,通常使用构建器来限制类提供的构造器的数量,因此在对象创建时使用,在相关实体的生命周期开始时。另一方面,存储库的职责不是构建新实例,而是对现有对象进行脱水和水合(在实体生命周期的中间)。

    这两种方法之间有一条细线,因为由于所使用的编程语言(例如 Java)的技术原因,水合有时也涉及一些构造函数。但是,创建对象时使用的构造函数强制执行类不变量;另一方面,水合通常简单地使用不强制类不变量的默认构造函数,并通过直接访问(例如,通过支持它的语言中的反射)设置属性。一个常见的 PHP ORM 映射器 Doctrine 甚至可以通过反序列化来水合对象,因此根本不需要调用构造函数see this related question

    如果您刚开始使用 DDD,我建议您使用 ORM 映射器来实现存储库;一开始就手动实现这些东西通常不是一个好主意。

    【讨论】:

      猜你喜欢
      • 2010-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-05
      • 2013-11-07
      • 2016-03-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多