如果我稍后应用 ado 实体框架,推荐的数据访问层设计模式是啥?

Posted

技术标签:

【中文标题】如果我稍后应用 ado 实体框架,推荐的数据访问层设计模式是啥?【英文标题】:whats the recommended Data access layer design pattern if i will apply ado entity frame work later?如果我稍后应用 ado 实体框架,推荐的数据访问层设计模式是什么? 【发布时间】:2010-11-25 22:40:27 【问题描述】:

我正在创建一个网站并使用 Linq to SQl 作为数据访问层,并且我愿意让网站可以在 linq to sql 和 ado 实体框架上运行,而无需更改其他层中的许多内容:业务逻辑层或 UI 层,

实现此目标的推荐模式是什么?你能简单解释一下怎么做吗?

更新

正如下面回答的那样,存储库模式对我有很大帮助,

我查看了nerd Dinner网站并理解了它,但我在里面找到了这段代码:

public class DinnersController : Controller 

        IDinnerRepository dinnerRepository;

        //
        // Dependency Injection enabled constructors

        public DinnersController()
            : this(new DinnerRepository()) 
        

        public DinnersController(IDinnerRepository repository) 
            dinnerRepository = repository;
        

这意味着据我了解,它使用接口 IDinnerRepository 声明了一个 DinnerRepository,并在构造函数中给了它一个 DinnerRepository,在我的情况下,例如 linq to sql 实现,

我的问题是如果我需要切换到 ado.net 实体框架,我需要编辑这个构造函数行还是有更好的解决方案?

更新 2

我应该将这个 Respository Interface 和实现它的类放在我的解决方案、数据访问层还是业务层中?

【问题讨论】:

不,构造函数合约根本不会改变。更改都将在实际实现 IDinnerRepository 的类的实现中,从调用存储库的人的视图中隐藏。 @Soulhuntre 是的,明白了,谢谢你的解释:) 【参考方案1】:

Repository pattern 是一个不错的选择。如果您将其实现为接口;那么您可以更改具体的类,而不必更改任何其他内容。

Nerd Dinner walkthrough 有一个很好的存储库模式示例(带有接口)。

您在此处列出的代码将进入您的控制器(如果您正在执行 MVC 应用程序);并且你创建任何你想要的类,只要它实现了IDinnerRepository 接口(或者你可以有类似IRepository 接口的东西,如果你想设计一个每个人都必须实现的接口来执行基本的CRUD操作,然后如果您需要更多接口,请实现特定接口(但不要让接口变得疯狂)。

如果您要对应用程序进行“分层”,那么该部分将位于“业务逻辑”层,而存储库将位于“数据访问层”。该构造函数合同将是“松散”耦合的部分。

【讨论】:

请检查我在问题正文中的更新,我试图在上面解释我的问题。【参考方案2】:

我最终使用了“存储库”模式的一个小变体。我从优秀的书呆子晚餐教程中选择了它。您可以找到the whole tutorial here 和code is on Codeplex。

如果您不是在 MVC 情况下,不要让所有 MVC 让您失望,Linq2SQL 的底层封装是一个很好的封装。在最近的代码库更新中,我从 Linq2SQL 转到了 Linkq2EF,所有更改都在存储库中得到了很好的处理,无需触及外部代码。

同样值得注意的是,RIA Services 的内容也有类似的模式。您将它指向 Linq2Sql 或 Linq2EF,它会在其上构建一个包含 CRUD 的基本层。该层在源代码中,因此您可以将其撕掉并在非 RIA 项目中使用,但我只是将其保持原样并在其他项目中链接到它,因此即使我忽略了网络传输,我也会使用该层能力。

【讨论】:

你能给我网址,让我了解更多关于 RIA 服务及其使用的信息吗? Brad Abrams 有一个包含 23 部分的 RIA 教程及其相关问题。当您阅读时,您将看到您可以简单地添加对他正在构建的站点的引用,并直接在其他项目中使用 RIA Domainservice 类。 blogs.msdn.com/brada/archive/2009/07/10/… 您对业务实体和 dto 实体做了什么 - 您是否使用映射器在这两种类型的对象之间切换?

以上是关于如果我稍后应用 ado 实体框架,推荐的数据访问层设计模式是啥?的主要内容,如果未能解决你的问题,请参考以下文章

今天为 ASP.net 推荐哪个数据访问层?

ADO.NET 实体框架 - 带有实体框架 6 的 Oracle

实体框架寻找 ADO.NET 提供程序 SqlServerCe.3.5 而不是 4.0

开始构建数据访问层。要考虑的事情?

带有 ADO.NET Entity Framework 的内部类

ADO.NET 实体框架教程 [关闭]