DLayer
メソッドでのみ使用される場合はGetBLObject
、メソッド呼び出しにファクトリを挿入します。次のようなもの:(@PaulPhillipsの例に基づいて構築)
public GetBLObject(string params, IDataLayerFactory dataLayerFactory)
{
using(DLayer dl = dataLayerFactory.Create()) // replace the "new"
{
//BL logic here....
}
}
ただし、ビジネスレイヤーで本当に操作したいのはDataSet
. 別の方法は、メソッド呼び出しで の代わりに を使用することGetBLObject
です。その作業を行うために、から を取得するだけを処理するクラスを作成できます。例えば:DataSet
string param
DataSet
DLayer
public class CallingBusinesslayerCode
{
public void CallingBusinessLayer()
{
// It doesn't show from your code what is returned
// so here I assume that it is void.
new BLLayer().GetBLObject(new BreakingDLayerDependency().GetData("param"));
}
}
public class BreakingDLayerDependency
{
public DataSet GetData(string param)
{
using (DLayer dl = new DLayer()) //you can of course still do ctor injection here in stead of the new DLayer()
{
return dl.GetData(param);
}
}
}
public class BLLayer
{
public void GetBLObject(DataSet ds)
{
// Business Logic using ds here.
}
}
1 つの警告: モックアウトDataSet
(これと Paul Phillips のソリューションの両方で行う必要があります) は非常に面倒な場合があるため、これをテストすることは可能ですが、必ずしも楽しいとは限りません。