0

总而言之,在我的应用程序设计中,Controller 类的某些操作会在调用时首先调用相同的方法。代码片段如下所示。请检查它。谢谢。

public class Controller1 : Controller
    {

        public ActionResult Action1()
        {
            FunctionA(); //This function must be called firstly.This function is defined somewhere. 
            return View("a1");
        }

        public ActionResult Action2()
        {
            FunctionA(); 
            return View("a2");
        }

    }

public class Controller2 : Controller
    {

        public ActionResult Action3()
        {
            FunctionA(); 
            return View("a3");
        }

        public ActionResult Action4()
        {
            FunctionB(); 
            return View("a4");
        }

    }

在当前情况下 Action1Action2inController1Action3inController2调用相同FunctionA(),基于 DRY 理论,最好定义一个基本控制器或方法,我不知道如何在 Asp.net MVC4 中制作。请帮助我。谢谢。

4

2 回答 2

0

只有您可以回答这个问题,因为基本上答案取决于您的设计。

如果您的FunctionA方法特定于该控制器,那么您可以引入一个基类。但是,您也可以使用辅助类甚至只是扩展方法(如果它足够通用)来实现您的 DRY 架构。

关于如何在您的操作中调用它,如果它必须在操作执行之前运行,那么我建议引入一个自定义ActionFilterAttribute,您可以使用它来装饰每个操作,例如

public class Controller1 : Controller
{
    [FunctionAAttribute]
    public ActionResult Action1()
    {
        return View("a1");
    }

    [FunctionAAttribute]
    public ActionResult Action2()
    {
        return View("a2");
    }
}

或者,如果必须在该特定控制器上的每个操作之前运行它,只需装饰控制器,例如

[FunctionAAttribute]
public class Controller1 : Controller
{
    public ActionResult Action1()
    {
        return View("a1");
    }

    ...
}
于 2012-11-07T12:48:09.477 回答
0

它不是那么简单。如果他们只是共享一些代码,并不一定意味着他们应该有一个实现该功能的公共基类。您正在考虑代码中的细节来驱动您的界面。

我无法在不了解更多细节的情况下回答这个问题,但只要他们都使用的代码都在一个地方,那么你就已经朝着正确的方向前进了一半。

于 2012-11-07T12:37:14.560 回答