MVC POCO控制器和流畅的路线

时间:2012-05-15 19:13:05

标签: asp.net-mvc asp.net-mvc-routing poco fluent-interface

是否存在任何将POCO概念应用于控制器的MVC框架?

例:
假设我不想让我的控制器依赖于任何Web框架,就像我不再需要从框架Controller类继承一样。
相反,我想只指定带有一些规则的路由,描述如何将请求映射到我的POCO控制器类实例的方法和参数。

下面的小例子可以更好地解释它 想象一下,我们可以像这样进行路由:

routes.MapPOCOController<MyPOCO>("MyWebAppName/{method}/{*parameters}", () => _container.Resolve<MyPOCO>());
routes.IfMethodReturns<MyCustomRedirectResult>().PerformRedirect(result => result.Url);

然后你的控制器类只是一个POCO对象:

public class MyPOCO {
    public User     GetUser(Guid userId) {...}
    public string   Home() { 
        return _razorEngine.Render("~/Views/Home/Index.cshtml", new HomeModel { Message = "Hello world!"});
    }
    public object   RenderSomePageOrRedirect()
    {
        if(blabla)
            return new MyCustomRedirectResult("/profile");
        else
            return _razorEngine.Render( ... );
    }
    ...
}
  • 在第一种方法“GetUser”中,JSON序列化可以像在mvc4中一样自动发生。
  • 在第二种方法“Home”中,我们需要手动将视图呈现为字符串,这样可以提供更多的灵活性,例如组合不同的引擎或以比当前asp.mvc更自然的方式编写自定义引擎实施
  • 在第三种方法“RenderSomePageOrRedirect”中,我们对当前的RedirectResult实现并不紧张,可以使用任何有效的类,然后在路由中正确映射。

是否有任何框架已经实现了至少一个上述概念? ......可能是一些“contrib”库?

我正在寻找这样的功能的原因是:

  • 我想遵循DRY原则,不希望将请求/响应映射代码与控制器中的业务逻辑混合在一起(你不能同时使用我所知道的当前mvc实现)
  • 我想让我的控制器类在多个上下文中可用,因此,单元测试,重用等等更容易。 (当您在不同的Web应用程序中重用相同的控制器时,代码变得更加干燥:您只需稍微调整路径)
  • 只是一种直觉,这种做事方式更好,对不起,我的文字渲染器放弃了(

PS:感谢下面评论过的人们(特别是StriplingWarrior)并帮助我正确地形成了这个问题!

2 个答案:

答案 0 :(得分:2)

AFAIK那里没有这样的框架。 ASP.NET MVC控制器必须派生自ControllerAsyncControllerApiController类。所以我想如果你想实现这样的概念,你将不得不编写自己的MVC框架。

答案 1 :(得分:1)

实际上有FubuMvc。它似乎是你正在寻找的。唯一的问题是稀缺的文件。