【发布时间】:2009-08-27 00:47:51
【问题描述】:
我使用的是基本的 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:创建一个静态对象来保存要使用的数据层(读取:全局变量)
还有其他想法吗?
【问题讨论】:
标签: design-patterns oop dependency-injection n-tier-architecture