私はなぜチームによって決定されたのかは言えませんが、私は、DTO/VMの概念があまり明確ではないことに絶対に同意します。
基本的な考えは、MVVMパターンを取得するためにしばしば新しいビューモデルが導入されるMVP/MVCパターンに似ていたと思います。したがって、ビューに影響を与えないDTOは、実際のモデル/コントローラレイヤに「プッシュ」されました。あなたがDTOがサービス間の転送オブジェクトであると言うなら、どちらがいいですか。
しかし、以前のjhipster-appでは、レイヤーやDTO、VMなどとの「トラブル」と多くの議論もありました。私たちはジフスターがDTOとMapstructを導入したのと同時にスタートしました。 Jhipsterを使用する新しいプロジェクトでは、常にすべてのDTOとVMを削除します。まず第一に、(Managed)UserVM/DTOのものですが、これは非常に混乱します。これにはいくつかの理由があります。
私たちのアプリケーションのサーバー側にはVMがありません。ビューが完全にjavascript/angularに基づいているjhipsterアプリケーションでは、ビューモデルがそこになければなりません。私たちはしばしばREST-APIを使用する他のアプリケーションを持っており、これらのアプリケーションはビューではありません。したがって、特にマイクロサービスアーキテクチャでは、REST-APIの「ビュー」や「ビューモデル」で何かを呼び出すことはありません。 したがって、Java(JSPなど)で表示されないビューでは、Javaコードでは「VM」という用語を見つけることはありません。さらに、さまざまな種類のビュー(角度ウェブアプリ、iOSアプリ、デスクトップクライアントなど)があり、それぞれに他のビュー、ビューパーツ、ウィジェットがあり、他のビューモデルが必要です。最後に、REST-APIが実際のリソース/エンティティではないものを提供しないかもしれないと言う人がいました...
したがって、jhipsterのVMは実際にはDTOであることは間違いありません。しかし、通常、DTOは、ロジックなしで2つ以上のサービス(またはシステム)間の共通の値をカプセル化するためのステートレスな転送オブジェクトであるため、「DTO」には問題があります。これは、JHipsterアプリで何らかの形で混在している、トップダウン(REST)APIドリブンとボトムアップドメインドリブンデザインの間のアーキテクチャ上の問題でもあると考えています。あなたの意見に似て、私はJHipsterがDTOをドメインオブジェクト(またはエンティティ)にするべきだと思っています。例えば。管理対象ユーザーはVMまたはDTOではないため、エンティティです。私は、ここでの問題は、JPAベースのエンティティだけがドメインオブジェクトであり、他のドメインオブジェクト(エンティティ)は存在しないと思う人がいるということです。
最後に、適合する用語が見つからないため、ADO(APIデータオブジェクトまたはアクセスデータオブジェクト)という新しいタイプを導入することにしました。 ADOは、VM、DTO、または論理なしのエンティティでさえ、jhipsterと比較されます。一般的な「APIレイヤー」はADOだけを読み書きします。このレイヤーは、REST APIコントローラー、およびプラグインで使用できるJava API用に使用されます。これにより、特定の内部エンティティまたはドメインオブジェクトを追加することなく、すべてのADOをクライアントAPIジャーで出荷することができます。 REST-APIと各プラグインは同じADO(したがって同じ記述と構造)を使用するため、開発者は混乱することはなく、外部リソース指向のレイヤーは、リソースベースのレイヤーだけでなく、ベース。
エンティティ、派生エンティティ、サブセット、またはエンティティのスーパーセットのような内部レイヤの一部であるすべてのものは、ほとんどがドメインオブジェクトです。そこで、この内部層、ビジネスロジックなどからすべてのVMとDTOを削除しました。
合計:内部アクセス(JPA)エンティティを外部アクセスからカプセル化するには、ビュー以外のものがある可能性があるため、ADOを使用します。これらのADOは、ジープスターVMとDTOの観点からのものです。しかし、一般的なAPIレイヤの背後には内部的にDTOやVM、さらにはADOも使用されません。これらのエンティティは主にドメインオブジェクトです。
VMs/DTOへのアプローチをそのような詳細で説明してくれてありがとう。私はあなたに決定を理解し、ADOsがかなり良いアプローチだと考えることができます。特に、あなたがクライアントとしてだけでなく、ビューを持っている場合。 –
JHipsterは一般的に、UIを含むアプリケーションの完全な足場を意図しているため、私はこのVMがこれに適した用語だと考えています。しかし、とにかく、私は特に、新しいDTOの部分は、ドキュメント内でより明確にする必要があると思うか、またはJHipster自体でさらに適合させる必要があります。もしDTO/VMリファクタリングに携わっていたJHipsterチームの誰かがある程度の洞察を与えることができたら嬉しいです。 –
私はADOがもっと成熟した解決策だと思うが、 //jhipster.github.io/2016/08/17/jhipster-release-3.6.0.html –