モデルビュープレゼンターおよびドメインドリブンデザインプロジェクトのプレゼンターでのファクトリーの使用
-
05-07-2019 - |
質問
ドメイン駆動設計では、ファクトリーを使用して、ドメインレイヤーでドメインオブジェクトを作成することをお勧めします(直接コンストラクターまたはIoCを使用するのではなく)。
しかし、プレゼンターレイヤーでドメインオブジェクトファクトリを使用することについてはどうでしょう。たとえば、プレゼンターから取得したユーザー入力からドメインオブジェクトを作成していたとします。
ここに例があります。たとえば、いくつかの10進数設定を持つConfigurationドメインオブジェクトがあるとします。
パブリッククラスの構成:PersistantObject {
public decimal temperature {get;set;}
...(times 20)
public decimal gravity {get;set;}
}
プレゼンターレイヤーではなくドメインレイヤーでこのオブジェクトを作成するには、これらの各10進数値を関数パラメーターとして渡す必要があります。扱いにくい関数定義と呼び出しを作成します。
ie ConfigurationService.CreateConfiguration(temperature、...(x20)、gravity);
おそらくより良い解決策は、プレゼンターレイヤーでConfigurationオブジェクトを作成し、長い関数呼び出しをスキップして、ユーザー入力から直接構成オブジェクトのすべての値を割り当てることです。
構成config = ConfigurationFactory.CreateNewConfiguration();
config.temperature = temperature;
..(x20).. = ...;
config.gravity = gravity;
ConfigurationService.SaveNewConfiguration(config);
しかし、このアプローチが間違っているのか、なぜだろうと思っています。 これらのアプローチの両方が間違っている場合、ユーザー入力から長いオブジェクトを作成するための最良のアプローチは何ですか?なぜですか?
ありがとう!
解決
ドメインオブジェクトをドメインレイヤーからプレゼンテーションレイヤーに入れないようにすることをお勧めします。プレゼンテーションレイヤーをプレゼンテーションに集中させます。
このため、ドメインレイヤーとプレゼンテーションレイヤーとの間でデータをシャッフルするデータ転送オブジェクトを構築します。あなたの場合、ダイアログにDTOを入力します。DTOはサービスに渡され、対応するドメインオブジェクトに変換されます。
ただし、DTOから毎回ドメインオブジェクトを構築する必要はありません。 検討DTOがドメインオブジェクトのサブセットのみを表す場合。このようなDTOから既存のドメインオブジェクトを再構築すると、部分的なドメインオブジェクトが得られます。適切な更新を行えるように、おそらく完全なドメインオブジェクトを保持する軽量のキャッシュを維持する必要があります。
本質的に、パラメータオブジェクトの導入を適用すると、DTOソリューションに到達しますリファクタリング。
他のヒント
これを処理する主な方法は2つあります
1)これがダイアログを介して設定される場合、コマンドパターンを実装するクラスを作成し、問題のオブジェクトとダイアログをバインドします。たとえば、CmdCreateConfigurationService、およびCmdEditConfigurationService。
CmdCreateConfigurationServiceは、正しいコンフィギュレーションサービスを選択するために必要なファクトリクラスと最小パラメーターに依存します。
IConfigurationServiceEditorインターフェイスを設定し、それをパラメーターの1つとしてCmdEditConfigurationパラメーターに渡します。 IConfigurationServiceEditorインターフェイスを使用すると、ダイアログとの間で情報を簡単にやり取りできるように、できるだけ多くのメソッドを定義できます。キーと値のコレクションを使用することをお勧めします。コマンドオブジェクトは、このコレクションから構成サービスをセットアップする方法を知っています。ダイアログは、セットアップ時にこのコレクションを予期することを知っています。
データ構造に関係なく、コマンドオブジェクトで構成サービスに入力する作業を行います。非ダイアログ/フォーム/画面オブジェクトにIConfigurationServiceEditorを実装させることで、テストを自動化でき、特定の状況では複雑なオブジェクトの構成が簡単になります。
この方法は、それぞれが4〜40個のエントリを持つ数十個のパラメトリック形状を持つCAD / CAMソフトウェアに対して開発されました。