在域驱动设计中使用工厂和接口

时间:2013-12-02 00:19:45

标签: java domain-driven-design

我是DDD的新手。我试图弄清楚是否可以接受所有实体从因子(ies)创建,即使是那些具有简单构造函数的实体。原因是我希望所有实体类都能实现接口,以便在不更改使用这些实体类的类的情况下灵活地更改实现类。 例如:如果我们逐步逐步淘汰某个实体类的使用。

我想听听其他人是否考虑过这件事或你的意见。 只要您提供合理的推理,我欢迎任何赞成/反对意见。

谢谢

2 个答案:

答案 0 :(得分:1)

对于聚合根的所有实体使用工厂没有错。

当需要使用不属于实体本身的元素验证实体时,工厂非常有用,例如调用isEmailUnique()(请求存储库进行响应)。< / p>

警告:CQRS违反了服务器(命令端)上唯一的电子邮件验证,但它是另一个主题。

工厂可用于实施包含多个实体的验证。

当然,如果你真的不需要特定的验证概念,YAGNI就在这里:简单地验证实体构造函数中的输入,或者更好,使用构建器模式(来自Joshua Bloch)。

答案 1 :(得分:0)

嗨关于你的第一个问题。 “你应该能够使用它的构造函数创建实体类”,那么我的回答是肯定的。因为此对象随后由业务对象和数据访问层(DAO)使用。为业务对象和DAO提供工厂方法是个好主意。因为当您需要创建这些类时,您希望为示例数据库连接注入依赖项,引用不同的bean等。在这种情况下,您应该使用Spring。

让我们说当你逐步淘汰一些实体时。表示您的域模型已更改,这也意味着您的业务逻辑已更改。在这种情况下,您必须对DAO和业务逻辑层进行更改以合并这些更改。因此,在这类事件中,您无需重新分解代码。