のためのベスト-プラクティスのマッピングDTOドメインオブジェクト?
-
21-08-2019 - |
質問
から多くの質問に関マッピング DTOs ドメインオブジェがんの服を着ている人って私の質問です。に使用しました多くの方法として、自分の意見ものを探していないかなと思ったのがきっかけに少しあります。
の状況:
して多くのドメインのオブジェクト。を用いていますCSLAの二つのモデルのうちどちらが弊社のドメインのオブジェクトに写複合体が含まれている自分のデータアクセス。い、それぞれの線としています。て、私たちは書面に新しいサービスの返戻データの形式(.純、JSONます。こ(その他の理由など)またリーデータ転送オブジェクトへのパスの周りの線としています。
私の質問はどのようにDTOおよびドメインするオブジェクトに接続されていますか。
私の最初の反応を利用 ファウラー,DTOパターン型ソリューション.私はこわく感じる権利でした。のドメインのオブジェクトを含みませんを参考にDTO.外部エンティティ("をマッパー"または"アセンブラ")をDTOからのドメインのオブジェクトです。通常はあ ORM のドメインのオブジェクトです。下振れするのは、"マッパー"は非常に複雑なための本当の状況は非常に脆弱です。
データが消えるのは、ドメインのオブジェクト"を含む"をDTOでいただけ無駄のなデータオブジェクトです。のドメインのオブジェクトのプロパティが社内基準をDTO特性とことができるのかを返しますDTO場をお楽しみいただけます。見えない問題がで間違っています。いくつかの論文人を 設定によりどちらのモ 登場合はこのメソッドを使用します。
はありまょうか?一方、上記に値す。その場合又はない場合は、いかがでしょうか?
解決
特典の有mapperるべてのドメインとDTOはappearentきにのみ支援シングルマッピングだけではなく、すべてのマッピングが増え、そのコードから単離したドメインの効くのドメインがより簡単に、筋肉質な.することはできませんclutteringドメインの追加。
個人的には、どのようにマッピングのドメイン主体の責任においていく事を目的としたマネージャー/サービスレイヤー"と呼びます。この層に座との間のrespository(ies)、ビジネスロジックなどのワークフローの調整の場合は変更しなければならなくなるかもしれも変更でサービス事業サービスB)。
また多くの終形式、いつも見をplugableフォーマッタを使えるようなお客様のパターンとは、例えば、変換自体が、私が見つからなかった場合は必要なものをこの複雑です。
他のヒント
き使用automapperなど の記述によるジミーボガード ないとのオブジェクトに依存して命名規約に付着している。
を使用していまT4テンプレートをマッピング。
Proの-人間が読める形式のテンプレートをグルーピングコンパイル時に、実行時mapper.100%のコードで使用部分の方法はテンプレートをパターンの拡張機能、アドホックベース)
Conのを除く特定のプロパティ、コレクションのドメインのオブジェ等 学習T4構文です。
もう一つの解 http://glue.codeplex.com.
特徴:
- 双方向のマッピング
- 自動マッピング
- マッピングとの関係
- 入れ子のマッピング、フラット化
- リストの配列
- 検証の関係
- 検査、マッピング
- 物件の分野と方法
ついてどのようにお考えを実施するコンストラクタ内の別のクラスがパラメータとしてドメインオブジェクト?
いっ---このようになっ
class DTO {
// attributes
public DTO (DomainObject domainObject) {
this.prop = domainObject.getProp();
}
// methods
}
もできます々、オブジェクトのオブジェクトmapper.コンセプトと類似の設定によりどちらのモンマッピング(属性またはXML).
私は提案することができツールで作成した、オープンソースで開催CodePlex: EntitiesToDTOs.
マッピングからDTOを主体としたり、逆に実施する拡張方法、これらを構成するアセンブラ側れます。
すようなコード:
Foo entity = new Foo();
FooDTO dto = entity.ToDTO();
entity = dto.ToEntity();
List<Foo> entityList = new List<Foo>();
List<FooDTO> dtoList = entityList.ToDTOs();
entityList = dtoList.ToEntities();
なぜなしではこのような態度を取るのか。
class UserDTO {
}
class AdminDTO {
}
class DomainObject {
// attributes
public DomainObject(DTO dto) {
this.dto = dto;
}
// methods
public function isActive() {
return (this.dto.getStatus() == 'ACTIVE')
}
public function isModeratorAdmin() {
return (this.dto.getAdminRole() == 'moderator')
}
}
userdto = new UserDTO();
userdto.setStatus('ACTIVE');
obj = new DomainObject(userdto)
if(obj.isActive()) {
//print active
}
admindto = new AdminDTO();
admindto.setAdminRole('moderator');
obj = new DomainObject(admindto)
if(obj.isModeratorAdmin()) {
//print some thing
}
@FrederikPrijck (または)人:ご提案ください.上記の例ではDomainObjectによってはDTO.このよう気を配っているため、コードのマッピングを行うのdto <-->domainobject.
やDomainObjectのクラスを拡張しDTO。
別のオプションを利用する ModelProjector.にも対応可能なシナリオのもとで非常に使いやすい最小のフットプリント
使用できる工場では、記念品、ビルダーパターンです。工場を非表示にする方法の詳細は作インスタンスのドメインモデルからDTO.思い出を行う直列化/直列化復元のドメインモデルからのDTOでもアクセス個人会員とする。ビルダをインストールまでのマッピングからDTOドメインと共に堪能なインタフェース。
のマッピングロジック内の企業とドメインのオブジェクトが認識し、"実装の詳細れないことを知る必要があります。一般的にはDTOは当サイトでは、ご来場者様には、外界からのリクエストまたはから読み込む外部のサービス/データベース以降、企業のビジネスロジック、あるんじゃないでしょうかを維持するために最善の方に内容以外の団体をいう。
のマッピングelseの代替がどこにすればよいのでしょう。私たの導入を図作成システム/サービスが、たとも言われていないように感じoverengineering(びょう。また、一定の成果を利用Automapperなど、小規模なプロジェクトでのリーディングプロジェクトAutomapperには独自の落とし穴.っかくの問題をマッピングでAutomapperのマッピングは暗黙的な、完全に切り離のヘルプオーサリング-ツールではないかもしれないが、"分離の懸念"があり"は、godforsakenライブマッピング"などできる場合がありますので、必くトラックです。ないと言うことでAutomapperな活用してきたのです。私は思うだけでマッピングすべきかは明らかで透明性の確保等が図られているな課題です。
でのマッピングサービスの層または多くの成功を私のマッピングの中の私のDTOs.以来、DTOs alway座の境界の彼きを知っていなければならないビジネスオブジェクトやよいのかを地図からです。件の場合でも、マッピング規模に合理的な量で削除するすべてのマッピングにおいて管理にあたってバンチのマッピングサービス内のデータ層の腐敗防止層または表層である。その代わりに、マッピングは、実装の詳細に委ねられDTOの要求に応じます。以来、serializersはserialize性分野だ発送しており、ワイヤー、なんか入を示すものでもありません。個人的には、がその場で発音を確認することがこのブランドオプションと言えるのは、私の経験なのですが、規模も大きなドラインをサポートしています。