.net N层开发中的DDD概念
在花了几个月的时间研究DDD方法之后,我现在开始将这些概念应用到我公司的实际产品中。事实上,我的任务是为未来的开发创建一个合适的、可维护的体系结构 我们决定使用以下技术:EF4(真正的v2)、Unity 我获得的大量信息非常有启发性,但是,在最佳实践中,我还有几个问题: 问题#1:DTO-最佳实践 我有我的域对象(POCO类)。有几种方法可以实现这些类.net N层开发中的DDD概念,.net,domain-driven-design,n-tier-architecture,n-layer,.net,Domain Driven Design,N Tier Architecture,N Layer,在花了几个月的时间研究DDD方法之后,我现在开始将这些概念应用到我公司的实际产品中。事实上,我的任务是为未来的开发创建一个合适的、可维护的体系结构 我们决定使用以下技术:EF4(真正的v2)、Unity 我获得的大量信息非常有启发性,但是,在最佳实践中,我还有几个问题: 问题#1:DTO-最佳实践 我有我的域对象(POCO类)。有几种方法可以实现这些类 传统方法:创建包含公共getter/setter、验证和适当业务逻辑的POCO类。还可以创建DTO并使用映射技术来管理它们。(汽车制造商) 传统
我希望我已经把这些问题说清楚了。提前谢谢你的帮助 我会一次一个地回答你的问题 答案1 DTO与DDD是正交的,因为它们在应用程序体系结构的不同位置服务于不同的目的。这就是说,DTO在域模型中没有位置,因为它们没有行为,因此会导致错误 坚持无知的POCO才是出路。杰里米·米勒有个好主意 答案2 位于域模型顶部的层通常需要返回它们自己的对象,这些对象是为所讨论的目的而定制的 对于UI,MVVM模式尤其有效。介绍了用于WPF的MVVM,但该模式在ASP.NET MVC中也很有魅力 对于web服务,这就是DTO模式应用的地方。WCF数据合约是DTO,如果您想知道的话:) 这将需要在服务接口和域模型之间来回进行大量映射,但这是为灵活的设计付出的代价。在这方面,你可能会觉得很有帮助 答案3 IoC越多(实际上是:DI)越好,但是关于你的问题,有一点让我印象深刻:DI容器应该只连接对象图,然后让路。对象不应依赖于DI容器
有关更多详细信息,请参阅。以后,请将每个问题单独列为一个问题……感谢您的评论。我的理解是,当域对象没有任何业务逻辑时,就会出现贫乏的域模型。他们仍然是一群能手。ADM的另一个要点是逻辑(如验证)发生在对象外部而不是包含在对象内部。如果你回顾问题1,混合方法。。。对我来说,在一个持久的无知域对象中创建一个DTO实例并不一定构成一个贫乏的域模型。你是对的,因为它违反了DDD原则。我可能还得再深入一点,答案2很完美。我倾向于可能需要创建自定义返回对象。谢谢你对MVVM的建议。。。我现在正在ASP.NET web.config中配置DI容器,然后使用Global.asax进行设置。对于您的答案3,如果我理解正确的话:所以要实现TDD方法,我只需在- public abstract class POCOBase<T> : ValidationBase, IPOCO where T : DTOBase, new() { public T Data { get; set; } public POCOBase() { Data = new T(); } public POCOBase(T dto) { Data = dto; } } public class SomePOCO : POCOBase { } public class SomeDTO : DTOBase { public String Name { get; set; } public String Description { get; set; } public Boolean IsEnabled { get; set; } } // EXAMPLES // POCOBase<SomeDTO> somePOCO = new SomePOCO(); // somePOCO.Data.Name = "blablabla"; // somePOCO.Validate(); // return somePOCO.Data;