这是一个Anti-DDD的设计
发布于:2018-02-07 16:57  浏览:

我觉得两方面吧,首先,正如netfocus所说,NLayerApp的确有些与DDD思想相冲突的部分,比如,理论上看,直接使用Domain Entity作为DTO来穿越网络边界,这是一个Anti-DDD的设计,但从技术上来看,WCF的Proxy Class屏蔽了这种设计的某些负面影响,相当于打了个擦边球;不过我还是建议不要直接将Domain Entity作为DTO对待;有关这部分内容我会在领域模型章节做详细阐述;其次,对于INotifyPropertyChanging等接口,这是NLayerApp为了实现Unit Of Work模式而引入的一种与平台相关的类型,确切地讲,如netfocus所说,采用了微软的特定技术(比如EF),这就使得Domain Entity的实现并非是POCO,但先抛开Unit Of Work的实现不管,如果说,某种微软技术的确能够在开发上为我们带来便捷的,比如通过T4来根据Model产生代码,那么我们也不妨用之。回过头来想,说不定如果不用T4,我们还会选择其它的工具,比如CodeSmith。总之,应该尽量让事情变得简单。另外再补充一点,就是在我前面的文章中,曾经提到过,经典的架构风格(就是目前讨论的最多的三层、四层等)并非真正的DDD实践,这句话是Greg Young在cqrs.info里说的,或者应该说,NLayerApp也许也不是纯粹的DDD实践,但它的确是往“面向领域”的方向走的。我觉得不管怎么样,里面还是有很多内容是值得我们参考的,于是我也就打算写这样一系列文章来分析整个NLayerApp的架构设计。这可以让我们看到另一个与PetShop又不同的架构风格。在这系列文章的讨论过程中,我会依旧按照DDD的思路去分析NLayerApp设计上的优劣,也欢迎广大热爱架构设计的朋友参与讨论,发表见解。