我正在为我的应用程序使用实体框架4.1和ASP.Net MVC 3。 MVC提供了表示层,一个中间库提供了业务逻辑和实体框架类的行为作为我猜想的数据层?实体框架,应用程序层和关注点分离
我可以将实体框架代码分成一组存储库类或其适当的变体,无论构成一个有价值的数据层,但是我在解决设计问题时遇到了问题。
如果存在多层方法来帮助我关注问题,那么我认为我选择的数据持久性也不应该成为表示层的问题。问题是,通过使用实体框架,我基本上紧密地将我的应用程序与实体更改自动跟踪并保持的概念紧密耦合。
因此,让我们假设在一个假设的世界中,我找到了一个不使用实体框架的理由,并希望将其交换出去。一个设计良好的解决方案应该允许我在适当的层执行此操作,而不会影响依赖层,但是因为所有代码都是在知道数据层跟踪对象更改的情况下编写的,所以我只能将实体以类似的方式工作的框架,例如nHibernate。
如何使用实体框架但不需要以假定实体更改正在被数据层跟踪的方式编写我的代码?
更新那些仍然不知道这个问题在他们自己的情况:
Ayende Rahien写了一大篇击落这整个论点: http://ayende.com/blog/4567/the-false-myth-of-encapsulating-data-access-in-the-dal
只是想补充一点,所有的ORM也会分担一些难以替换的差异。 关闭我头脑中的差异包括级联删除行为,急切的加载行为,linq行为(必须在跳过之前执行命令),存储过程/视图行为,临时sql行为,投影行为,甚至与LINQ。神话可交换的ORM层不存在。无论如何,你需要做很多工作。 – jfar 2011-05-11 21:10:04
很好的答案!老实说,有时候我只是需要将这些东西从别人身上反弹出来,让我放心。 – 2011-05-12 10:26:53
对于单个应用程序来说,这是一个很好的观点,但是如果您计划编写多个应用程序并且它们都应该使用相同的基本概念(也许还有代码库),那该怎么办?然后事情变得复杂,你不能只是“建立客户想要的”(他不知道)。 – Marc 2017-07-06 11:40:18