Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.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_Oop_Domain Driven Design - Fatal编程技术网

Java 在域驱动设计中,您发现了哪些问题?

Java 在域驱动设计中,您发现了哪些问题?,java,oop,domain-driven-design,Java,Oop,Domain Driven Design,我刚刚写了一篇长篇大论(杂乱无章),阐述了我对当前领域驱动设计的看法,大量使用了spring和hibernate等框架 我想请你们指出我在这件事上的观点中的任何问题——为什么这不起作用,为什么它不能带来DDD的好处,为什么它总体上不是一个好主意 (我不认为我需要复制粘贴它-如果你认为我应该,告诉我) 我知道这个问题是主观的,但它旨在收集最主要的意见 (我在标记Java,因为讨论的框架都是Java框架)我们使用“贫血模型”方法,这样我们就可以用不同的业务逻辑重用相同的模型。但是,如果模型中的计算和

我刚刚写了一篇长篇大论(杂乱无章),阐述了我对当前领域驱动设计的看法,大量使用了spring和hibernate等框架

我想请你们指出我在这件事上的观点中的任何问题——为什么这不起作用,为什么它不能带来DDD的好处,为什么它总体上不是一个好主意

(我不认为我需要复制粘贴它-如果你认为我应该,告诉我)

我知道这个问题是主观的,但它旨在收集最主要的意见


(我在标记Java,因为讨论的框架都是Java框架)

我们使用“贫血模型”方法,这样我们就可以用不同的业务逻辑重用相同的模型。但是,如果模型中的计算和辅助方法适用于所有情况,我们会在模型中包含它们。但是我们不向我们的模型中注入任何东西,也不向IoC中注入我们的模型。

就我个人而言,我不相信将存储库对象注入域对象(意味着持久实体)的部分对于Spring和Hibernate是必要的。Hibernate已经提供了可以进行延迟加载的持久集合,因此您已经能够以将数据访问基础架构与业务逻辑分离的方式遍历域模型。我看不出将存储库添加到域模型中有什么价值


编辑:哦,在阅读整篇文章之前发布了这篇文章。现在我已经阅读了整个博客文章,我想我同意这一点。我喜欢尽可能不使用DTO的部分

我刚刚花了一年的时间来拆分一个应用程序,以消除一个贫乏的域反模式及其对Hibernate的错误使用

我可以毫无疑问地说,DDD带来的代码更容易理解和重构。在我们的例子中,删除了大量不必要的getter和setter,增加了封装,集中了业务逻辑,并由此(戏剧性地)简化了DDD附带的服务层,这使得系统的维护变得非常容易,现在我相信我们能够完成它,而在它被拖到永远之前。在不删除任何功能的情况下,我们将此应用程序的行数减少了50%

我还相信ORM工具的全部要点是使我的业务逻辑与持久性代码保持一致。当我们有一个贫乏的域模型时,每个域类都有一个DAO,现在我们有少量DAO作为CRUD在“主要”域类上的入口点,但另一个“次要”域类由它们的父类处理…不是因为持久性逻辑在父类中,而是因为Hibernate透明地对业务逻辑作出反应,使一切正常工作


简言之,我无法回答这个问题,因为我绝对100%同意你的帖子……而且我每天都在这样做

+1篇精彩而详细的帖子,但却是有史以来最差的wordpress模板:)!这是默认的模板:)它证明了我是一名开发人员,而不是一名设计师:)(很可能很快就会将博客移动到自己的服务器上)我的回答并没有达到回答的水平,但你的总结似乎很好。我抵制了这篇文章的其余部分,因为它是对我从未想过是个好主意(将存储库注入域对象)的响应,所以我不需要相信这是错误的。:)您是说您将业务逻辑保留在服务方法中吗?如果不是,那么严格地说,这不是贫血领域。听起来,您正在使用继承和组合技术通过将一组类型(空类)与一组行为(助手方法)合并来创建一个丰富的域模型。大多数模型只有2-3个“助手”方法。业务逻辑位于服务层。助手方法的一个示例可能是Contact.FullName,它只是将他们的名字和姓氏连接起来。