C# 类是否也应该负责存储自身';将数据传输到数据库?

C# 类是否也应该负责存储自身';将数据传输到数据库?,c#,C#,假设我有一个名为Rectangle的类,它有一些属性,比如:颜色、宽度、高度等。所以这个类肯定会描述这个对象,但我也想将这个对象保存到数据库中,然后从db中读取和创建对象 我的问题是,这个类是否还应该有诸如“SaveRectangle”、“GetOneRectangle”、“GetAllRectangles”、“EditRectangle”之类的方法来处理SQL操作,或者是否有其他好的做法?我建议您签出 有几种不同的数据持久化模式。您描述的模式是“活动记录”。在短期内,它确实可以让事情变得更简单

假设我有一个名为Rectangle的类,它有一些属性,比如:颜色、宽度、高度等。所以这个类肯定会描述这个对象,但我也想将这个对象保存到数据库中,然后从db中读取和创建对象


我的问题是,这个类是否还应该有诸如“SaveRectangle”、“GetOneRectangle”、“GetAllRectangles”、“EditRectangle”之类的方法来处理SQL操作,或者是否有其他好的做法?

我建议您签出

有几种不同的数据持久化模式。您描述的模式是“活动记录”。在短期内,它确实可以让事情变得更简单,但我发现,在处理许多对象时,它经常会导致问题


我通常选择使用“数据映射器”和“表数据网关”模式的组合,将存储/检索关注点与对象本身分离。这使我能够分别处理这两种数据,而且可能更有效。

有几种存储数据的模式。构建对象的方式取决于您决定使用的模式。您所描述的通常称为活动记录模式。相反的是数据映射器模式(即辅助对象处理从数据库存储/检索数据的模式)。类可能知道如何将自身序列化为XML/JSON/等,但实际的数据层只应由另一个对象访问,例如
RectangleRepository
对象。通过这种方式,只需创建一个新的存储库对象,就可以轻松地支持将对象保存到文件、REST web服务或SQL。您可能希望对设计模式进行一些研究。根据可靠原则(请参见和),如果您希望遵循单一责任原则,那么更改对象的原因应该只有一个。如果将持久性放在这个对象中,有两个原因——一个是更改对象中的数据,另一个是更改数据持久性的方式。那么你就违反了这个原则。当然,这些原则是不一定要遵循的准则……谢谢你的回答。我不得不说,这是我第一次使用stackoverflow,我很惊讶获取信息的速度和容易程度。