如何使业务层对象创建同一数据访问层对象的许多实例

时间:2014-08-07 08:45:17

标签: c# data-access-layer business-logic-layer bll

到目前为止,Business Layer正在实例化我所需的DAL对象的一个​​实例:

public class BarcodeBLL : IBarcodeBLL
{
    private BarcodeConfig _MyConfig;
    private readonly IJDE8Dal _JDE8dal;
    private readonly IBarcodeDal _barcodeDal;

    public BarcodeBLL(BarcodeConfig MyConfig, ERPConfig erpConfig, BarcodeDALConfig barcodeDalConfig)
    {
        _MyConfig = MyConfig;
        _JDE8dal = new JDE8Dal(erpConfig);
        _barcodeDal = new BarcodeDAL(barcodeDalConfig);
    }
    ...
    ...
}

一组新的前端应用程序需要访问4个不同服务器上的数据(具有4个不同连接字符串的SAME数据访问层实现)。

一种方法是让Ui实例化4个BarcodeBLL对象,并完成我不想要的任务,因为我会将业务逻辑转移到UI。

所以我必须找到一种根据UI应用程序实例化1到4个DAL实例的正确方法。

一个想法是传递一个List<ERPConfig>和/或一个List<BarcodeDALConfig>,让一些构造函数(???)决定做什么..

我开始这样做:

public partial class BusinessLayer  
{
    private readonly Dictionary<string,IJDE8Dal> _JDE8dals;

    public BusinessLayer(Dictionary<string,JDEDalConfig> jdeConfigs)
    {
        foreach (var j in jdeConfigs)
        {
            _JDE8dals.Add(j.Key,new JDE8Dal(j.Value));
        }
    }
}

这就是我要找的......

为了清晰起见,

其他信息:

我现在看到的目标是BLL中的ONE方法能够从1到4个DAL对象获取并在每个对象中执行方法。

可能的情景:

UI从2个国家/地区的BLL方法GetItemList数据中询问。

Bll必须以某种方式unserstand创建2个DAL对象,并使用正确的连接字符串并完成其工作。

所以我正在整合BLL中所有服务器的操作,让DAL独自一人。

2 个答案:

答案 0 :(得分:0)

  1. 创建Enum,并修改构造函数以获取Enum的变量?
  2. 在init中捕获传入的枚举,并设置私有属性/变量。
  3. 然后在您的课程中,根据当前选定的enum
  4. 访问正确的DAL

    来自业务层

    Dim d as new DAL(option1)
    

    Dim d as new DAL(option2)
    

答案 1 :(得分:0)

我遵循的解决方案是:

public partial class BusinessLayer  
{
    private readonly Dictionary<string,IJDE8Dal> _JDE8dals;

    public BusinessLayer(Dictionary<string,JDEDalConfig> jdeConfigs)
    {
        foreach (var j in jdeConfigs)
        {
            _JDE8dals.Add(j.Key,new JDE8Dal(j.Value));
        }
    }
}

因此BLL层将接受可变数量条目的字典。

UI应用程序将负责发送字典,因此它自己决定将实例化多少个DAL。

此外,BLL方法将负责检查字典条目的存在并采取相应的行动。