2

ドメインのモデルを設計するとき、ほとんどの場合、モデルにはいくつかの.IsSomething機能があります。 IsNewそしてIsDirty、データの永続化の目的、IsValidビジネスルールの検証、IsFraudulent現在のプロジェクト(より多くのビジネスルールの検証)などで一般的です。これらが他の人によって実装されているのを見ると、ほとんどの場合、メソッドとして実行されます。しかし、それには特別な理由があるのだろうかと思います。

私は、プロパティをオブジェクトを記述していると見なし、メソッドをある種のアクションを実行していると見なす傾向があります。これらは実際にはアクションを実行しません。呼び出されたときに動的に決定され、明らかに読み取り専用であるため、コードが含まれますが、私にとっては、メソッドではなくプロパティとして適合します。

プロパティにシリアル化の問題がある可能性があると思います。リッチドメインモデルは、ロジックと機能が含まれているため、とにかくシリアル化されない傾向があります。そのため、サービスの境界を越えて何かを移動する必要があるときは、通常、最初に定義済みのDTO構造にフラット化します。

しかし、他の誰かがこの主題について何か洞察を持っているのだろうか?これらをプロパティとしてではなくメソッドとして実装する正当な理由はありますか?

(正直に関連しますが、すでに答えが出ていますが、拡張プロパティはこのようなものの一貫性に本当に役立ちます。ドメイン固有のロジックを実装するためIsSomething()に、通常はにいくつかの拡張メソッドがあります。ただし、プロパティがSystem.String行く、私は拡張機能との一貫性のためだけにメソッドに固執したいかもしれません。)

4

2 に答える 2

6

プロパティにアクセスすると仮定すると:

  • 副作用はありません
  • 「適度にスピーディー」です(ええ、とても羊毛です...)

それなら私はそれを財産にしない理由は見当たらない。シリアル化は問題ではありません-ほとんどのシリアル化スキームは、プロパティを一時的(つまり、シリアル化されない)としてマークする方法を提供します。

于 2010-12-13T14:07:06.893 に答える
4

次の理由でプロパティを使用します。

  1. それは何らかの方法でオブジェクトを記述しているので、概念的にはその特性、そのプロパティ

  2. パラメータを要求しません

  3. 基本的には特定のデータを取得するだけで、スタンドアロンのアクションや変更は実行しません

于 2010-12-13T14:07:41.993 に答える