C# MVC4理想控制器编码
我从朋友那里收到了一个mvc4应用程序,我将在其中添加一些函数。但我发现他使用的控制器有6000多行代码。 我想知道开发MVC4应用程序的理想方法是什么C# MVC4理想控制器编码,c#,asp.net-mvc,asp.net-mvc-4,C#,Asp.net Mvc,Asp.net Mvc 4,我从朋友那里收到了一个mvc4应用程序,我将在其中添加一些函数。但我发现他使用的控制器有6000多行代码。 我想知道开发MVC4应用程序的理想方法是什么 意味着拥有多个控制器,每个控制器中的行代码数量很少。或者使用少量控制器和大量行代码 我认为没有“正确”的答案,尤其是没有任何具体的例子 考虑一下未来的可维护性。具有数千行代码的单片控制器可能比更小、目标更明确的控制器更难理解(因此也更难维护) 另外,我会仔细查看进入控制器的代码类型。控制器用于将您的模型链接到您的视图,而不是业务逻辑代码的最佳位
意味着拥有多个控制器,每个控制器中的行代码数量很少。或者使用少量控制器和大量行代码 我认为没有“正确”的答案,尤其是没有任何具体的例子 考虑一下未来的可维护性。具有数千行代码的单片控制器可能比更小、目标更明确的控制器更难理解(因此也更难维护)
另外,我会仔细查看进入控制器的代码类型。控制器用于将您的模型链接到您的视图,而不是业务逻辑代码的最佳位置;我个人会将任何重要的业务逻辑放入控制器引用的某种存储库中。我认为您的朋友可能会将业务逻辑放入控制器中。您应该将业务逻辑放到其他类、文件夹或项目中。这个问题肯定没有通用的解决方案,但是您可以通过使用存储库来减少控制器中的“行”数,这也将使您能够使用依赖项注入模式 依赖注入也将有助于单元测试。存储库将逻辑划分为一个单独的(可替换的)类 搜索这些术语将提供大量信息(不幸的是,太多了,无法将所有信息放在一个所谓的问题中)——但下面是一些代码,可以帮助您朝着正确的方向前进: 创建一个接口来定义存储库
public interface IGenericControllerRepository
{
MyModel[] ComplexMethod();
}
控制器类:
public class GenericController : Controller
{
private IGenericControllerRepository repository;
public GenericController() : this(new GenericRepository()) { }
public GenericController(IGenericControllerRepository genericRepository)
{
this.repository = genericRepository;
}
// GET: /controller
public ActionResult Index()
{
MyModel[] m = repository.ComplexMethod();
return View("Index", m);
}
}
存储库类
public class GenericRepository : IGenericControllerRepository
{
public MyModel[] ComplexMethod()
{
// do work here
}
}
很难判断是否应该将控制器拆分为较小的控制器,因为这实际上取决于方法的数量,而不是行的数量(例如,您可能有几个方法有数百行),在这种情况下,将它们拆分为另一个控制器将无法获得期望的结果。您的控制器应该分为“应用程序逻辑”容器。6000行代码很难闻。您需要将其分解为逻辑组件,每个区域都是控制器。设想一个CRM系统或类似的系统——你可能有以下控制器、管理员、用户、客户、通信等——将其逻辑分解任何代码,不一定是控制器代码,有6000行代码是可疑的,并且会违反坚实原则的S部分。谷歌“瘦控制器”,这将是一个良好的开端。