1つの大きなシステム内に複数のサブシステムがあります。したがって、すべてのサブシステムには独自のBALおよびDAL実装があります。今度はBALが重要なロジックを持っていますが、DALは基本的に同様のコードを持っていましたので、私はこれをすべてのサブシステムで使用される汎用のDALクラスにリファクタリングしました。このような何か:共通コードを持つ複数のクラスの実装をリファクタリングする(DIの場合)
のは、AとBとのサブシステム名を想定してみましょう
public class DalA
{
private IGenericDal genericDal;
public DalA(IGenericDal injectedGenericDal)
{
this.genericDal = injectedGenericDal;
}
public bool DoSomeDBWorkForA()
{
return genericDal.CommonDalMethod();
}
}
public class DalB
{
private IGenericDal genericDal;
public DalB(IGenericDal injectedGenericDal)
{
this.genericDal = injectedGenericDal;
}
public bool DoSomeDBWorkForB()
{
return genericDal.CommonDalMethod();
}
}
今の一般的なDALを注入するDI部分は、ビューのユニットテストの点から重要であり、そのBAL(複数可)を注入しなければなりませんジェネリックDALオブジェクト。したがって、BALは、リファクタリングとDIの要件のために、一般的なDALオブジェクトを不必要に認識しています。これは理想的には(特にリファクタリングの場合)は理想的ではありません。
また、私の友人の一人は、サブシステムAとBのDALが何もしていないと指摘しているので、おそらくそれらを取り除き、一般的なDAL自体を呼び出すべきですが、私の意見では、 AはBやCが購読していないいくつかのログや他の特別なアクションをしたいかもしれません。
あなたはどう思いますか? DIの問題(AのBALはAのDALのみを認識し、一般的なDALオブジェクトは認識しません)と柔軟性(すべてのサブシステムに異なるDALを持つ)が損なわれない、より良いリファクタリングされた実装を持っていますか?
私が考えた方法の1つは、AALとBのDALに2つのコンストラクタを持つことでした.BALから汎用DALを注入せずに呼び出すことができ、Unit Testから汎用DALオブジェクトを注入できます。
IMHO、これは、1つのシステム(ソリューション)これらのシステムのすべての部分を持っている内部の複数のサブシステムを持つことが間違っているのです。サブシステムをモジュールに変更するか、マイクロサービスを使用する方が良い考えです)。 –
@ shA.tこれは良い提案ですが、この場合、マイクロサービス実装のためにレイテンシを増やす余裕がありません;その場合は何をお勧めしますか? –