ドメインのモデルを設計するとき、ほとんどの場合、モデルにはいくつかの.IsSomething
機能があります。 IsNew
そしてIsDirty
、データの永続化の目的、IsValid
ビジネスルールの検証、IsFraudulent
現在のプロジェクト(より多くのビジネスルールの検証)などで一般的です。これらが他の人によって実装されているのを見ると、ほとんどの場合、メソッドとして実行されます。しかし、それには特別な理由があるのだろうかと思います。
私は、プロパティをオブジェクトを記述していると見なし、メソッドをある種のアクションを実行していると見なす傾向があります。これらは実際にはアクションを実行しません。呼び出されたときに動的に決定され、明らかに読み取り専用であるため、コードが含まれますが、私にとっては、メソッドではなくプロパティとして適合します。
プロパティにシリアル化の問題がある可能性があると思います。リッチドメインモデルは、ロジックと機能が含まれているため、とにかくシリアル化されない傾向があります。そのため、サービスの境界を越えて何かを移動する必要があるときは、通常、最初に定義済みのDTO構造にフラット化します。
しかし、他の誰かがこの主題について何か洞察を持っているのだろうか?これらをプロパティとしてではなくメソッドとして実装する正当な理由はありますか?
(正直に関連しますが、すでに答えが出ていますが、拡張プロパティはこのようなものの一貫性に本当に役立ちます。ドメイン固有のロジックを実装するためIsSomething()
に、通常はにいくつかの拡張メソッドがあります。ただし、プロパティがSystem.String
行く、私は拡張機能との一貫性のためだけにメソッドに固執したいかもしれません。)