可能重复:
持久性无知有什么好处?
经过一段时间和一些试图找出实体框架的问题,我得出的结论是,我只是没有得到持久性无知对象的意义.
尽我所知,使用持久性感知对象和持久性无知对象之间的实际区别在于,使用类似于
Person p = Person.Load(id);
p.Active = false;
p.Save();
Run Code Online (Sandbox Code Playgroud)
而另一个沿着线路使用
using (var context = new MyContext())
{
Person p = context.Persons.Single(x => x.ID == id);
p.Active = false;
context.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)
在第一种情况下,我可以返回p,Save()稍后再打电话.在后者中,我可以返回p,但我需要把它放到一个新MyContext()的保存它.在第一种情况下,假设Person从实际处理数据库逻辑的某个基础对象继承Load()和Save(),如果我想更改持久性,它只涉及更改该基础对象(甚至只是有一个IPersistent接口)多个基类可以实现访问多个商店).在后者中,MyContext如果持久层发生了变化,我需要更改每个实例,并且要零碎地进行操作会非常复杂.
我的印象是,持久性 - 无知是一件好事.我只是无法理解为什么.看起来设置,使用,改变批发和改变零碎都要复杂得多,而且没有任何优势.我只是遗漏了一些重要的东西,还是我对持久性意识/无知意味着什么有缺陷的完全理解?
坚持不懈是关注分离的一部分.你应该问问自己,为什么人应该知道它应该如何加载或保存?人应该处理自己的小域名.
PI意味着Person不关心它是来自内存,SQL,平面二进制还是任何其他Persistance方法,并允许您稍后将您的持久层替换为其他内容.您最初可能会开发应用程序以使用平面二进制文件和基本序列化程序来存储数据.稍后,您可能出于性能原因升级到SQL--并且只需在-job-处理持久性的相关层/组件的位置中进行此更改.否则,您必须通过整个代码库来更改处理持久性的小部件.
| 归档时间: |
|
| 查看次数: |
1089 次 |
| 最近记录: |