在.NET中应用域驱动设计的最佳实践?

时间:2009-07-28 21:29:14

标签: c# .net domain-driven-design

我一直在努力学习并将域驱动的概念应用到我的软件开发中。我尝试做的第一件事是根据业务逻辑需求创建我的域模型。我经常使用OR Mapping工具,如LLBLGen,NHibernate或Linq to SQL,来创建数据模型和数据访问层。然而,领域模型和数据模型通常非常相似,这让我想知道通过维护两个模型我真正获得了什么好处。

有人可以分享他们对域驱动设计的实际想法吗?此外,在应用程序中应用DDD时,如何处理数据模型或数据访问层?

提前致谢。

修改

找到一个好的article,带有示例代码,关于Repository Pattern。

3 个答案:

答案 0 :(得分:4)

我通过Repository模式抽象我的数据访问,因此请保持我的域对象完全POCO和数据提供者不可知。

这使我能够从域的角度来塑造我的应用程序,专注于逻辑,主要通过单元测试。

一旦确定了这一点,我就放入了表示层(通常是网页),然后提交到具体的数据库模式。然后我实现我的具体Repository类,可以是L2S。

我在这里起草了几篇文章 - http://www.duncangunn.me.uk/dasblog/2009/04/11/TheRepositoryPattern.aspx http://www.duncangunn.me.uk/dasblog/2009/06/27/MockingLinqToSQLRepositories.aspx

在接下来的几周内,请密切注意,因为我将记录并提供使用工作单元模式的实施示例代码。

答案 1 :(得分:2)

我们将域对象直接映射到数据库,意味着我们没有单独的数据访问层,而是将其视为基础架构代码。

我们使用Fluent NHibernate进行大部分配置。

答案 2 :(得分:2)

拆分有界上下文也是一个很大的DDD好处,即使您必须在上下文之间复制数据,也可以在其上下文中解决每个问题。

良好的聚合根定义提供了更简单的设计,并导致潜在的性能提升(通过网格计算实现可扩展性,请参阅Gojko Adzic post)。

当您的设计真正成为域驱动时,您的应用程序会更加灵活地满足新的业务需求,因为实现真的是一个实现细节。