我有一个关于在 stackoverflow 中已经多次争论的问题的问题(对此我深表歉意),但由于从一个案例到另一个案例的主题的主观性,从未给出一般性答案:我们可以将业务逻辑添加到根据存储库模式的存储库层?我有一个带有 ViewModels 的 MVC 3 应用程序(这意味着我根本不使用 ViewData)。该模型当然是连接到数据库的 LinqtoSQL EF。目前,我直接从包含所有业务逻辑的控制器访问实体,并将视图所需的数据包装在特定的 ViewModel 中。现在我开始重构,我意识到避免代码重复的最好方法,除了优化 ViewModel 之外,是将所有查询委托给与 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";
}
}