基本的な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:具体的なデータレイヤーを人に渡します。これは、データレイヤーと対話する必要のある新しいクラス(新しいPersonBAL(IDataLayer、int)、次に新しいJobBAL(IDataLayer、int)など)を追加し始めるときに苦痛になります。
2:使用するデータレイヤーを保持する静的オブジェクトを作成します(読み取り:グローバル変数)
他のアイデアはありますか?