【问题标题】:Design pattern to handle multiple databases via data access layer?通过数据访问层处理多个数据库的设计模式?
【发布时间】:2014-07-18 16:12:06
【问题描述】:

我一直在研究“四合一设计模式”的设计模式。

我需要设计数据层来处理多个数据库以及如果需要扩展功能。数据库可以是 SQL、XML 或一些外部系统数据库。

应该遵循什么好的设计模式?

编辑: 根据建议,我尝试在数据层实现 DAO 和工厂模式。在某种程度上,我可以直截了当。 但根据 GOF 设计模式,数据提供者名称决定了我可以调用哪个数据库对象。 如下所示。当我试图使图层动态化以便可以处理多个数据库时。如果我遵循以下模式,那么我只能在一个应用程序中访问一个数据库。

如果有人研究过四人组设计模式,请指导我。

public class DaoFactories
{
    public static IDaoFactory GetFactory(string dataProvider)
    {
        // Return the requested DaoFactory
        switch (dataProvider)
        {
            case "ADO.NET.Access": return new AdoNet.Access.AccessDaoFactory();
            case "ADO.NET.Oracle": return new AdoNet.Oracle.OracleDaoFactory();

            case "ADO.NET.SqlExpress":
            case "ADO.NET.SqlServer": return new AdoNet.SqlServer.SqlServerDaoFactory();

            case "LinqToSql.SqlExpress": 
            case "LinqToSql.SqlServer": return new LinqToSql.Implementation.LinqDaoFactory();

            case "EntityFramework.SqlExpress": 
            case "EntityFramework.SqlServer": return new EntityFramework.Implementation.EntityDaoFactory();

            // Default: SqlExpress
            default: return new AdoNet.SqlServer.SqlServerDaoFactory(); 
        }
    }
}

【问题讨论】:

  • 听起来像门面。
  • 在应用了一些模式后,我试图让我的问题更简短。如果有人可以指导我,那就太好了。谢谢。

标签: design-patterns data-access-layer c#-5.0


【解决方案1】:

您应该查看Repository PatternData Access Object Pattern

存储库模式:在许多应用程序中,业务逻辑从数据库、SharePoint 列表或 Web 服务等数据存储中访问数据。直接访问数据可能会导致以下结果: 重复代码 编程错误的可能性更高 业务数据的弱类型化 难以集中缓存等数据相关策略 无法独立于外部依赖项轻松测试业务逻辑

数据访问对象:在计算机软件中,数据访问对象 (DAO) 是为某种类型的数据库或其他持久性机制提供抽象接口的对象。通过将应用程序调用映射到持久层,DAO 提供了一些特定的数据操作,而不暴露数据库的细节。

【讨论】:

  • 是的,这两种模式与单例结合并在四种设计模式的 Gang 中实现,但我面临一个问题。实际上基于数据提供者 GOF 决定 DataAccessOject Group 在我的情况下数据访问对象被决定不喜欢。 ICustomerDao 来自 excel,而 IOrderDao 是基于 Sql 的。所以我很困惑如何处理。
  • 实际上在模式示例中他们已经划分了数据提供者组并且代码是重复的。
【解决方案2】:

存储库是要走的路。当我不得不使用 Oracle 和 SQL 数据库时,我曾多次使用它。这可能对你有用:http://www.primaryobjects.com/CMS/Article108.aspx

【讨论】:

    猜你喜欢
    • 2016-10-24
    • 2010-11-06
    • 2015-02-27
    • 2017-04-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多