国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

在mvc開發(fā)框架中,對于用戶錄入的內(nèi)容合法性檢查在提交時,由c完成還是m完成?
phpcn_u1582
phpcn_u1582 2017-05-16 17:06:31
0
13
1204

目前大家使用mvc開發(fā)框架的時候,對于用戶前端的用戶錄入性文字合法性檢測的時候,在用戶提交的時候,這個應(yīng)該由c層來處理還是m層來處理?

phpcn_u1582
phpcn_u1582

全部回復(fù)(13)
某草草

不得不頂一下易偉的說法 ,我補充下我的理解,V為保證用戶體驗而做校驗,不至于讓用戶提交之后發(fā)現(xiàn)出錯了在回去改,C為保證數(shù)據(jù)本身的合法性而校驗(數(shù)據(jù)是否屬于該用戶,數(shù)據(jù)狀態(tài)改變是否符合邏輯要求),M為保證數(shù)據(jù)存在性而交易,數(shù)據(jù)都不存在,下面的都不用走了,肯定是異常了。

過去多啦不再A夢

這個問題需要結(jié)合具體應(yīng)用、具體語言、具體框架分析,甚至和團隊成員的風(fēng)格、構(gòu)成有關(guān)。

我個人傾向于M做校驗邏輯,拋異常,然后C捕捉并轉(zhuǎn)換為前端需要的格式輸出。這樣初期代碼可能啰嗦一點,但對邏輯完整性和后期擴展比較有利。

還有一種做法是在M和C中間建立一層所謂邏輯層,來處理校驗邏輯和部分業(yè)務(wù)邏輯

洪濤

一般MVC框架中會根據(jù)業(yè)務(wù)處理增加一層service層,model做ORM映射或者直接拋棄,寫個DAO,好了,現(xiàn)在來說下校驗到底在哪層里面做,最正確的方法是控制器層C和服務(wù)層S都要做,因為隨著網(wǎng)站發(fā)展,肯定是需要將service單獨拎出來,做為公共的服務(wù)組件,進(jìn)行遠(yuǎn)程調(diào)用,所以如果你不在控制器層做校驗的話,今后有數(shù)據(jù)請求,你直接丟給公共的服務(wù),如果數(shù)據(jù)有問題,然后再返回錯誤,這很明顯就浪費了一次網(wǎng)絡(luò)IO,所以如果你已經(jīng)在控制器層面做好數(shù)據(jù)校驗了,當(dāng)數(shù)據(jù)有誤,直接拋出異常,不需要再通過RPC取進(jìn)行一次遠(yuǎn)程調(diào)用了

習(xí)慣沉默

這絕對要分情況看的:

  • 文本格式的合法性:在前端用js驗證或正則表達(dá)式處理掉就好。
  • 數(shù)據(jù)的有效性問題:

    • 簡單情況:比如驗證年月日的合法性,同樣可以放在前端來做。
    • 更廣泛的情況:包含以上兩種情況,也包含用戶名驗證、重復(fù)性驗證等,牽扯具體業(yè)務(wù)邏輯的情況,以Rails框架為代表,是放在Model中完成驗證的。

Fat model, skinny controller.

Peter_Zhu

鵝廠編碼有個原則:接口間互不信任。

世界只因有你

不用任何框架自己寫的話應(yīng)該屬于c層。但是更多的框架傾向于放在m層里面。

另外不要只在v層做輸入校驗,前端的東西很容易被繞過,有安全隱患。

阿神

每一層都要做,側(cè)重點不同。

我們一般在MVC的C-M之間一定會再加一層Service層(不過也可以理解成是C或M的一部分),這一層是設(shè)計為與View和Controller解耦,可以獨立剝離出來給外部調(diào)用的(API)。

所以,
在View里面,進(jìn)行比較弱的單個值的合法性校驗,
在Controller里面,做外部來的請求數(shù)據(jù)包的合法性校驗和部分用戶接口權(quán)限校驗;
在Service里面做嚴(yán)格的數(shù)據(jù)合法性校驗、業(yè)務(wù)邏輯約束校驗、用戶數(shù)據(jù)權(quán)限校驗;
在Model里面做數(shù)據(jù)的物理合法性校驗。

Peter_Zhu

如果題主使用過Python的Django或者Flask這樣的框架的話,會發(fā)現(xiàn)還有一個Form類。用戶內(nèi)容驗證的邏輯,一般來說會放在Form類里面來做。因為有時候,我們可能需要根據(jù)不同的情況,針對同一個Data model做不同的驗證規(guī)則。當(dāng)然Django也支持Model層的驗證。相對而言。Form層來做這個,耦合度更低一點。

習(xí)慣沉默

簡單的MVC一般會把FORM驗證做在model層上,而比較成熟的方案一般會把FORM分出來,以joomla為例,它有FORM層并整合到model層上,結(jié)構(gòu)上是屬于model層,但功能的實現(xiàn)又似乎跟model層沒什么關(guān)系。

PHPzhong

其實合法性檢查也分本地和服務(wù)器端。
例如輸入為空,是放在 V 層來檢查;輸入的格式不對事放在 M 層來檢查。
如果要進(jìn)一步檢查是否合格更是放在 M 層通過訪問服務(wù)器來檢查。

最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板