当我使用 ORM 完成我的第一个大型项目时,我开始意识到 ORM 将成为创建具有表现力和传达意图的域对象的一大障碍。
也就是说,我知道我们不希望域对象仅仅是可公开访问的 getter 和 setter 的袋子。此外,我开始意识到,仅仅让 IList
我的问题是:我尝试以这种方式制作领域对象是否太过分了?这些问题应该只是其他应用程序组件的一部分吗?或者我应该有一个“真正的”域对象(具有表现力的东西)和一个由 ORM 水合的“哑巴”POCO 对象?
(编辑:系统吃了一堆我的尖括号。)
最佳答案
我的观点是你让 EF 做它的事情并创建免费赠品 POCO。您也可以称它们为 DTO——它们的作用是充当从内存到持久性再返回的桥梁。就您的“域”而言,我从未相信您的数据库架构反射(reflect)了一致的域模型。因此,我总是在代表业务领域的 Persistence(或存储库)层之上创建一个 Domain 层,将 Persistence 的香肠工厂排除在外。该领域层可以根据需要混合您的 DTO,以创建一个有意义的面向开发人员的模型。使用工厂模式从 DTO 创建域对象,反之亦然 - 将 DTO 保留在客户端代码之外,以便您可以将架构更改与使用者隔离。
这是更多的工作,更多的映射代码等,但这是值得的 - EF 已经减少了您的代码,我认为您实际上应该花时间对域逻辑和表示进行编码,这使您比代码生成工具更好: )
祝你好运。
关于design-patterns - POCOs != 域对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4627695/