我收到了朋友的mvc4应用程序,我将在其中添加一些功能。但我发现他使用超过6000行代码的控制器。 我想知道开发MVC4应用程序的理想方法是什么。
意味着拥有许多控制器,每个控制器的行代码数量很少。或者拥有少量具有大量行代码的控制器。
答案 0 :(得分:2)
我认为没有一个'正确'的答案,特别是没有任何具体的例子。
考虑一下可维护性。具有数千行代码的单片控制器可能比更小,更有针对性的控制器更难以理解(并因此维护)。
另外,我会仔细查看进入控制器的密码。控制器可以将模型链接到您的视图,而不是业务逻辑代码的最佳位置;我个人会将任何重要的业务逻辑放入控制器引用的某种存储库中。
答案 1 :(得分:1)
肯定没有这个问题的通用解决方案,但是你可以通过使用存储库减少控制器中的“行”数量,这也可以让你使用依赖注入模式。
依赖注入也有助于单元测试。存储库将逻辑分成单独的(可替换的)类。
搜索这些术语将提供大量信息(遗憾的是,将所有信息放在SO问题中太多了) - 但这里有一些代码可以帮助您朝着正确的方向前进:
创建一个界面来定义存储库
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
}
}
很难判断你是否应该将你的控制器分成更小的控制器,因为这实际上取决于方法的数量而不是线的数量(例如,你可以有几个方法有几百行),在这种情况下分离他们进入另一个控制器将无法达到预期的效果。您的控制器应拆分为“应用程序逻辑”容器。
答案 2 :(得分:0)
我认为你的朋友可能会将业务逻辑放入控制器中。您应该将业务逻辑放到其他类,文件夹或项目中。