我正在开始一个项目,并且正在努力应对数据访问层的架构。基本上,它需要与具有不同数据库设计的多个后端进行交互。
我想要一个通用的DAL,然后在任何后端执行一个通用功能。后端具有用于插入,更新等的唯一代码。因此,在一个后端添加一个Employee将在另一个后端具有不同的代码。
我尝试了Repository模式,但这并不适用于这种情况。我最终只得到了一个Factory模式方法,但最终我会为每个对象创建一个Factory。我可能只能创建一个工厂,但后端对象将有数百个函数,如“SaveEmployee”,“SavePlan”等。
现在我有以下内容:
DAL
--> DAL.Backend1
--> Employee.Save(employee)
--> Plan.Save(plan)
--> DAL.Backend2
--> Employee.Save(employee)
--> Plan.Save(plan)
在DAL项目中,我为每个对象,员工,计划都有一个工厂模式,以决定返回和执行哪个DAL的对象。
我很确定这不是最好的架构,所以我想知道是否有更好的模式可以解决我的问题。
答案 0 :(得分:0)
我们已在其中一个项目中实施此功能。我不确定这是最好的解决方案,但到目前为止它对我们有用。但是,我们有一个基于CodeSmith模板的自定义DAO层,它为我们生成CRUD类。实质上,我们创建了一个单例,代表所有用户的连接代理。当用户登录时,他们选择想要连接的数据库(尽管一些IP过滤会缩小他们的选项,理想情况下为1)。登录将连接令牌与关联用户一起存储,生成的DAO层的基类调用连接代理来检索相应的连接字符串。这样,无论何时调用DAO对象,都会在DAO对象尝试连接到DB之前收集连接字符串。