これは、「分析による麻痺」が定着しているように見えるシナリオの 1 つです。アドバイスをお願いします。
プロジェクト
部品の参照、どの車両に適合するかなどの詳細を含む、自動車製品のかなり単純なリスト。
フロント エンドは、asp.net MVC アプリケーションです。
バックエンドは SQL で、Subsonic を使用して製品をドメイン オブジェクトに投影します。
機能性
私たちの画面の 1 つは、製品の詳細画面です。ASP.NET MVC コントローラーは、製品リポジトリを呼び出して製品の詳細を取得し、これらの詳細を (viewModel への自動マッピングを介して) ビューに返します。
ここで重要なのは、Web サイトに 2 つまたは 3 つのチャネルがあることです。チャネルに応じて、ユーザーは異なる部品番号を確認する必要があります。
たとえば、小売チャネルの場合、部品番号はデータベースにあるとおりですが、ユーザーが貿易チャネルを通じてサイトにアクセスした場合、部品参照の先頭は別の番号に置き換えられます。
たとえば、0900876 は、Trade チャネルを介して表示された場合、1700876 になります。
私が苦労しているのは、パーツ参照 (および変更される可能性のあるその他の詳細) に関する「チャネル規則」をカプセル化する場所を決定することです。
これらの代替案を検討しました。
ロジックをドメイン オブジェクトに直接書き込む
Productクラスでは、翻訳されたパーツ参照を取得するためのメソッド/プロパティを持つことができます。
public string TranslatedPartRef()
{
if (this.Channel == "Trade")
{
return PartRef.Replace("0900", "1700");
}
else
{
return PartRef;
}
}
このシナリオでは、 Product インスタンスはチャネルについて知っている必要がありますが、これは私には間違っているようです。
ロジックを別のオブジェクトにカプセル化する
このパーツ参照の変換を処理するクラスを作成するか、このロジックを含むChannelクラスを作成することができます。
私が理解していないのは、2つのクラスを調整する方法です。
コントローラがリポジトリを呼び出して製品を取得する場合、使用されたチャネルを特定して部品参照を変換する必要がありますか? その場合、翻訳された部品参照を含む製品をビューに戻すにはどうすればよいですか?
また、この部品参照は検索結果や他のシナリオにも表示される必要があることも注目に値します。そのため、ドメイン内のどこかにきちんと含まれている必要があると思います。