模型-視圖-控制器(MVC)是一種設計框架(設計模式)。
MVC 的目標是將業務邏輯從用戶界面的考慮中分離。
這樣,開發者就可以更容易地改變每一部分而不會影響其他。
在 MVC 中,
Model 代表數據和業務規則;
View 包含了用戶界面元素,例如文本,表單等;
Controller 則管理模型和視圖中的通信。
MVC 在各種編程語言中均有實現,例如 J2EE 應用開發中,
View 可能由 jsp 實現;Controller 是一個 servlet,現在一般用 Struts 實現;Model 則是由一個實體 Bean 來實現。
Yii Framework 是一個流行的 PHP 框架,它借鑒了 Ruby on Rails 的 ActiveRecord
(AR
) 概念。
數據庫中的每一個 table
都可以用 AR
類來方便地進行增刪改查操作。
它把 AR 當做 Model,并推薦放在一個名為 models
的目錄下面。
于是,我在自動生成表對應的 AR 之后,便望文生義想當然地認為已經擁有了 Model 層。
其實,AR只不過是 DAO (數據訪問層),并不是 Model 層。
我們的業務幾乎全放在了 Controller 里:對用戶提交上來的表單進行各種邏輯判斷,進行計算,實例化 AR 對數據進行存儲……
因為一個 Controller 中會有多個 action
,每個 action
都有這樣的業務處理。
最后,我發現我的 Controller 代碼已經超過了 1000 行。
突然有一天,leader 說,我們這個系統要開放 API 給現有的舊系統調用,要給第三方接口。
第三方只是要給定一個參數,本系統給出個結果值而已,這其中的業務處理它是不關心的。
壞就壞在這里,Controller 已經實現了那些業務,但它是接受表單提交的,怎樣能夠也接受 SOAP 的 xml 文檔呢?
Controller 和套套一樣,應該越薄越好。
它的職責應該只是接受用戶的輸入,然后立刻轉發給別的類來處理。
這樣 Controller 只負責提供不同的接口,我們才能算是將業務邏輯分離出去,而分離出去的業務也很容易進行重用。
分離出來的這部分業務由誰來處理呢?答案應該是 Model。
View部分比較明確,就是負責顯示。
一切與顯示界面無關的東西,都不應該出現在view里面。
因此,View 中一般不應該出現復雜的判斷語句,以及復雜的運算過程。
可以有簡單的循環語句、格式化語句。比如,博客首頁的文字列表就是一種循環。
對于PHP的Web應用而言,HTML是View中的主要內容。
View應該從不調用Model的寫方法。
也就是說,View只從Model中讀取數據,但不改寫Model。
所以我們說,View和Model是老死不相往來的。
而且,View中不直接訪問$_GET
和$_POST
,應該由Controller傳遞給View。
此外,View一般沒有任何準備數據處理的內容,如查詢數據庫等。
這些一般是放在Controller里面,并以變量的形式傳給視圖。
也就是說,視圖里面要用到的數據,就是一個變量。
對于Model而言,最主要就是保存和輸出信息。
比如,Post類必然有一個用于保存博客文章標題的title
屬性,必然有一個刪除的操作,這都是Model的內容。
數據、行為、方法是Model的主要內容。
實際工作中,Model是MVC中代碼量最大。
Model是邏輯最復雜的地方,因為應用的業務邏輯也要在這里表示。
注意將Model與Controller區分開。
Model是處理業務方面的邏輯,Controller只是簡單的協調Model和View之間的關系。
只要是與業務有關的,就該放在Model里面。
數據校驗、public常量和變量,都應該放在model層,
也就是說,有可能被重復使用的屬性或方法,都應該放在model層,一次定義,到處使用。
Model不應該訪問request、session以及其他環境數據,這些應該由Controller注入。
好的設計,應該是胖Model,瘦Controller。
對于Controller,主要是響應用戶請求,決定使用什么視圖,需要準備什么數據用來顯示。
因此,對于request
的訪問代碼,應該放在Controller里面,比如$_GET
、$_POST
等。
Controller應該僅限于獲取用戶請求數據,不應該對數據有任何操作或預處理,這應該放在 Model 里面。
對于數據的寫操作,要調用Model類的方法完成。
對于用戶請求的響應,要調用視圖渲染。
此外,一般不要有HTML代碼等其他表現層的東西,這應該是屬于View的內容。
到此,關于“MVC架構的含義及職責劃分是什么”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注本站網站,小編會繼續努力為大家帶來更多實用的文章!
本文由 貴州做網站公司 整理發布,部分圖文來源于互聯網,如有侵權,請聯系我們刪除,謝謝!
c語言中正確的字符常量是用一對單引號將一個字符括起表示合法的字符常量。例如‘a’。數值包括整型、浮點型。整型可用十進制,八進制,十六進制。八進制前面要加0,后面...
2022年天津專場考試原定于3月19日舉行,受疫情影響確定延期,但目前延期后的考試時間推遲。 符合報名條件的考生,須在規定時間登錄招考資訊網(www.zha...
:喜歡聽,樂意看。指很受歡迎?!巴卣官Y料”喜聞樂見:[ xǐ wén lè jiàn ]詳細解釋1. 【解釋】:喜歡聽,樂意看。指很受歡迎。2. 【示例】:這是...
為了響應改革強軍的命令,取消了軍隊文工團的編制。有著68年輝煌歷史的空政藝團從此走入歷史。他們以自己堅定的行動堅持和支持改革,一聲令下聽黨指揮,展現了黨的文藝戰士的真正忠誠。68年來,一代又一代空軍旅作家藝術家創作演繹了生動感人的空軍旅故事,唱響了催人奮進的軍歌,留下了不可磨滅的空軍旅記憶?!拔覑圩鎳乃{天,晴朗空萬里晴空。白云為我鋪路,東風送我飛向前……”悠揚的旋律唱了幾十年,空部隊的人都耳熟能...
小投資生財之道怎么做才好?1、小投資和理財要量力而行投資時一定要根據自己的實際情況制定自己的理財計劃,分清個人或家庭的生活費、存款、日常消費、理財錢,將理財錢分成不同的比例進行投資。同時,投資的時候一定要根據自己現有的資金進行投資,量力而行。2、選擇最適合的理財方式做小投資理財不要隨波逐流,每個人的財產狀況、風險承受能力、收益預期都不一樣,對投資理財產品的選擇也不一樣。所以,選擇自己了解的適合自己...
收益憑證是保本的嗎?不一定,收益憑證分為保本固定收益型收益憑證、保本浮動收益型收益憑證和非保本浮動收益型收益憑證,保本固定收益型收益憑證、保本浮動收益型收益憑證,非保本浮動收益型收益憑證是不保本的,有虧損本金的可能,虧損本金由投資者自行承擔。收益憑證產品是指證券公司以自身信用發行的,約定本金和收益的償付與特定標的相關聯的有價證券。收益憑證是什么意思?收益憑證,指證券公司以自身信用發行的,約定本金和...