スタックオーバーフローですでに何度も論争されている問題について質問がありますが(これについてはお詫びします)、あるケースから別のケースへのトピックの主観性のため、一般的な回答はこれまでにありませんでした:ビジネスロジックを追加できますかリポジトリパターンに従ったリポジトリレイヤー?私はViewModelsを備えたMVC3アプリケーションを持っています(つまり、ViewDataをまったく使用していません)。モデルはもちろんデータベースに接続されたLinqtoSQLEFです。現在、すべてのビジネスロジックを含むコントローラーからエンティティに直接アクセスしており、ビューに必要なデータを特定のViewModelにラップしています。今私はリファクタリングを始めており、ViewModelsを最適化する以外に、コードの重複を回避する最善の方法は、EFと通信するリポジトリにすべてのクエリを委任することであることに気付きました。コントローラが使用するように調整されたメソッドを作成します。ここで、リポジトリが式ではなく実際のオブジェクトを返すようにしたいことを考慮して、コードを明確にするために、ビジネスロジックの小さな部分をリポジトリに委任することを考えていました。ただし、緩い結合のために、ご意見をお聞かせください。以下に示すコード(現在コントローラーに存在します)では、以下を除くすべての変数 lprojectionPercactualValueはデータベースから取得されます。したがって、このコードをリポジトリに移動して、署名付きのメソッドを呼び出したいと思いました。
public string getColor (int ItemId, float lprojectionPercactualValue);
そのアイテムに固有の値を取得するには、メソッドにItemIdが必要です。この設計上の決定についてどう思いますか?コードをコントローラーに残すか、コントローラー内の別のメソッドに移動するか(メソッドを作成するか、専用のクラスを作成する)、説明に従ってリポジトリに移動する方がよいでしょうか。
if (litem.Ascending == true)
{
if (lprojectionPercactualValue < lminThreshold)
{
lcolor = "RED";
}
else if (lprojectionPercactualValue > lminThreshold && lprojectionPercactualValue < lmedThreshold)
{
lcolor = "YELLOW";
}
else //(percValue >= item.Max_Threshold)
{
lcolor = "GREEN";
}
}
else
{
if (lprojectionPercactualValue > lminThreshold)
{
lcolor = "RED";
}
else if (lprojectionPercactualValue < lminThreshold && lprojectionPercactualValue > lmedThreshold)
{
lcolor = "YELLOW";
}
else //(percValue <= item.Max_Threshold)
{
lcolor = "GREEN";
}
}