ビジネスオブジェクトを実装するためのより好ましい方法はどれですか (そしてその理由)?
個別の「コンテキスト」なしで
class Product
{
public string Code { get; set; }
public void Save()
{
using (IDataService service = IoC.GetInstance<IDataService>())
{
service.Save(this);
}
}
}
使用法は次のようになります。
Product p = new Product();
p.Code = "A1";
p.Save();
別の「コンテキスト」で
class Product
{
private IContext context;
public Product(IContext context)
{
this.context = context;
}
public string Code { get; set; }
public void Save()
{
this.context.Save(this);
}
}
使用法は次のようになります。
using (IContext context = IoC.GetInstance<IContext>())
{
Product p = new Product(context);
p.Code = "A1";
p.Save();
}
これはすべてBL層で起こっています(使用例を除く)、データベースなどとは関係ありません。IDataServiceは、ビジネスオブジェクトを「どこかに」保存するためのデータ層へのインターフェースです。IContext は基本的に IDataService をラップします。実際のビジネス オブジェクトはより複雑で、より多くのプロパティと相互参照 (Order -> OrderRow <- Product など) があります。
私の意見では、最初のアプローチは (あまりにも) シンプルで、2 番目の選択肢は単一のビジネス オブジェクト インスタンスの外でより多くの制御を提供します....? このようなガイドラインはありますか?