1

POCO の概念をコントローラーに適用する MVC フレームワークはありますか?

例:
フレームワークの Controller クラスから継承する必要がなくなるように、コントローラーを Web フレームワークに依存させたくないとします。
代わりに、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」では、mvc4 のように JSON シリアル化が自動的に行われます。
  • 2 番目のメソッド「ホーム」では、ビューを文字列として手動でレンダリングする必要があるため、さまざまなエンジンを組み合わせたり、現在の asp.mvc 実装よりもはるかに自然な方法でカスタム エンジンを記述したりするなど、柔軟性が向上します。
  • 3 番目のメソッド「RenderSomePageOrRedirect」では、現在の RedirectResult 実装に厳密ではなく、機能するクラスを使用して、ルートに適切にマップできます。

上記の概念の少なくとも 1 つを既に実装しているフレームワークはありますか? ...多分いくつかの「contrib」ライブラリ?

私がそのような機能を探している理由は次のとおりです。

  • DRY の原則に従いたいのですが、リクエスト/レスポンス マッピング コードとコントローラーのビジネス ロジックを混在させたくありません (私が認識している現在の mvc 実装では両方を行うことはできません)。
  • コントローラー クラスを複数のコンテキストで使用できるようにしたいので、単体テストや再利用などが簡単になります。(異なる Web アプリケーションで同じコントローラーを再利用すると、コードはより DRY になります。ルートを少し調整するだけで済みます)
  • このやり方の方が良いというのはただの直感です。申し訳ありませんが、私の単語レンダラーはあきらめます(

PS: 以下にコメントし、この質問を適切に作成するのを手伝ってくれた人々 (特にStriplingWarrior) に感謝します!

4

2 に答える 2

2

私の知る限り、そのようなフレームワークはありません。ControllerASP.NET MVC コントローラーは、AsyncControllerまたはApiControllerクラスから派生する必要があります。したがって、そのような概念を実装したい場合は、独自の MVC フレームワークを作成する必要があると思います。

于 2012-05-16T07:29:02.907 に答える
1

実際にはFubuMvcがあります。それはあなたが探しているもののようです。唯一の問題は、ドキュメントが不足していることです。

于 2012-12-30T10:44:43.397 に答える