3

サンダードームの原理(1つのオブジェクトが入り、1つのオブジェクトが離れる)の基本的な考え方は知っていますが、asp.netmvcで実際の例を見ることはありませんでした。サンダードームの原理の良い例ですか

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

しかし、ステートメントはどうですか

Controllerクラスは、HttpContextに関連するものに直接公開されることはありません。

アクション呼び出し元はどのように見えるべきですか?その例と単体テストをいくつか提供していただけますか?


http://codebetter.com/blogs/jeremy.miller/archive/2008/10/23/our-opinions-on-the-asp-net-mvc-introducing-the-thunderdome-principle.aspxから

「Thunderdomeの原則」–すべてのControllerメソッドは、1つのViewModelオブジェクト(または場合によっては0のオブジェクト)を受け取り、1つのViewModelオブジェクトを返します(1つのオブジェクトが入り、1つのオブジェクトが出る)。Controllerクラスは、HttpContextに関連するものに直接公開されることはありません。その新しいIHttpContextWrapperインターフェースをモックまたはスタブするテストを作成しようとしている人々を見るほど私を泣かせるものはありません。同様に、ControllerメソッドはViewResultオブジェクトを返さず、通常、すべてのMVCインフラストラクチャから切り離されています。この戦略は、コントローラーのテストを機械的に簡単にする方法として、非常に早い段階で採用されました。

しかし、私はこれを行う方法を知りたいですか?そのようなコントローラーアクション呼び出し元を作成する方法は?通常、httpcontextをモックする必要があるため

4

2 に答える 2

1

Oxiterev2ソースのASP.NETMVCで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にヒットして、そのアクションに登録されているすべてのフィルターをロードします。

于 2009-05-12T13:14:44.507 に答える
0

これは、MVC アプリケーションの最もクリーンなアプローチである「サンダードームの原則 (1 つのオブジェクトが入り、1 つのオブジェクトが離れる)」です。ビューで必要なデータを取得するために ViewData または ViewTemp を使用することは避けてください。

簡単な例については、こちらの jscportal プロジェクトのリンク テキストを参照してください。

たとえば、jscportal\JSC.Portal.Web\Controllers\TemplatesController.cs あなたが望むような例があります:

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);
}

幸運を!

于 2009-05-12T09:12:55.527 に答える