スマートオブジェクトによって、プロパティが変更された場合に元のプロパティ値を知っているドメインオブジェクトを考慮します。通常、スマート オブジェクトには基本クラスがあり、GetPropertyValue/SetPropertyValue メソッドを使用してプロパティを実装します。一方、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 の実装)
- 派生クラスは自動的にシリアライズ可能になります (ただし、これが役立つことはめったにありません)。
- クローン/同期/IsPropertyDirty...
一方、POCO は非常に単純で、どの基本クラスにも依存しません。
今日、私はここで多くのPOCOを賞賛しています。
- ネットワーク経由で送信できます (通常は JSON として Web ブラウザーに送信されます)。
- それは純粋です
一方、上記の理由は次の理由から誤謬であると思います。
- DTO は電信送金用であり、ドメイン オブジェクトではありません。ドメイン オブジェクトが JSON にシリアル化されたときに失われたデータをカプセル化する動作。
- この純度の追求は、ロジックもスマートなものも何も付いていない、さらに貧血なドメインモデルの追求のようなものです。
この悲しいことに、私はまだそのPOCOが好きで、私を悩ませています. あなたの意見は何ですか?