3

私はMVCのコントローラの仕事と混乱し始めていると思います。ASP.NET MVC - コントローラの仕事

私は5つの機能を公開するサービスを持っている:キュー

  • GETパッケージ
  • 削除パッケージ
    • リストパッケージは、パッケージ

    私を否定パッケージ

  • を受け入れますASP.NET MVCコントローラはこのサービスに依存し、ca通常、アクションでサービスコールを実行します。私はこれまでに満足しています。

    2番目の部分は、ViewModelの結果を構築しています。これをコントローラーの内部で行うと、コントローラーには爆発的な依存関係のリストが表示されます。追加された各アクションはビューモデルを構築するために依存関係を増加させ、これらはすべてコントローラーによって継承されます。私はこれをとても好きではありません。私はN個の異なるビューモデルビルダーに依存するこのコントローラーを構築していますが、要求ごとに1つだけを使用しています。

    私はこれをすべて取り上げ、それぞれのビューモデルに固有のアクションフィルタを適用することを考えていました。私はまだこれをしていないが、それは大丈夫だと思われる。

    これは私のために提起されている質問は、コントローラの責任は何ですか?ビューモデル構築をフィルタに引き上げると、私のコントローラは、サービスコールを実行してルートをフィルタプラグインを提供することよりも少ししかやっていません。代わりに、各ビューモデルを構築する責任をコントローラに残すと、それは混乱になります。

    コントローラごとではなく、リクエストごとにアクションをインスタンス化したいと思っています。

  • +0

    この質問には、いくつかのコードサンプルが必要です。 –

    答えて

    4

    専用のViewModelsとPoco-Modelsがありますか?この場合、ViewModel内のサービスからデータを処理できます。 私はこの荒波にかなり満足しています。コントローラーで

    public class PackageViewModel() 
    { 
        public PackageDetail{get;set;} 
        public int PackageID{get;set;} 
        public List<Package>Packages{get;set;} 
        public string SomeFilterCriteria{get;set;} 
    
        publlic void FillPackageList(IPackageService packageService) 
        {  
         Packages = packageService.GetPackages(SomeFilterCriteria);  
        } 
    } 
    

    public ViewResult ListPackages(PackageViewModel model) 
    { 
        model.FillPackageList(PackageService); 
        return View("ListPackages",model); 
    
    } 
    

    私は、あなたが "ビューモデルビルダー" で何を意味するか理解しません。

    +0

    "モデルビルダーの表示"は、DTOの値をビューモデルオブジェクトに割り当てることを指している可能性があります。私は現在、私のコントローラでこれをやっています - それが正しいかどうかはわかりませんが、私が見るものは、DTOをviewmodelのコンストラクタに渡すことです。 – Sinjai

    2

    コントローラーは、表示するすべての操作をオーケストレーションすることになっています。このロジックをアクションフィルタにプルすると、それはまだルートごとのリクエストを処理しているので、あなたのケースではよりクリーンになります。

    関連する問題