什么是优质领域模型的开源c#示例

时间:2009-06-30 15:14:50

标签: c# open-source concurrency business-objects

我是一个年轻的开发人员,仍处于职业生涯的模拟阶段。我已经阅读了很多关于并发等主题的内容,并使用工作单元来允许业务层控制持久性事务。我甚至实现了一些实现这些主题的痛苦但功能强大的代码。但我真的没见过一个真正优雅的实现的真实世界的例子。我周围没有很多优秀的TDD,模式聚焦的榜样,所以我不得不向外界寻求指导。

所以,我正在寻找一些开源企业应用领域模型的典型例子。最好用c#编写,但其他语言也可以,只要它们是干净优雅领域模型解决方案的好例子。

我真正希望看到的一些优点是并发,业务规则和对象验证,事务/工作单元和半透明日志记录机制的优雅解决方案。我也很想知道域模型代码中的异常处理有哪些现实世界的最佳实践。

我知道我可以随便开始撕毁一些开源项目,并尝试从坏处解读好处,但我希望这里的专家社区有一些好的想法,可以看看项目的流水线。努力。

感谢您的时间。

修改

我对使设计和构造更容易的框架不感兴趣。我选择的框架,或者是否使用框架是必要的考虑因素,但与我的问题完全不同。除非这些框架本身就是开源的,并且是非常好的例子。

我正在寻找的是一个“做对了”的项目,通过灵活且易于维护的代码解决现实世界的问题,这样我就可以亲眼看到,并了解它的一个例子应该做的不是一个简单的50行教程示例。

12 个答案:

答案 0 :(得分:11)

我很喜欢http://www.codeplex.com/oxite的oxite cms的架构。我从那个项目中学到了很多。我使用nhibernate进行数据访问而不是linq2sql,它对我有用。当然它不是一个大型项目,但它是一个完美的开始。 CSLA不遵循DDD范式。

Tim McCarthy(Wrox出版社)上面的“使用C#进行.NET域驱动设计”这本书非常好。

了解DDD的最佳书籍是Eric Evans的Domain-Driven Design: Tackling Complexity in the Heart of Software。本书是优秀DDD设计的“圣经”。

除此之外,http://dddcommunity.org/可以找到许多资源。在那里你可以找到更多来自DDD专家的视频和文章,包括Eric Evans,并且有一个良好的DDD设计的示例应用程序但不幸的是它在java中:(

答案 1 :(得分:4)

你可以查看nopCommerce我用它来尝试它的工作非常好而且它有很好的DDD和BO实现,相当通用和快速,安装模式也是一个经典所以如果你瞄准网络您也可以查看这些应用。

答案 2 :(得分:3)

看看Martin Fowler的书“分析模式”。这是一本旧书,因此类图不是UML,而是古老的(幸运的是,前后封面包含图表符号的描述)。

它没有C#代码。实际上它根本没有任何代码,因为它不是一本关于代码的书,而是一本关于领域模型的书。但它确实有域模型可供选择!

答案 3 :(得分:2)

虽然它并不完全符合您的要求,但iDesign的Juval Lowy编写了一些精彩的WCF Samples来解决您上面提到的许多情况。

Tim McCarthy(Wrox出版社)出版的“使用C#进行.NET域驱动设计”一书也可能引起关注。

答案 4 :(得分:1)

我将查看CSLA及其示例应用程序ProjectTracker。在工作中,我已经使用CSLA做了一些项目,它确实帮助你的BO更强大和更强大。有用。

虽然ProjectTracker不是真实的域模型,但它确实涵盖了真实域模型需要的许多情况。因此,如果您查看使用CSLA的BO图层提供的功能,您将会很好地了解优秀的域模型应该是什么样的。

答案 5 :(得分:1)

Rob Connery(MVC Storefront和Weke Road博客)http://blog.wekeroad.com/最近进入了DDD。可以修改MVC店面应用程序以反映他的学习,或者我相信。无论如何,他在这个主题上有一些很好的材料。

网站http://www.domaindrivendesign.org有一个C#示例应用。

关于DDD的一件事;它倾向于紧密耦合(在积极意义上)与它所写的bsuiness。因此,最好的示例可能与IP捆绑在一起,并且不太可能作为操作系统提供。

我倾向于看到的那种设计通常是贫血的领域模型。

答案 6 :(得分:1)

我希望我能告诉你我有一个很好的推荐,因为我很乐意看到这个问题以一致的本垒打选择回答。但是objektivs observed

  

......最好的例子可能与IP捆绑在一起,不太可能作为操作系统提供。

但是,有一个域我们有丰富的开源代码:软件开发工具。

这是一个警察(我还没有做过腿部工作),但是如果这个问题没有产生可靠的选择而你想自己去做,我会建议从一些更成熟的工具开始我们中的许多人已经使用过:NUnitDotNetNukeScrewTurnWikiNAnt等。它们有几个明显的优势,其中最重要的是它们的域模型将会已经(相对)可以访问。

答案 7 :(得分:1)

我最近遇到了使用MVC,nHibernate,AutoMapper构建论坛应用程序的教程,我发现源代码非常好写和结构化,在网络应用程序,域模型和存储库/服务中使用NH / FluentNH的好例子: http://mattias-jakobsson.net/Item/45/Building%20a%20forum%20application,%20Part%209

答案 8 :(得分:0)

您是否考虑过修改Castle Project

来自Castle项目“Castle是.net的开源项目,旨在简化企业和Web应用程序的开发。提供一组工具(协同工作或独立)以及与其他开源项目集成,Castle帮助你可以用更少的代码在更短的时间内完成更多工作。“

答案 9 :(得分:0)

我会看一下dofactory GoF网站。他们有很多例子,你可以以很小的价格购买,包括:
    * MVC - ASP.NET Web应用程序
    * MVP - Windows窗体应用程序
    * MVVM - WPF应用程序
它还包括两本非常好的书:“企业设计模式”和“头脑设计模式”

答案 10 :(得分:0)

我目前正在使用StuctureMapFluent NHibernateAsp.net MVCAutoMapperCastlexVal框架开展项目。我一直在从示例项目Nerd Dinner和Code Camp Server获得帮助。如果您对这些框架有任何疑问,请与我们联系。

  

http://code.google.com/p/codecampserver/

     

http://nerddinner.codeplex.com/

答案 11 :(得分:0)

GitHub上查看我可以用作跳转开始的完整Visual Studio解决方案,因为它包含一个非常简单但分层的架构。

我已在http://thomasjaeger.wordpress.com的博客上发布了有关对象持久性的详细视频,其中我将了解解决方案中集中式域模型的原因和方式。