在大多數現實生活中,來自用戶的數據不會直接進入數據庫。
它必須經常驗證,過濾或轉換。
模型層的作用通常是通過執行這些操作來確保數據正確地到達後端存儲區(通常是數據庫),這些操作不應該是控制器(瘦身控制器,胖模型)的責任,而不是數據庫引擎本身的責任。
換句話說,Model層負責 - 或者「知道」 - 應該如何處理數據。
大多數現代MVC框架提供了指定數據有效性要求(如Rails)的合同的方法。
下面是http://biodegradablegeek.com/2008/02/introduction-to-validations-validation-error-handling-in-rails/一個例子:
class Cat
validates_inclusion_of :sex, :in => %w(M F), :message => 'must be M or F'
validates_inclusion_of :vaccinated, :in => [true,false]
validates_inclusion_of :fiv, :in => [true,false]
validates_inclusion_of :age, :within => 1..30
validates_each :weight do |record, attr, value|
record.errors.add attr, 'should be a minimum of 1 pound' if value and value /^[01][0-9]\/[0-9]{2}\/[0-9]{4}$/
validates_length_of :comment, :allow_blank => true, :allow_nil => true, :maximum => 500
end
這裏,有幾個數據有效性的要求不能被數據庫進行處理,而不應在控制器來處理,因爲這些要求的任何修改可能打破代碼在幾個地方。
因此,該模型是確保數據與您的域一致的最佳位置。
還有很多更值得一說這件事,但我覺得解決,似乎對我很重要的一個點,通過實踐經驗:)動機
感謝您的回答!我想我現在瞭解更多。您提到'需要業務層的存在' - 這個業務層,它是模型嗎? – rickchristie 2011-02-23 17:35:46
感謝您的啓發 - 閱讀TDD - 看起來很棒。將與我的朋友討論。從今天開始,我的編程習慣會改變:) – rickchristie 2011-02-23 18:32:23