スマートオブジェクトプロパティが変更された場合、元のプロパティ値を認識するすべてのドメインオブジェクトを検討します。 スマートオブジェクトは通常、基本クラスを持ち、GetPropertyValue/SetPropertyValueメソッドを使用してプロパティを実装します。一方、POCOオブジェクトは通常、基本クラスを持たず、単純なプロパティを実装します。ドメインオブジェクト - "スマートオブジェクト" vs POCO
public class SmartObject : BaseDomainObject
{
public int id
{
get { return (int)this.GetPropertyValue("Id"); }
set { this.SetPropertyValue("Id", value); }
}
}
public class POCO
{
public int id { get; set; }
}
私はスマートオブジェクトが好きです。私にとっては大変な作業です。私は簡単にBaseDomainObjectにこれらすべての便利な機能を追加し、すべての私の派生ドメインクラスでそれらを持つことができます(ID、ステータス...など)
- 共通のプロパティ
- (変更なしに変更、新しい、)オブジェクトの状態の追跡します
- すべてのプロパティは、私が役立つことができ、すべてのこの他の振る舞い持つことができます(私はめったにこれは便利ませんが)
- 派生クラスが自動的に
- 、シリアライズすることが可能プロパティの変更(INotifyProperyChangedの実装)にイベントを発生させる - /クローンをSync/IsPropertyDirty ...
一方、POCOは非常に単純であり、どの基本クラスにも依存しません。
今日では、ここで私ので、賞賛POCOの多く:それは
- それは他に純粋
です私は上記の理由が間違いであると考えています:
- DTOは電信送金のためのものであり、ドメインオブジェクトではありません。ドメインオブジェクトがJSONにシリアライズされたときに失われたデータをカプセル化する動作。
- ロジックを持たないさらに貧血のドメインモデルやそれにスマートなものは何も付いていません。
このすべてが悲しいことに、私はまだそのポコが好きで、それは私にバグです。あなたの意見は何ですか?
リッチドメインモデルの場合は、汚染させないでください技術的インフラの懸念があります。あなたが言及したすべてのもの - 状態追跡、プロパティ変更イベント、シリアライゼーション - これらのどれもドメインとは関係ありません。彼らはビジネスドメインの複雑さをモデルにエンコードすることは何もしません。 – MattDavey
一方、POCOはドメインの複雑さをモデルにエンコードすることも何もしません。だから、DDDの基準では、両方のアプローチが非常に悪いです。 – MattDavey
@MattDaveyあなたの最初のコメントに同意しますが、後者についてはわかりません。 POCO!=あなたが暗示しているのであれば貧血です。プレーン・オールド・オブジェクト・オリエンテッド*は、データに加えて、動作、および該当する場合はドメインの動作を含みます。 – guillaume31