C# 使用根持久化类或基持久化对象是一种架构气味吗?
Alt.Net社区对Microsoft Entity Framework的一个主要抱怨是,它迫使您对存储在数据库中的所有内容使用一个基本的持久对象。我有两个与此相关的问题:C# 使用根持久化类或基持久化对象是一种架构气味吗?,c#,orm,C#,Orm,Alt.Net社区对Microsoft Entity Framework的一个主要抱怨是,它迫使您对存储在数据库中的所有内容使用一个基本的持久对象。我有两个与此相关的问题: 将“根持久类”作为应用程序中域对象的基础是可以接受的,还是这是一种体系结构气味 如果您觉得在应用程序中使用一个也可以,那么ORM框架强制您使用一个也可以吗?有没有理由避免让您这样做的框架 一段时间以来,我一直使用一个抽象的基本对象作为我所有的周期类的根。它使一些家务活变得更容易。除非您使用数据传输对象(DTO)进行持久化并使
一段时间以来,我一直使用一个抽象的基本对象作为我所有的周期类的根。它使一些家务活变得更容易。除非您使用数据传输对象(DTO)进行持久化并使用该模型,否则根据我的经验,为可持久化的类提供根对象将大大减少代码重复并提高开发人员的生产效率。即使在使用DTO时,我也认为这可能会有所帮助,尽管我很少使用DTO,因此无法根据经验说话 我不认为它是代码气味的原因如下:
编辑:Inline statichippo的回答,我同意他关于这个基类的观点,包括关于底层数据存储机制的信息(如表/列名、数据库类型等)。我的感觉是,假设上下文是
因此,如果基类用于描述,例如,一个ID和相等的含义(因为很多时候,如果实体具有相同的ID,那么它们被认为是相等的),那么这很好。但是,当它开始描述以数据库为中心的信息(如表、列、实体状态等)时,我认为它开始有味道。对于复杂度从低到中等的应用程序,使用基本的持久对象确实可以提高开发效率 但是,这样做会限制您的代码,并随着应用程序变得更加复杂而限制设计选项。显然,在一开始就用完了基类,这在C#和Java中非常重要。它还促进了关注点的分离 我想说,在考虑任何ORM时,最重要的事情是问以下问题(摘自Jeremy Miller的文章):
- 业务逻辑能否独立于数据库运行
- 我可以独立于数据库模型设计域模型吗
- 我的持久性策略如何影响我的业务逻辑