有没有使用 DDD(领域驱动设计)的开源项目? [关闭]

Posted

技术标签:

【中文标题】有没有使用 DDD(领域驱动设计)的开源项目? [关闭]【英文标题】:Are there any open source projects using DDD (Domain Driven Design)? [closed] 【发布时间】:2010-09-14 04:57:00 【问题描述】:

我试图理解 DDD 背后的概念,但我发现仅通过阅读书籍很难理解,因为它们倾向于以相当抽象的方式讨论该主题。我希望在代码中看到一些好的 DDD 实现,最好是在 C# 中。

有没有在开源世界实践 DDD 的项目的好例子?

【问题讨论】:

【参考方案1】:

我自己没有使用过任何工具,但 DDD ***页面上提到了一些工具。不过,它们中的大多数似乎都是用 Java 实现的。

http://en.wikipedia.org/wiki/Domain-driven_design#Software_tools_to_support_domain-driven_design

【讨论】:

【参考方案2】:

Jimmi Nilssons 的书(和博客)值得一读 Applying domain driven design

这是 Evans 和 Fowlers 书籍 (Domain-Driven Design - Evans) 和 (Patterns of Enterprise Application Architecture - Fowler) 的混合体

【讨论】:

【参考方案3】:

这不是一个开源项目,但它仍然是一个代码示例:http://www.codeplex.com/dddpds

示例在.NET Domain-Driven Design with C#: Problem-Design-Solution一书中使用


一个看起来很有希望但可能已经死亡的虚构示例: http://www.codeplex.com/domaindrivendesign

【讨论】:

【参考方案4】:

好的,我找到了,但它不是 Java,不是 C#:http://timeandmoney.domainlanguage.com/

【讨论】:

【参考方案5】:

恐怕http://www.codeplex.com/domaindrivendesign 确实已经死了,但如果有人有兴趣贡献,请随时与我联系。

总的来说,我建议不要过度依赖 DDD 的示例,最好的示例可以显示域建模的结果和/或实现模式的一种方法。因此,我建议您阅读这本书,然后在forum 提问。

【讨论】:

很好,感谢论坛链接。【参考方案6】:

Eric Evans 和一家瑞典咨询公司基于 Eric 在本书中使用的运输示例发布了一个示例应用程序。它是用 Java 编写的,但这些概念在项目页面上有详细记录。

http://dddsample.sourceforge.net/

但是,请注意,DDD 更多的是关于旅程而不是目的地。了解您正在查看的示例代码在变成您现在所看到的之前采用了多种形式。您没有看到最初使用的笨拙模型,并且您错过了根据沿途获得的洞察力重构模型所采取的步骤。虽然构建块在 DDD 中很重要,但 Eric 认为它们被过分强调了,所以对所有样本都持保留态度。

【讨论】:

示例已移植到 C#。有关链接,请参阅 Lance Fisher 的答案。 +1 @stefan 是对的,ddd 不是关于构建块模式,它不是关于使用框架 x 而不是框架 y。它不断地询问这个模型是否可以帮助我解决我所在领域的核心问题。模型不是“真理”或“现实”的普遍表示,它们的存在是为了解决特定问题。做对了,不要担心其余的,这只是细节。 我相信这个项目也死了。很遗憾,因为它一直是我最喜欢的。非常简单、直接、简洁,虽然它有一些违反本书的规定(比如引用一个聚合中的值对象,引用不同聚合中的另一个值对象),但总体而言,它是一本极好的指南。【参考方案7】:

我不确定它有多完整,但我在 Google 代码上找到了 NDDD Sample。

【讨论】:

我相信这个项目也死了。很遗憾,因为它一直是我最喜欢的。非常简单、直接、简洁,虽然它有一些违反本书的规定(比如引用一个聚合中的值对象,引用不同聚合中的另一个值对象),但总的来说它是一个很好的指南。【参考方案8】:

Code Camp Server, Jeffrey Palermo's 本书的示例代码ASP.NET MVC in Action 是开源的并且使用 DDD。

(和我在Good Domain Driven Design samples的回答一样)

【讨论】:

代码营服务器有贫血的域模型【参考方案9】:

http://kigg.codeplex.com/ 对我来说是一个很好的例子。

【讨论】:

【参考方案10】:

我知道它不是 C#,但这是一个遵循域驱动方法的 java 元框架:我对此了解不多,但我愿意在不久的将来研究它:Roma Framework

【讨论】:

【参考方案11】:

http://sellandbuy.codeplex.com/

另一个项目 DDD

【讨论】:

【参考方案12】:

我很惊讶没有人提到 Macto,Ayende 的 DDD 示例。 Macto 最重要的一点是,实际编码之前的漏洞思考过程以series of posts 的形式呈现。 DDD 不是关于实现模型,而是关于对业务域进行建模。诸如“某些概念是聚合根/实体/值对象”之类的决定远比 AR 的持久性重要得多。

另外我会推荐 Udi Dahan 的关于 SOA 和 CQRS 的视频,这可能会为应用 DDD 提供更好的背景。

【讨论】:

Macto 不完整。他从未完成它。在微软西班牙发布了一系列关于 NLayerApp 的博客(非常具有破坏性的批评者)之后,他吹嘘了这一点……但最终他还是失败了。他说他太忙了,我不怀疑,这家伙真的很擅长他的工作,他的傲慢(a**holeness)同样成比例。

以上是关于有没有使用 DDD(领域驱动设计)的开源项目? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

DDD as Code:如何用代码诠释领域驱动设计?

DDD领域驱动设计落地实践系列:初识DDD

DDD领域驱动设计

初学DDD-领域驱动设计

DDD「领域驱动设计」分层架构初探

DDD领域驱动设计:贫血模型和充血模型详解