1

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

示例:
假设我不想让我的控制器依赖于任何 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 实现并不严格,可以使用任何有效的类,然后在路由中正确映射它。

是否有任何框架已经实现了至少一个上述概念?...也许是一些“贡献”库?

我寻找这种功能的原因是:

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

PS:我感谢那些在下面评论并帮助我正确形成这个问题的人(尤其是StriplingWarrior)!

4

2 回答 2

2

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

于 2012-05-16T07:29:02.907 回答
1

实际上有FubuMvc。它似乎几乎就是你要找的东西。唯一的问题是缺乏文档。

于 2012-12-30T10:44:43.397 回答