あなたのDTOが間違っていると思います。あなたは2種類のDTOを持っています。 1)それらはあなたのドメインエンティティになることができます。その後ADTO、BDTO、CDTOを返すことができます。しかし、これらのDTOのはかなり一貫性があることができます(理由B2DTOがBDTOから任意の異なるだろう)
あなたはJSONはここ
{
Id: 1
name: "foobar",
$type: "A",
B: [ {
name: "b-bar",
$type: "B"}]
CIds: [ 2,23, 42]
}
を見てどうなるかを見れば、あなたがオブジェクトの2種類、いくつかの(Bさん)を参照してくださいサブオブジェクトとしてDTOに完全に返されます。他のもの(Cのようなもの)はIDで回され、別々に照会することができます。 Cのクエリーを実装しているのがS2なら、あなたは気にしません。
2)CQRSのようなアーキテクチャになると、別のDTOを取得します。 (射影またはコマンド)がありますが、DTOの命名にもこれが表示されます。例えば、 AListOnOverviewPageDTO、AUserEditDetailDTOなど
これは非常に異なる用途を表す投影であるため、異なるDTOを持つことは非常に意味があります。 (DDDでよく見られるような完全なオブジェクトではありません)
更新異なるDTOが必要な理由は2つあります。まず、各コールを個別に最適化することができます。たぶん、リストが速くなければならないので(CQRSを使用して)、正しいインデックスをデータに入れてlistDTOをより速く返すことができます。これにより、あなたはユースケースについてより簡単に理由を付けることができます。各DTOは1 usecase/screenを表します(そうでないと、userlistDTOで大文字小文字の区別が得られます。この場合、これらの3つのフィールドのみを設定する必要があります)。 さらにAPIが正直であることを確認する必要があります。決して空のデータを持つ「年齢」フィールドを返すことはありませんが、他の呼び出しは同じユーザーを返しますが、別の呼び出しでは同じ年齢のユーザーを返します。バックエンドが壊れて見えるようにします。しかし、/ users/listへの呼び出しと/ users/1/detailへの別の呼び出しがあった場合、詳細呼び出しによって特定のユーザーに関する詳細フィールドが返された場合は当然です
サービス境界が明確に定義されていないようです。あなたのSは、Aを保持し、追加なしでADTOを返すか、すべてのA、B、C、Dの知識と状態を持ち、これらのオブジェクトが読み込みモデルとして形成できるDTOを返す必要があります。 –
問題は、ADTOはBDTO、CDTOなどで満たされていますが、サービスSはADTOのみを返します。どのように処理するのですか? DTOは別のDTOを保持できますか? –