这个问题已经在这里有了答案:




已关闭8年。






经过一段时间和尝试找出 Entity Framework 的一些问题后,我得出的结论是,我只是不了解持久性无知对象的意义所在。

尽我所知,使用持久性感知对象和不了解持久性的对象之间的实际区别在于,

Person p = Person.Load(id);
p.Active = false;
p.Save();

另一个用于
using (var context = new MyContext())
{
   Person p = context.Persons.Single(x => x.ID == id);
   p.Active = false;
   context.SaveChanges();
}

在第一种情况下,我可以返回p,并在以后的某个时间调用Save()。在后者中,我可以返回p,但需要将其放入新的MyContext()中进行保存。在第一种情况下,假设Person从实际上处理数据库逻辑的某个基础对象继承Load()和Save(),如果我想更改持久性,则只涉及更改该基础对象(甚至只是一个IPersistent)多个基类可以实现以访问多个商店的接口(interface))。在后者中,如果持久层发生了更改,我将需要更改MyContext的每个实例,并且零零碎碎地做起来很复杂。

我的印象是,持之以恒的无知是一件好事。我只是不明白为什么。似乎设置,使用,批量批发和零零碎碎要复杂得多,对于这种复杂性没有任何优势。我只是错过了重要的事情,还是我对持久性感知/无知意味着什么的全部理解存在缺陷?

最佳答案

持久性无知是关注分离的一部分。您应该问自己,为什么“个人”应该知道应如何加载或保存它?人应该处理自己的小领域。

PI表示Person不在乎它是否来自内存,SQL,平面二进制或任何其他持久性手段,并允许您稍后将持久性层替换为其他形式。您可能最初会开发应用程序以将平面二进制文件与基本序列化程序一起使用来存储数据。稍后,出于性能原因,您可能会升级到SQL,并且仅在-job-将要处理持久性的一个位置(关联的层/组件)中需要进行此更改。否则,您必须遍历整个代码库,在此处和此处更改涉及持久性的小部分。

关于c# - 我不明白持久性独立性的意义,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11084384/

10-13 03:05