【问题标题】:MVC4 Ideal controller codingMVC4 理想控制器编码
【发布时间】:2014-02-12 05:17:49
【问题描述】:

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

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

【问题讨论】:

  • 6000 行是臭代码。您需要将其分解为每个区域都是控制器的逻辑组件。想想 CRM 系统或类似的东西——你可能有以下控制器,管理员、用户、客户、通信等——从逻辑上分解它
  • 任何代码,不一定是控制器代码,有 6000 行代码都是可疑的,并且会违反 SOLID 原则的 S 部分。谷歌“瘦控制器”,这将是一个好的开始。

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


【解决方案1】:

我不认为有一个“正确”的答案,尤其是没有任何具体的例子。

想想未来的可维护性。具有数千行代码的单片控制器可能比更小、更有针对性的控制器更难理解(因此也更难维护)。

另外,我会仔细查看进入您的控制器的种类代码。控制器用于将您的模型链接到您的视图,而不是业务逻辑代码的最佳位置;我个人会将任何重要的业务逻辑放入控制器引用的某种存储库中。

【讨论】:

    【解决方案2】:

    这个问题肯定没有通用的解决方案,但是您可以通过使用存储库来减少控制器中“行”的数量,这也将使您能够利用依赖注入模式。

    依赖注入也有助于单元测试。存储库将逻辑分离到一个单独的(可替换的)类中。

    搜索这些术语将提供大量信息(不幸的是,太多信息无法将所有信息都放在一个 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
        }
    }
    

    很难判断您是否应该将控制器拆分为更小的控制器,因为这实际上取决于方法的数量而不是行数(例如,您可能有几个方法有数百行),在这种情况下分开他们进入另一个控制器不会达到预期的结果。您的控制器应该被拆分为“应用程序逻辑”容器。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2013-01-05
        • 1970-01-01
        • 1970-01-01
        • 2013-09-22
        • 2014-01-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-31
        相关资源
        最近更新 更多