2013-05-05 95 views
1

假設MVC設計模式正在使用,並且使用的web framework不支持從HTTP請求(JSON或XML數據)解析模型。需要將傳入的轉儲請求數據解析爲模型對象。現在,我們需要開發model resolver模型解析器在MVC中應該有哪一層應該是什麼層

我知道只有在view layer上處理HTTP請求並在Service(Controller) layer中完成所有業務作業纔是MVC的正確方法。根據這個假設,在View層中做模型解析操作並不是一個好主意。它應該在服務層中定義。 (我錯了嗎?)。但如此多的web框架在視圖層處理它。問題是,最好不要打破MVC design pattern以及爲什麼?

謝謝!

編輯:

我想具體談談模型解決了這是做它在視圖中webframework;

假設客戶端正在詢問「添加用戶」。

1)它通過HTTP發送用戶數據,並且假設它是JSON

2.)你的視圖層處理它,用戶JSON數據解析爲您的用戶模型對象(模型解析器)和發送所述用戶到服務層(這裏控制器層開始工作)

3.)您的服務層驗證用戶(驗證電子郵件,用戶名等)。它在這裏完成,因爲它是一個商務工作,它發送給用戶模型層堅持。

4.)您的模型圖層存儲用戶。

在2

+0

這沒有任何意義。控制器不是服務。控制器是表示層的一部分,而服務是模型層的一部分。傳入的HTTP請求應該在你打擊MVC黑社會之前就被解釋和抽象。什麼是「模型解析」?爲什麼模型層關心您是否想將響應呈現爲XML或JSON? – 2013-05-05 14:12:04

+0

模型層不關心請求數據我沒有在我的問題中這樣說。我編輯了關於模型解析操作的更具體的問題,請檢查它。 – 2013-05-05 14:26:36

回答

0

看到從我的角度主觀角度該模型解決這是在視圖層做的是最常見的webframeworks,我看不出有什麼問題的設計,或者如果它違反了SRP 。如果不需要邏輯,則可以在任何層中處理轉換。但是,如果你堅持認爲如果轉換必須在服務層中進行,那麼你也可以這樣做。但讓我解釋爲什麼不需要。例如(在C#),則有一個轉換器(或解算器):

public class UserModelConverter{ 
    public UserModel FromJSON(string json){ 
     // parse the JSON and return the class 
    } 
} 

現在你具有服務層解析器,現在則可以使用統一的JSON格式對用戶開放。但是,請考慮以下情況:

  1. 假定UserModel具有LastName字段。該字段不是強制性的,因此可能爲空。但是,某些視圖需要特定的默認值(例如在「顯示用戶」屏幕中,您需要將默認值設置爲「[LAST_NAME]」,但在其他字段中設置爲string.Empty或「 - 」,您將難以處理它使用轉換器,特別是JSON格式

  2. 在特定的情況下,您不得不使用不同的JSON格式的數據,例如UserModel數據是屏幕中另一個對象的字段。你維護它嗎?

  3. 通常,特別是在MVC中,數據通過使用form發佈到控制器,導致每個字符串字段。你是否也會在服務層中處理對象創建?如果沒有,那麼你將創建邏輯放在不同的層。

還有一些情況,解析器適合放入服務層。這可能是:

  1. 過程的一部分,例如從CSV或XML讀取一組記錄。
  2. (他們可能會更多,我只是還沒有找到的情況)

如果操作不包含具體的邏輯(業務邏輯要準確),不要把它在服務層。

相關問題