我们即将使用asp.net设计一个租用预订的网站。应用程序会有一个变化,我想知道如果使用DDD有助于维护和性能。我想知道如果有使用数据集和SP或DDD设计的新类似网站会怎么样。所以我的朋友去DDD还是老式的?
答案 0 :(得分:3)
和你一样,我正在创建一个新项目,我选择了DDD方式,我确信它比“旧时尚”方式更好(解耦和更好的可测试性)...但我必须承认我正在努力解决一些问题而且总是找不到答案......甚至在stackoverflow.com上
例如,聚合根的概念与ASP.NET MVC网站的设计(主/细节关系 - 创建/更新);模型绑定与复杂对象图包括实体对象和值对象等。所有这些都是最近的概念,甚至 gurus (如Eric Evans for DDD)也不知道所有答案。
最后,我认为社区项目S#arp Architecture是一个非常好的学习场所,asking questions。
答案 1 :(得分:2)
“想知道如果使用DDD会对维护和性能有所帮助。”
一堆事情可以帮到你。 TDD / BDD,IoC,像NHibernate一样好的OR / M(用于配置的FluentNHibernate)......
DDD,做得对,只是创建干净,简单和可维护软件的一个支柱。但它只是拼图的一部分。如果您只是使用管理器类创建一堆贫血域对象,使用存储过程进行数据访问并忘记依赖注入,DDD可能会出现严重错误......
但是做得对,DDD可以给你的是清晰明了的代码:旧西部的程序性意大利面条代码将消失,你会发现更容易绕过自己的代码库。可以进行重构(并且变得不那么可怕)。
就个人而言 - 我永远不会触及另一个“老派”代码库,我当然不会以这种方式启动新项目。给我一个绿地项目,我将要求ReSharper,NHibernate,FluentNHibernate和StructureMap。这就是我所需要的......
答案 2 :(得分:0)
是的,可以构建同样适用于DDD的网站。 DDD的目标是让域名成为您的驾驶模式。目前在我们的项目中,我们使用NHibernate作为域上的对象关系映射器。这非常有效,特别是因为NHibernate还支持不同的东西来增强二级缓存等性能。需要从10000多个用户的数据库加载的对象列表只需要一个查询,不同的会话将共享相同的内存缓存。因此,如果您使用ORM,请确保使用这些缓存优势!
您还应该考虑的是,对于软件的每个发布周期,您不仅要更新软件(域模型),还需要在域模型更改时更新数据库。但是,这与必须更新StoredProcs没有区别。
BTW:即使使用DDD和ORM,仍然会出现您可能更喜欢使用SP的问题。示例:创建新的订单号。如果您的网站上有超过10000个用户且多用户想要创建新订单,则必须确保所有订单号都保持唯一。我们发现我们更喜欢SP在ORM上面做那种锁定。如果你现在有机会尝试DDD肯定有一个去吧。祝你好运。
答案 3 :(得分:-2)
在我看来,DDD适用于使用ASP.NET MVC构建的大型网站。但是我提醒说,ASP.NET MVC平台目前仍然相对不成熟。如果您选择使用DDD,那么我建议您将ASP.NET MVC,TDD和Repository Pattern视为您的技术组合。如果您使用的是标准WebForm,我不建议使用DDD。如果你正在使用SP,那么DDD真的不是很好,因为你不能使用Repository模式,因为它依赖于GetAll,GetByID,Insert,Update,Delete ......并且你使用IQueryable在LINQ中实现的Filters扩展它们...好吧,如果你使用SP,那么你必须取消这个结构的整体优势。只是我的观点。