DAL、BLL、UI レイヤーなどの 3 層アプリケーションを構築しています。DAL は EF ラッパー (UnitOfWork および Generic Repository パターン) を公開します。
BLL コンポーネントは、いくつかの基本的なビジネス ロジック ルールを持つ DAL ラッパーです。基本的に、BLL は、仮想 CRUD および検証メソッドを使用して BusinessObjectBase クラス (T は POCO クラス) を公開し、次に複数の CRUD 操作を調整する BusinessTransactionBase を公開します。
BLL コンポーネントは、一種の ObjectContext ラッパーのように見ることができます: BusinessObject = エンティティごとのビジネス ロジックを持つ ObjectSet です。BusinessTransaction = ObjectContext とその他の最小限のロジック
また、私のコンポーネントの主な目標は、さまざまなプロジェクトに一連の基本的なロジックを提供することです。今日はアセンブリを使用して MusicStore に関するアプリケーションを構築できます。明日はドキュメント管理に関するアプリケーションを構築できますが、常に基本コンポーネント (BLL) を使用したいと考えています。
簡単なスニペット:
public class BusinessObjectBase<T> where T : class
{
// protected IUnitOfWork ?
public virtual void Insert(T item)
{
// my default company logic rule..
if(this.Validate(item))
{
IUnitOfWork.GetRepository<T>().AddEntity<T>();
IUnitOfWork.Save();
}
}
public virtual void Edit(T item)
{
// my default company logic rule..
}
public virtual bool Validate(T item)
{
// my default company logic rule..
return true;
}
}
public class BusinessTransactionBase
{
// protected IUnitOfWork ?
public void BeingTransaction()
{
// ... Notify at all BusinessObjectBase to skip IUniOfWork.Save call
}
public void Commit()
{
this.IUnitOfWork.Save();
}
public BusinessObjectBase<T> GetBusinessObject<T>() where T : class
{
// How can I create an instance via reflection of an inherited class
// without to know ctor parameters?
}
}
さて、私は2つの質問があります:
1) GetBusinessObject メソッドで BusinessObjectBase を適切に構築するにはどうすればよいですか? 基本クラスから継承されたオブジェクトを構築する必要がありますが、ctor パラメーターについてはまったくわかりません。
2) IUnitOfWork が BusinessTransactionBase と BusinessObjectBase クラスの間で共有されていることをどのように保証できますか? BusinessObjectBase と BusinessTransactionBase は密接に関連しているとすでに述べたので、私はそれを強制しています。