私はDDDパラダイム(DDDの完全な初心者)でプロジェクトを構築する方法を理解しようとしていて、Webサービスの実装に関する問題に遭遇しました...これらは私が見るいくつかのオプションです:
ファットクライアント、ファットサーバー(オプション1):
良い:ドメインレイヤーがクライアントとサーバーの両方にあるため、検証は両方で行われます(クライアントにとっては良い-サーバーへの呼び出し回数が減ります、サーバーにとっては良いです-「ユーザーデータを信頼しない」ため)。
悪い例:検証が2回行われ、多くのマッピングが必要です(たとえば、データベースへの単純なクエリ:ドメイン(リポジトリから返されます)-> DTO(WCFに必要)->ドメイン(クライアントのドメインレイヤーに必要)-> DTO( WinFormsの場合)ドメインの変更は、サーバーとクライアントに同時に展開する必要があります。
ファットクライアント、シンサーバー(オプション2):
サーバ:
クライアント:オプション1とまったく同じ。
良い例:クライアントでは、WCFサービスをDTOオブジェクトを返す通常のリポジトリとして扱うことができます。オプションnrの方が単純です。 1。
悪い点:リポジトリがドメインオブジェクトではなくDTOで動作することは問題ありませんか?また、サーバーは検証を実行しないため、データについてクライアントを信頼する必要があります。
シンクライアント、ファットサーバー(オプション3):
サーバー:オプション1とまったく同じ。
クライアント:
良い:すべてのドメインロジックはサーバー上にあります。
悪い例:クライアントには検証が含まれていないため、サーバーに対して不必要な呼び出しを大量に行う可能性があります。
私は最初のオプションに傾いていますが、複雑すぎます...アドバイスや他のオプションはありますか?
私はオプション3を使いますが、次の注意事項があります。
あなたがまだ直面している問題は、たくさんのマッピングです。ドメインモデルへのクライアントの依存関係を削除すると、ドメインを変更する余地が生まれるため、この価格は支払う価値がある(そして AutoMapper などのツールを使用すると簡単になります)ため、マッピングを壊すことなくマッピングを微調整できますクライアントコード。