MVC4理想的控制器编码

时间:2014-01-22 08:42:39

标签: c# asp.net-mvc asp.net-mvc-4

我收到了朋友的mvc4应用程序,我将在其中添加一些功能。但我发现他使用超过6000行代码的控制器。 我想知道开发MVC4应用程序的理想方法是什么。

意味着拥有许多控制器,每个控制器的行代码数量很少。或者拥有少量具有大量行代码的控制器。

3 个答案:

答案 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)

我认为你的朋友可能会将业务逻辑放入控制器中。您应该将业务逻辑放到其他类,文件夹或项目中。

相关问题