2009-05-12 5 views
3

私はthunderdomeの原理(1つのオブジェクトが入って、1つのオブジェクトが葉)の基本的なアイデアを知っていますが、私はasp.net mvcでそれの実例を見ませんでした。 それはサンダードーム原則thunderdome action invoker asp.net mvc

public ActionResult Index(Employee employee) 
     { 
      //some actions here 
      return View(employeeViewModel); 
     } 

しかし、何

文のコントローラクラスは 直接のHttpContext

どのようにアクション呼び出しに関連したもの にさらされることはありませんが良い例です。のように見えるはずですか?あなたはそれのためのいくつかの例と単体テストを提供できますか? http://codebetter.com/blogs/jeremy.miller/archive/2008/10/23/our-opinions-on-the-asp-net-mvc-introducing-the-thunderdome-principle.aspx「サンダードーム原理」

から


- すべてのコントローラメソッド一個のビューモデルオブジェクト(またはいくつかの場合にはゼロオブジェクト)に取り、シングルビューモデルオブジェクトを返す(1つの目的は、入射し、一つの目的は、葉) 。コントローラのクラスは、HttpContextに関連するものに直接さらされることは決してありません。その新しいIHttpContextWrapperインターフェイスを模倣したり、スタブしたりするテストを書こうとしている人々のように私を泣かせてくれるものはありません。同様に、ControllerメソッドはViewResultオブジェクトを返さず、通常はすべてのMVCインフラストラクチャから分離されます。この戦略は、コントローラーのテストを機械的に簡単にする方法として非常に早い段階で採用されました。

しかし、私はこれを行う方法を知りたいですか?そのようなコントローラアクションの呼び出しを書く方法?通常はhttpcontextを擬似しなければならないから

答えて

1

Oxite rev2ソースのASP.NET MVCでOMIOMO(Thunderdome)アクション呼び出し元を実現する方法の例があります。

具体的OxiteActionInvoker: http://oxite.codeplex.com/SourceControl/changeset/view/31497#442766

そして、ここであなたがOMIOMOのコントローラーを見ることができます: また、関心のhttp://oxite.codeplex.com/SourceControl/changeset/view/31497#442745

、Oxiteの人は、あなたがIoC-を持つことができるようにそれを作ることができました(アクションに対してすべてのフィルタを指定するのではなく、可能なすべての可能な方法を知る必要があるため、OCP違反の可能性があります)。これは、OxiteActionInvokerメソッド "GetFilters"で実際に動作しています。FilterRegistryにアクセスして、そのアクションのすべての登録済みフィルタをロードします。

0

これは、MVCアプリケーションのための最もクリーンなアプローチである「雷鳴の原理(1つのオブジェクトが入り、1つのオブジェクトが去る)」です。このスタイルでは、常にtrhingsを実行し、ビューに必要なデータを取得するためにViewDataまたはViewTempを使用しないでください。

シンプルたとえば、あなたが望むようにあなたが彼らの例があるでしょう、ここlink text

例えば

jscportal\JSC.Portal.Web\Controllers\TemplatesController.cs でjscportalプロジェクトで見ることができます:

public ActionResult List() 
{ 
    IList<Template> templates = Service.GetAll(); 
    return View(templates); 
} 

public ActionResult Edit(int id) 
{ 
    Template t = Service.GetById(id, false); 
    return View(t); 
} 

幸運を!

+0

はい、httpcontextを隠すのはどうですか?そのようなコントローラをテストすることについて? –

+0

このようにすると、サービス内で何が起きているかテストを再開するよりも、この場合はリポジトリからのポテンシャルだけをテストすると仮定します。ハッキングされたアイデアをHttpContextに入れたいのであれば、http://haacked.com/archive/2007/12/09/writing-unit-tests-for-controller-actions.aspxを参照してください。 – diadiora

関連する問題