我正在使用基本的 3 层设计。出于灵活性(和测试)的目的,我希望数据层是抽象的,并在我的代码中指定具体的类。但是,我应该如何将它传递给我的业务对象。这是一个示例(伪代码):
abstract class IDataLayer
{
PersonData GetPerson(int); //PersonData would be a row of data from a table for example
JobData[] GetJobs(int);
void UpdatePerson(PersonData);
}
class ConcreteDataLayerSQL : IDataLayer
{
...
}
class ConcreteDataLayerXML : IDataLayer
{
...
}
class PersonBAL
{
void PersonBAL(personId)
{
//What goes here?
}
JobBAL[] GetJobs()
{
//What goes here?
}
}
class Program
{
static void Main()
{
person = new PersonBAL(1);
}
}
那么问题来了,PersonBAL 怎么知道要使用哪个 ConcreteDataLayer 呢?我在几个选项之间考虑:
1:将具体的数据层传递给person。当您开始添加需要与数据层交互的新类时,这会变得很痛苦(比如 new PersonBAL(IDataLayer, int),然后是 new JobBAL(IDataLayer, int) 等)
2:创建一个包含要使用的数据层的静态对象(读取:全局变量)
还有其他想法吗?