Domain driven design 领域驱动设计(DDD)陷阱
我是DDD的新手,希望了解您可能想分享的任何陷阱。稍后我将对其进行总结,让更多的新手阅读:) 谢谢 迄今为止的总结:Domain driven design 领域驱动设计(DDD)陷阱,domain-driven-design,Domain Driven Design,我是DDD的新手,希望了解您可能想分享的任何陷阱。稍后我将对其进行总结,让更多的新手阅读:) 谢谢 迄今为止的总结: 您的实体主要只承载数据,不包含业务逻辑 没有充分使用有界上下文 过分关注模式 关于这个主题也有一个很好的演示(视频)。最大的陷阱之一是,您最终会遇到一个所谓的问题,即您的实体主要只承载数据,不包含业务逻辑。当您在现有关系数据模型的基础上构建域模型,并将数据库中的每个表作为域模型中的实体时,通常会出现这种情况 当心 领域驱动设计的陷阱之一是在模型中引入模糊性。如文章所述: 模棱
- 您的实体主要只承载数据,不包含业务逻辑
- 没有充分使用有界上下文
- 过分关注模式
关于这个主题也有一个很好的演示(视频)。最大的陷阱之一是,您最终会遇到一个所谓的问题,即您的实体主要只承载数据,不包含业务逻辑。当您在现有关系数据模型的基础上构建域模型,并将数据库中的每个表作为域模型中的实体时,通常会出现这种情况 当心 领域驱动设计的陷阱之一是在模型中引入模糊性。如文章所述: 模棱两可是我们国家的超级恶棍 泛在语言 当两个不同的概念共享同一名称,或者同一概念可能有不同的用途时,可能会发生这种情况。可能有必要 在中公开域结构 上下文中有界上下文的术语 地图 如果一个模型使用了太多不同的方式,或者有太多的责任,这可能表明它应该被划分。使用得不够。这本书就在蓝色大书的后面,但埃里克·埃文斯(Eric Evans)公开表示,他相信有界语境和无处不在的语言是最重要的概念 同样,人们往往过于关注模式。那些不是DDD的肉 此外,如果你没有很多领域专家的访问权限,那么你可能没有做DDD,充其量你是DDDish
更具体地说,如果你最终建立了多对多的关系,那么你可能设计了一些错误的东西,需要重新评估你的聚合根/上下文可能是最重要的一个:不要探索域模型的核心、基本原则及其在泛在语言中的表示。有了太多的技术选项,你的头脑很容易就充满了ORMs、MVC框架、ajax、sql和nosql。。。如此之多,以至于您试图解决的实际问题几乎没有空间了 这就是DDD的关键信息:不要。相反,首先明确关注问题空间。构建一个去除了体系结构混乱的领域模型,以捕获、公开和传达该领域 哦,还有一个问题:认为你需要域服务来完成你在域模型中所能做的一切。不可以。您应该首先尝试将域逻辑与它所属的实体/值类型放在一起。只有在发现不属于E/V的功能时,才应该创建域服务。否则,您最终会在别处突出显示贫乏的域模型 hth.你可能会喜欢格雷格·杨讲述DDD失败的原因 简言之:
- 缺乏意图
- 贫血域模型
- DDD-Lite
- 缺乏孤立
- 什么李>
- 不精
- 代理域专家(业务分析师)
仅仅因为你有实体和存储,并且正在使用(n)Hibernate,这并不意味着你在做DDD。这不是我个人对这个主题的经验,但它在DDD书籍中被提到过几次,我最近一直在想:当你真的需要身份时使用实体,在其他情况下,使用值对象。也就是说,实体模式通常是任何模型名词的默认选择,而这不是它应该的方式。我同意这一点。是我第一次爱上新人,我不同意这一点。DDD不是一种实现理念,而是一种实现理念,其中的可能性是无穷无尽的。所以你不建议使用函数式编程?你可能应该把这个问题放到社区wiki上。我发现对域服务的需求是尚未被认可的聚合root.Wow的一个非常真实的想法。这正在融化我的思想。请看一看。您的第二条规则不是DDD规则,它是一个简单的OO概念。抽象级别错误的代码。但是,不要将值对象与EF一起使用。别这样。(Jimmy Bogard有一个EF DDD记分卡,链接当前已断开)仅仅因为您有实体和存储并且正在使用(n)Hubernate,并不意味着您正在进行DDD。杰出的