到目前为止,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独自一人。
答案 0 :(得分:0)
Enum
,并修改构造函数以获取Enum
的变量?enum
来自业务层
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方法将负责检查字典条目的存在并采取相应的行动。