【问题标题】:Data Access Layer with Multiple Backends and Different Database Designs具有多个后端和不同数据库设计的数据访问层
【发布时间】:2013-01-08 14:33:21
【问题描述】:

我正在启动一个项目,并且正在为我们的数据访问层的架构而苦苦挣扎。基本上,它需要与具有不同数据库设计的多个后端交互。

我想要一个通用 DAL,然后在任何后端执行一个通用功能。后端具有用于插入、更新等的唯一代码。因此,在一个后端添加员工将在另一个后端具有不同的代码。

我尝试了存储库模式,但这不适用于这种情况。我最终只得到了一个工厂模式方法,但我最终将为每个对象创建一个工厂。我可能只能创建 1 个工厂,但后端对象将有数百个函数,如“SaveEmployee”、“SavePlan”等。

现在我有以下内容:

DAL
    --> DAL.Backend1
        --> Employee.Save(employee)
        --> Plan.Save(plan)
    --> DAL.Backend2
        --> Employee.Save(employee)
        --> Plan.Save(plan)

在 DAL 项目中,我为每个对象、员工、计划设置了一个工厂模式,以决定返回和执行哪个 DAL 的对象。

我很确定这不是最好的架构,所以我想知道是否有更好的模式可以用来解决我的问题。

【问题讨论】:

  • 不太完全动态和动态地构建 CRUD 语句,您将不得不在某个地方拥有具体的功能。如果您不希望它在数据库中,那么我认为您走的路线是最好的路线。
  • 我通常倾向于复合模式。
  • 定义“不同的数据库设计”。你的意思是 - 一个是 SQL,一个是 XML,一个是 NoSql?还是我们谈论不同的关系数据库?
  • 它们都是 MS SQL 数据库,但表名、存储过程等不同。但这些数据库本质上是做同样的工作(业务方面)。
  • 我处于类似情况,我们可能需要与一个或多个 DAL 交谈,具体取决于客户(我们有一些需要在两个单独的数据库中同时注册内容系统)。问题是如何管理这些调用并处理任何错误。另一个问题是保持数据耦合在一起。

标签: c# data-access-layer backend


【解决方案1】:

我们已经在我们的一个项目中实现了这个功能。我不确定这是不是最好的解决方案,但到目前为止它对我们有用。但是,我们有一个基于 CodeSmith 模板的自定义 DAO 层,它为我们生成 CRUD 类。本质上,我们创建了一个代表所有用户的连接代理的单例。当用户登录时,他们选择想要连接的数据库(尽管一些 IP 过滤会缩小他们的选择范围,理想情况下为 1)。登录存储与关联用户的连接令牌,并且生成的 DAO 层的基类调用连接代理以检索适当的连接字符串。这样,只要调用 DAO 对象,就会在 DAO 对象尝试连接到数据库之前收集连接字符串。

【讨论】:

    猜你喜欢
    • 2016-10-24
    • 1970-01-01
    • 2015-07-12
    • 2014-11-12
    • 2014-07-18
    • 2010-12-03
    • 2012-06-06
    • 2020-03-12
    • 1970-01-01
    相关资源
    最近更新 更多