2011-09-26 62 views
3

我有5個任務是我的應用程序需要執行的一個步驟。哪些部分進入模型與控制器?

  1. 接收CSV文件作爲用戶上傳的一部分。
  2. 將CSV中的每一行解析爲規範表示形式。
  3. 創建與該表示相關的ORM POCO。
  4. 將每個項目保存到數據庫。
  5. 發送電子郵件至每個POCO中定義的電子郵件地址。

我有一個倉庫已經爲數據庫ORM的東西,我至少弄明白,控制器可能不應該是新的一個SmtpClient本身,但多少'膠'進入控制器?是否在代碼氣味下方顯示比我的代碼片段更多的細節?

public ActionResult Index(HttpPostedFileBase file) { 

    var result = model.HandleFileUpload (file); 

    if (result.Success) 
    { 
     return SuccessAction("Success"); 
    } else { 
     return FailureAction("Failure"); 
    } 

} 

如果這確實都屬於在模型中,什麼是工作類型我做的調用,如果我只是「粘合」低級別的東西放在一起?

回答

3

你描述的瘦控制器對我來說看起來很不錯。它很容易測試,並且通過在您的模型中創建一組鬆散耦合的服務類,使您能夠輕鬆遵守單一職責原則,每個類都處理您的流程的不同步驟。 這也允許您在需要時使用MVC應用程序範圍之外的代碼。

所以,我會設想你有一個FileHandler類實現你的HandleFileUpload方法。 這將定義該過程的步驟,可能會調用FileParser,RepositoryEmailSender類,每個類都可以通過接口消耗並依賴注入到您的FileHandler中。

你在做什麼類型的工作?開發您可以引以爲傲的可維護軟件:-)

+0

我喜歡您的答案更多:) –

+0

執行此操作後,這是一個非常乾淨的解決方案,它具有很大的可測試性。也很容易遵循。 –

相關問題