Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 领域驱动设计中工厂和接口的使用_Java_Domain Driven Design - Fatal编程技术网

Java 领域驱动设计中工厂和接口的使用

Java 领域驱动设计中工厂和接口的使用,java,domain-driven-design,Java,Domain Driven Design,我是DDD的新手。我试图弄清楚,即使对于那些具有简单构造函数的实体,也可以从因子创建所有实体。原因是我希望所有实体类都能实现接口,以允许灵活地更改实现类,而不必更改使用这些实体类的类。 例如:如果我们正在逐步淘汰某个实体类的使用 我想听听其他人是否考虑过这件事或者你的评论。 我欢迎任何赞成/反对的评论,只要你提供背后的逻辑推理 谢谢对于所有聚合根为的实体使用工厂没有任何错误 当需要使用不应属于实体本身的元素验证实体时,工厂非常有用,例如调用isEmailUnique()(请求存储库响应) 警告:

我是DDD的新手。我试图弄清楚,即使对于那些具有简单构造函数的实体,也可以从因子创建所有实体。原因是我希望所有实体类都能实现接口,以允许灵活地更改实现类,而不必更改使用这些实体类的类。 例如:如果我们正在逐步淘汰某个实体类的使用

我想听听其他人是否考虑过这件事或者你的评论。 我欢迎任何赞成/反对的评论,只要你提供背后的逻辑推理


谢谢

对于所有聚合根为的实体使用工厂没有任何错误

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

警告:CQRS反对在服务器(命令端)上验证电子邮件唯一性,但这是另一个主题

工厂将有助于实施包含多个实体的验证。


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

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


比如说,当您逐步淘汰沿线的某些实体时。这意味着您的域模型发生了更改,也意味着您的业务逻辑发生了更改。在这种情况下,您必须对DAO和业务逻辑层进行更改,以合并这些更改。因此,在这类事件中,无法避免重新分解代码

你能详细说明你将如何逐步淘汰实体吗?它们是你的域的面包和黄油,我想知道你如何在不改变域的语义从而不涉及任何现有代码的情况下删除它们?我想补充一点,这是一本很好的读物,有助于进一步了解工厂/工厂方法和AR创建。@Alexander Langer优秀文章:)“在这种情况下,您应该使用Spring或其他依赖项注入框架。”