ビジネスオブジェクトを実装するためのより好ましい方法(およびその理由)はどちらですか?別の "文脈" がなければコンテキストを持つビジネスオブジェクトかどうか
class Product
{
public string Code { get; set; }
public void Save()
{
using (IDataService service = IoC.GetInstance<IDataService>())
{
service.Save(this);
}
}
}
と使用方法は、次のようになります。別の "コンテキスト"
class Product
{
private IContext context;
public Product(IContext context)
{
this.context = context;
}
public string Code { get; set; }
public void Save()
{
this.context.Save(this);
}
}
で
Product p = new Product();
p.Code = "A1";
p.Save();
と使用方法は、次のようになります。
using (IContext context = IoC.GetInstance<IContext>())
{
Product p = new Product(context);
p.Code = "A1";
p.Save();
}
これはすべてBLレイヤー(使用例を除く)で起こります。データベースなどとは何も関係ありません。IDataServiceは、ビジネス・オブジェクトをどこかに保存するためのデータ・レイヤーへのインターフェースです。 IContextは基本的に何とかIDataServiceをラップします。実際のビジネスオブジェクトは、より多くのプロパティと相互参照(Order - > OrderRow < - Productのように)により複雑です。
私の意見では、最初のアプローチは(あまり)単純で、2番目の選択肢は単一のビジネスオブジェクトのインスタンスの外側でより多くの制御を提供しています....?このようなことのためのガイドラインはありますか?
関連するビジネスオブジェクトでLazyローディングを使用したい場合(Like ProductにはPartsのリストがあります)、これは私が推測するオプションではありませんか?いいえ、コンテキストフィールドに依存して実装された遅延ロードがありません.... – Harza
オブジェクトをさまざまな方法で永続化する計画があるため、これもフラグを立てました。これは非常に良い選択ですが、この遅延ロード。 – Harza
遅延ロードの一般的なアプローチを知らない場合、実際にはユースケースに依存します。 –