類似した質問がここに投稿されましたClean code - how to design this class?DTOの動作をどこに置くのですか?オブジェクトとデータ構造のクリーンコード
私はまだ答えを見つけられません、私は混乱しています!
"クリーンなコード"という本も読んでいます。データ構造/動作が混在していないデータ構造であっても動作しているオブジェクトであっても、データ構造/オブジェクトを混在させるべきではありません。
私のアプリケーションには、外部サービスからのデータを運ぶデータ転送オブジェクトがあります。これらのDTOには、データアクセッサとミューテータだけがあります。だから私はそれらをデータ構造体の型として考えていました。
しかしロバート・マーティンは...それがクリーンであるisMarried
機能の使用が唯一のクライアントクラスから属性としてclient.isMarried()
が、私は、これは論理たisMarried(client)
よりも優れていることを彼の本の中で言っています。
私のアプリケーションの多くの領域では、特定のDTOで何らかの動作が必要ですが、この動作をどこに置くのが混乱しています。 我々は
ClientUtils {
boolean isMarried(Client client) { ...}
String getCompleteName(Client client) { ...}
}
のようなビジネスロジックを持つUtilsのクラスを作ってきた、これはサービス層に行くべきでしょうか? (DAL、services ..)
なぜこれらの操作は 'client'クラスにしかありませんか?おそらく、そのクラスは単純なDTOよりも多くのモデルに進化しているでしょうか?もしそうでないとしても、そのロジックがそのDTOに合理的に属していれば、DTOに*ロジックを入れることはひどいことではありません。そのクラスがロジックが動作する唯一のクラスであり、それが必要なシステム内の唯一の場所であれば、そのクラスに属します。 – David
My classクライアントクラスも外部ライブラリにあります。編集することができないため、クライアントクラスも拡張することしかできません。 –
https://softwareengineering.stackexchange.comで尋ねられるはずです。 – VGR