# MVC - 學習J筆記 最近比較努力在打底,所以就針對了JAVA相關比較常見的觀念做了一些功課,順便寫點筆記下來 一開始打算去搞懂得就是Design pattern的部分,因為程式的底子擺在那邊,但是如果真的想寫好程式碼,想跟別人一起合作,我自己覺得還是應該好好學一下這部分的東西,所以一開始就選了MVC這個架構來摸索看看 ## MVC簡介 如上面說的,MVC是一種Design Pattern,主要的目的有兩個: 1. 簡化程式的開發過程 1. 可以強化程式的可維護性 那為了達成這兩個目的,MCV架構就將程式設計的結構芬為三個部分 也就是分別代表MVC的**Model、View、Controller** ### MODEL --- **Model A.K.A.模組、模型** 在程式的架構當中,負責以抽象的方法代表**DB**裡面的資料還有邏輯 我們開發出來的應用程式可以透過**Model**去操作**DB** 在**MVC**的三個部件當中,**Model**有最多的任務需要處理 舉例來說: 在FB、IG上傳的照片,或者是學校在人事管理系統當中,學生以及教職員的資料個人這些資料會被定義為**Model Data**,都會藉由**Model**傳到資料庫裏面。 而像是照片審核機制、照片的屬性;學生學號代表是幾年級,學生的性別跟宿舍的匹配;這些資料的定義、邏輯則會寫在**Model**裡面。 >將邏輯寫在**Model**當中,可以有效減少程式碼的重複使用率,因為若**Model**回傳的數據是經過包裝的複合數據,那麼數據格式就與**Model**無關,反而是一個**Model**能為多個**View**提供數據。 ### VIEW --- **View** 看到名字就可以明白,他所負責的就是所有**使用者**看到、接觸到的介面,也就是"表現層" 在做開發的時候,我們可以將不同使用者所看到的介面獨立形成一個樣板,或是針對不同功能設計不同的樣板 這樣子的話就能夠重複使用這些**View** 要是我們所使用的**View**需要顯示出連動的資料,則需要在**Model**中先行註冊,如此一來他就可以監視他所指定的**Model Data** > **Html、js、php、css、XML、json都是使用於此層面的技術** ### CONTROLLER --- 同樣的,顧名思義就能夠理解**Controller**就是控制應用程式所有**action**的程式。**Controller** 控制著應用程式的流程,組織不同層面之間的交互行為 在**Controller**的程式裡面,有不同的**action**,會針對不同的請求去跟不同的**Model**溝通,做出相應的處理 而這些**action**有可能是**Model Data**的改變,也有可能是瀏覽器、行動裝置上使用者的行為 通常請求來自於**View**,內部的運算、資料的存取則指派給不同的**model** ### MVC運行 --- 在這邊我以**G-Mail**作為舉例說明**MVC**的運行模式 在**G-mail**啟動之前,作為使用者我們會先以瀏覽器發出**GET request**,以到達**G-mail**的網址。這個部分就是由**Controller**接收請求,然後將使用者帶到**G-mail**的登入頁面(如果沒有登入) 如果使用者登入了,再次對瀏覽器提交**G-mail**網址的**GET request**,那**Controller**將會連動**Model**去確認使用者是否有登入。如果有登入,那麼**Model**就會用他判斷的邏輯去決定要將什麼資料提出來給使用者(ex:拿出的一定會是該帳戶的資料,不同信箱的信會做分類、使用者的資料閱讀偏好) 當**Model**將所有資料取出之後,就會將資料交由**View**去處理,套上*CSS、Html、PHP*設計的網頁顯示樣板,然後把顯示出來的畫面丟到使用者介面上。也就是使用者看到的**G-mail**介面。 ## 小結 其實對於**MVC**在網上看到很多不同的見解,我大部分寫下來的都是我覺得我比較能理解且合理的解釋,所以如果有什麼錯誤的地方都希望大神們可以跟我討論QAQ 如同在參考資料上看到的: > 由於我們將一個要開發的軟體分成了三個部分,所以使用**MVC**同時也意味著你要管理比以前更多的文件,這一點是顯而易見的。這樣好像我們的工作量增加了,但請記住這比他所帶來的好處是不值得一提的。 **MVC**這個設計帶來較大量的規劃量和較為繁瑣的設計,以及他的定義模糊不清,需要有一個共同的理解不是那麼容易。 但是一旦設計得當,便能夠對於規模較大的專案進行良好的管理、維護。 2020.12.30 ###### refernece: [[資訊]什麼是MVC?](https://expect7.pixnet.net/blog/post/36446413-%5B資訊%5D-什麼是mvc?what's-model-view-controller?) [MVC架構是什麼?認識 Model-View-Controller 軟體設計模式](https://tw.alphacamp.co/blog/mvc-model-view-controller) [JAVA中MVC的基本概念介紹](https://kknews.cc/zh-tw/tech/bo8v5km.html) ###### tags: `MVC` `Design Pattern`