3

我想我開始混淆MVC中的控制器的工作。ASP.NET MVC - 作業控制器

我有暴露五大功能服務:在隊列

  • GET包
  • 刪除包
    • 列表包接受包
    • 否認包

    我ASP.NET MVC控制器依賴於這個服務,和ca n通常在Action上執行服務調用。到目前爲止我很開心。

    第二部分是構建ViewModel結果。如果我在控制器內部執行此操作,則控制器現在具有爆炸依賴項列表 - 添加的每個操作都會增加依賴項以構建視圖模型,並且這些都由控制器繼承。我不太喜歡這個。我構建的這個控制器依賴於N個不同的視圖模型構建器,但是每個請求只能使用其中的一個。

    所以我正在考慮把所有這一切都拿出來,並針對每個視圖模型應用特定的操作過濾器。我還沒有這樣做,但似乎沒關係。

    這對我提出的問題是:控制器的責任是什麼?如果我最終將視圖模型構建爲過濾器,那麼我的控制器只不過是讓一個路由執行一個服務調用(並提供一個過濾器插件)。如果我讓我的控制器負責構建每個視圖模型,它就變得一團糟。

    看來我幾乎想要實例化每個請求的操作,而不是控制器,而我只是在濫用過濾器來實現這個目標?

  • +0

    這個問題急需一些代碼示例。 – 2009-08-24 06:34:49

    回答

    4

    您是否有專門的ViewModels和Poco-Models?如果是這種情況,您可以處理ViewModel內部服務的數據。 我很高興與這個uproach。

    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 2017-09-25 21:53:38

    2

    控制器應該編排您希望在視圖中發生的所有操作。如果你將這個邏輯放到動作過濾器中,它仍然按照每個路由請求執行邏輯,在你的情況下它將變得更加清晰。