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) に感謝します!