保持asp.net mvc控制器的大小

时间:2011-03-04 11:53:41

标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-2 asp.net-mvc-4 asp.net-mvc-controller

我有一个控制器。 “OrderController”。目前它是1800线。我喜欢减小尺寸。我正在使用静态帮助器方法,但是我正在使用ninject来调用我的存储库,因此在没有传递属性的情况下无法访问静态方法中的存储库。

有哪些降低控制器噪音的好方法?

3 个答案:

答案 0 :(得分:9)

如何获得精简控制器

  1. 重构可重用的功能,可以应用于ActionFilters的多种类型的输出。 结果:重复性较低的代码,较薄的控制器操作,更快的未来发展

  2. 重构适用于特定类型输出的自定义ActionResult的可重用功能。 结果:重复性较低的代码,较薄的控制器操作,更快的未来发展

  3. 利用ModelBinders将输入值绑定到注入Controller操作的复杂对象。 结果:您无需在控制器中处理实际的HTTP输入(RouteData,Form值,查询字符串参数)。您还可以在模型绑定器中处理数据验证。

  4. 通过自定义ControllerFactory实施依赖注入。 后果:您无需在Controller中构建服务。

  5. 将具有过多Controller控制器操作的单个控制器重构为多个控制器。 后果:您的代码变得更易于维护。

  6. 将静态辅助方法移动到静态类。 结果:您的方法可以被多个控制器重复使用,并且您在控制器中的代码更少,因此更容易维护和更改您的应用。

  7. 其他注释

    存在大量开源资源来帮助完成这些任务。我绝对建议调查MvcContrib项目。它们具有FluentController基类,其设计时考虑了构建精简控制器。另外,我赞成Darin因为他推荐的视频很有用,所以请查看

答案 1 :(得分:1)

你的控制器中不应该有那么多代码。我怀疑你没有把你的担忧分开。

我会对这个问题的答案进行审视和思考:

ASP.NET MVC Patterns

简而言之:

  1. 将复杂性放入执行明确目的的服务类中,即提供控制器所需的功能。

  2. 控制器应该只有应用程序逻辑,即它应该只是作为一种空中交通,嗯,控制器,以这种方式发送请求和基于应用程序逻辑。简而言之,这几乎就是它的功能。其他东西不属于控制器。

  3. 我的控制器看起来像:

    [Authorize(Roles="Admin, Tutor, Pupil")]
    public partial class CourseController : Controller
    {
        ICourseDisplayService service;
        public CourseController(ICourseDisplayService service)
        {
            this.service = service;
        }
    
        public virtual ActionResult Browse(int CourseId, string PupilName, string TutorName)
        {
            service.Initialize(CourseId, 1, PupilName, TutorName, User);
            service.CurrentStepOrder = service.ActiveStepIndex;
            if (Request.IsAjaxRequest())
            {
                return PartialView(MVC.Courses.Course.Views._Display, service.ViewModel);
            }
            else
            {
                return View(MVC.Courses.Course.Views.Display, service.ViewModel);
            }
        }
    

    注意控制器构造函数中的服务实例化以及操作中对服务的调用。

答案 2 :(得分:0)

1800行!!!!!!!!!神的圣洁母亲。我建议你看看following video关于控制饮食的问题。