MVCモデルオブジェクト、ドメインオブジェクト、DTOの違いは何ですか?
私の理解は:
MVCモデルオブジェクト:
対応するビューで表示されるデータをモデル化します。ドメインオブジェクトに直接マッピングしない場合があります。つまり、1つ以上のドメインオブジェクトからのデータを含める場合があります。
ドメインオブジェクト:
Reservation、Customer、Orderなどの問題ドメイン内の実世界のオブジェクトをモデル化するオブジェクト。データを永続化するために使用されます。
DTO(データ転送オブジェクト):
レイヤーが別のプロセスにあるときに、レイヤー間でデータを転送するために使用されるオブジェクト。 DBからクライアントアプリへ。複数のドメインオブジェクトに対応するデータをフェッチするときに、複数の呼び出しではなく、回線を介した単一のトランザクションを許可します。 DTOにはデータとアクセサメソッドのみが含まれ、ロジックは存在しません。データは特定のDBトランザクション用であるため、1つ以上のドメインオブジェクトからのデータが含まれている可能性があるため、ドメインオブジェクトに直接マップされる場合とされない場合があります。
だから、質問:
上記の理解は正しいですか?重要なポイントがありませんか?
モデルオブジェクトが追加のビジネスロジックを必要としないと仮定して、MVCモデルとしてドメインオブジェクトを使用しない理由はありますか?
Modelオブジェクトが追加のビジネスロジックを必要としないと仮定して、MVCモデルとしてDTOを使用しない理由はありますか?
ドメインオブジェクトとモデルオブジェクトは基本的に同じであり、ビジネスロジックが含まれる場合があります。実装に応じて、ビジネスロジックをモデルからサービスクラスに削除した場合、ドメインとDTOオブジェクトは同等になる場合があります。
多くの場合、DTOの重要なバリアントはビューモデルです。これは、ドメインモデルとビューの間でデータを転送するためだけに使用されますが、ビューモデルにはロジックが含まれている場合があります。
ドメインとDTOを「モデル」オブジェクトにすることもできます-「顧客」ドメインオブジェクトの詳細を表示するビューを作成できます。
ドメインオブジェクトは、ドメインエンティティのプロパティを強制するビジネスロジックを持つことができます。検証はそのようなケースの1つです。ドメインオブジェクト自体には永続性に関連するメソッドは含まれていませんが、永続性をサポートするメタデータ(注釈など)を持つことができます
pOJOプログラミングモデルでは、ドメイン、DTO、およびモデルオブジェクトと同じオブジェクトを使用できます。基本的に、1つのレイヤーにのみ適用され、他のレイヤーには適用されない無関係なインターフェイスは実装されません。
A DTO = is an object that carries data between processes.
しかし、最も興味深い部分は、独自のデータの保存と取得を除いて、動作がないことです!!!
MVC方法論に固執する...
Domain = subject of your entire application.
Model = contains the (programming languages objects : EX: C# objects) to make up the universe of your application.
明らかに動作とプロパティを持つことができます(DTOとの違いを参照)。
多くの場合、アプリケーション(軽量アプリケーション)には1つのモデル(モデルがまさにドメインである場合)を含めることができます。別のモデルは、まったく異なるオブジェクトタイプであり、別のモデルを処理しています。両方とも、この場合はドメインの一部であり、「ドメインモデル-オブジェクト」という名前が付けられています。
うまくいけば、この答えは網羅的であり、あなたにとってすべてが明確になるでしょう!
ほとんどのオブジェクトの定義は、オブジェクトの使用場所に基づいてさまざまです。
Model
:は、クライアントまたはサーバーでオブジェクトを使用するための一般定義です。
- _
Model View
_:は、ほとんどの場合client
で使用されるオブジェクトです。- _
Domain Object
_:はserver
および_transfering data to the database
_で使用されるオブジェクトです。Data Transfer Object(DTO)
:あるオブジェクトから別のオブジェクトにデータを転送する、特に_API Call
_でデータを取得する場合(例:apiでGETメソッドデータを取得するための呼び出しは、データベースモデルをクライアントに提供しないでください。この目的のために、dto
)を使用します。注意:_
the definitions are true most of the time
_ですが、状況によっては実用的ではありません。
1)いいえ、ViewModelの定義です。 MVCモデルオブジェクトとドメインオブジェクトは両方とも同じです。
2)ドメインモデル(オブジェクト)は常に存在し、ビジネスロジックはオプションです
3)ドメインオブジェクトにビジネスロジックがない場合、自動的にDTOになります。
私の主張(大短編)は次のとおりです。
(MVC)モデルオブジェクト:
PersonEditModel
、PersonViewModel
、または単にPersonModel
ドメインオブジェクト:
DTO(データ転送オブジェクト):