MVC與三層架構區別

我們平時總是將三層架構與MVC混為一談,殊不知它倆并不是一個概念。下面我來為大家揭曉我所知道的一些真相。

首先,它倆根本不是一個概念。

  三層架構是一個分層式的軟件體系架構設計,它可適用于任何一個項目。

  MVC是一個設計模式,它是根據項目的具體需求來決定是否適用于該項目。

  那么架構跟設計模式有什么區別呢?

  我們從接手一個項目開始,首先,我們需要進行架構設計,一般我們采用的就是分層式的架構設計,即我們的三層架構。

  然后,在確定了架構以后,我們再根據項目的具體需求去考慮是否需要應用一些設計模式,比如是否應用我們的MVC模式,抽象工廠模式等等。(在這里我們看出,MVC與三層架構不是一個等級的,而與抽象工廠等設計模式才是一路的)

  最后,確定了模式以后,就是我們的一些具體的實現了。(當然一個項目不僅僅考慮這些問題,我只是為了說明兩者的區別,將其他問題已省略)

其次,它倆劃分的層次不同。

  三層架構將整個項目劃分為:表現層(UI)、業務邏輯層(BLL)、數據訪問層(DAL)。

  MVC 即Model(模型),View(視圖),Controller(控制)。

  下面看一下他倆的區別與聯系:

  通過這個圖我們可以知道,我們平常所說的V是UI,C是BLL,M是DAL的觀點是錯誤的。

  而我們通常所見到的MVC一般也都是在應用三層架構的基礎上,即將Model層再進行分層。而如果Model不再進行劃分的話,那么使用MVC的意義也就不大了。

然后,它倆的目的著重點不同。

  三層架構的目的著重點是“高內聚,低耦合”,即解耦。

  MVC的目的則是實現Web系統的職能分工,即職責劃分。

  其實職責劃分也是解耦,但是三層側重的是整體的一個解耦,而MVC側重的是web系統的解耦,即側重jsp和Servlet的一個解耦。

最后,為何我們會將其混為一談?

  既然兩者有這么多的不同,我們為什么還總是將其混淆呢,下面我列舉了幾個我們常常將其混為一談的幾個原因:

  1.二者都是“三層”。

  這個原因是最容易迷惑我們初學者的,一個是UI,BLL,DAL,一個是View,Controller,Model,不都是三層嗎?

  雖然都是“三層”(不一定是真的三層,還可以是多層),但是它們的劃分的不一樣。大家可從上面的圖中看出不同。

  2.MVC總是伴隨著三層架構。

  這個就是我在前面一再強調的,我們一般是在考慮使用(也可以不使用)了三層架構的基礎上再根據具體需求決定是否需要使用MVC,于是我們常說的MVC中總是伴隨著三層架構,所以大家總是會認為MVC就是三層架構,三層架構就是MVC,殊不知,它們二者是一起出現的。

  3.都是在分層,即都是在解耦。

  前面說它們目的的時候也說了,雖然它們的側重點不同,但是它們的總體目的是一樣的,都是為了解耦,對于初學者而言,是不知道這兩個側重點有何不同的。

  大家往往對它們的聯系知道很多,不然也不會混為一談,但是對它們的區別卻知道較少,希望我上面講解的它們兩者之間的區別可以讓大家對它們有些了解,如有寫的不妥的地方,請指教。

轉載于:https://www.cnblogs.com/syl1314/p/8056417.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/390511.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/390511.shtml
英文地址,請注明出處:http://en.pswp.cn/news/390511.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

tensorflow 實現邏輯回歸——原以為TensorFlow不擅長做線性回歸或者邏輯回歸,原來是這么簡單哇!...

實現的是預測 低 出生 體重 的 概率。尼克麥克盧爾(Nick McClure). TensorFlow機器學習實戰指南 (智能系統與技術叢書) (Kindle 位置 1060-1061). Kindle 版本. # Logistic Regression #---------------------------------- # # This function shows ho…

sdlc 瀑布式 生命周期_SDLC指南–軟件開發生命周期的階段和方法

sdlc 瀑布式 生命周期When I decided to teach myself how to code almost four years ago I had never heard of, let alone thought about, the software development life cycle.當我差不多四年前決定教自己如何編碼時,我從未聽說過軟件開發生命周期,…

劍指 Offer 48. 最長不含重復字符的子字符串

請從字符串中找出一個最長的不包含重復字符的子字符串,計算該最長子字符串的長度。 示例 1: 輸入: “abcabcbb” 輸出: 3 解釋: 因為無重復字符的最長子串是 “abc”,所以其長度為 3。 示例 2: 輸入: “bbbbb” 輸出: 1 解釋: 因為無重復字符的最長子…

Mysql-my-innodb-heavy-4G.cnf配置文件注解

Mysql-同Nginx等一樣具備多實例的特點,簡單的講就是在一臺服務器上同時開啟多個不同的服務端口(3306,3307)同時運行多個Mysql服務進程,這些服務進程通過不同的socket監聽不同的服務端口來提供服務。這些Mysql多實例公用一套Mysql安…

is 和 == 的區別

is 和 操作符的區別 python官方解釋: 的meaning為equal; is的meaning為object identity; is 判斷對象是否相等,即身份是否相同,使用id值判斷; 判斷對象的值是否相等。id值是什么?id()函數官網…

win10管理凌亂桌面_用于管理凌亂的開源存儲庫的命令行技巧

win10管理凌亂桌面Effective collaboration, especially in open source software development, starts with effective organization. To make sure that nothing gets missed, the general rule, “one issue, one pull request” is a nice rule of thumb.有效的協作(特別是…

JAVA數組Java StringBuffer 和 StringBuilder 類

版權聲明:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/qq_34173549/article/details/80215173 Java StringBuffer 和 StringBuilder 類 當對字符串進行修改的時候,需要使用 StringBuffer 和 StringBuilder 類。 和 Str…

strlen和sizeof的長度區別

strlen返回字符長度 而sizeof返回整個數組占多長,字符串的\0也會計入一個長度轉載于:https://www.cnblogs.com/DawaTech/p/8086055.html

了解如何使用Yii2 PHP框架創建YouTube克隆

Yii is a fast, secure, and efficient PHP framework used to create all kinds of web apps. Weve released a full video course on how to use the Yii2 framework.Yii是一個快速,安全,高效PHP框架,用于創建各種Web應用程序。 我們已經發…

劍指 Offer 66. 構建乘積數組

給定一個數組 A[0,1,…,n-1],請構建一個數組 B[0,1,…,n-1],其中 B[i] 的值是數組 A 中除了下標 i 以外的元素的積, 即 B[i]A[0]A[1]…A[i-1]A[i1]…A[n-1]。不能使用除法。 示例: 輸入: [1,2,3,4,5] 輸出: [120,60,40,30,24] 提示: 所有…

Statement與PreparedStatement的區別

Statement與PreparedStatement的區別 PreparedStatement預編譯SQL語句,性能好。 PreparedStatement無序拼接SQL語句,編程更簡單. PreparedStatement可以防止SQL注入,安全性好。 Statement由方法createStatement()創建,該對象用于發…

劍指 Offer 45. 把數組排成最小的數

輸入一個非負整數數組&#xff0c;把數組里所有數字拼接起來排成一個數&#xff0c;打印能拼接出的所有數字中最小的一個。 示例 1: 輸入: [10,2] 輸出: “102” 示例 2: 輸入: [3,30,34,5,9] 輸出: “3033459” 提示: 0 < nums.length < 100 說明: 輸出結果可能非…

python 科學計算機_在這個免費的虛擬俱樂部中學習計算機科學和Python的基礎知識

python 科學計算機Are you learning how to code in 2020? 您是否正在學習2020年編碼&#xff1f; Or are you already working as a developer but want to learn computer science fundamentals? 還是您已經在從事開發人員工作&#xff0c;但想學習計算機科學基礎知識&…

Struts2框架使用(十)之struts2的上傳和下載

Struts2 文件上傳 首先是Struts2的上傳&#xff0c;Struts2 文件上傳是基于 Struts2 攔截器實現的&#xff0c;使用的是fileupload組件&#xff1b; 首先如果想要上傳文件&#xff0c;則需要在表單處添加 enctype"multipart/form-data" 屬性。 <% page language&…

module_param 用于動態開啟/關閉 驅動打印信息

1.定義模塊參數的方法: module_param(name, type, perm); 其中,name:表示參數的名字; type:表示參數的類型; perm:表示參數的訪問權限; type參數設定的類型和perm的訪問權限具體數值數值請參考內核定義。 2、可以在insmod&#xff08;裝載模塊&#xff09;的時候為參…

超鏈接href屬性_如何使用標簽上的HREF屬性制作HTML超鏈接

超鏈接href屬性A website is a collection of web pages. And these pages need to be linked or connected by something. And to do so, we need to use a tag provided by HTML: the a tag. 網站是網頁的集合。 這些頁面需要通過某種方式鏈接或連接。 為此&#xff0c;我們需…

劍指 Offer 42. 連續子數組的最大和

輸入一個整型數組&#xff0c;數組中的一個或連續多個整數組成一個子數組。求所有子數組的和的最大值。 要求時間復雜度為O(n)。 示例1: 輸入: nums [-2,1,-3,4,-1,2,1,-5,4] 輸出: 6 解釋: 連續子數組 [4,-1,2,1] 的和最大&#xff0c;為 6。 解題思路 對于一個數組&…

centos 7安裝配置vsftpd

yum install -y vsftpd #安裝vsftpd yum install -y psmisc net-tools systemd-devel libdb-devel perl-DBI #安裝vsftpd虛擬用戶配置依賴包 systemctl enable vsftpd.service #設置vsftpd開機啟動 cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf-bak #備份默認配置文…

amazeui學習筆記--css(基本樣式3)--文字排版Typography

amazeui學習筆記--css&#xff08;基本樣式3&#xff09;--文字排版Typography 一、總結 1、字體&#xff1a;amaze默認非 襯線字體&#xff08;sans-serif&#xff09; 2、引用塊blockquote和定義列表&#xff1a;引用塊blockquote和定義列表&#xff08;dl dt&#xff09;注意…

劍指 Offer 46. 把數字翻譯成字符串

給定一個數字&#xff0c;我們按照如下規則把它翻譯為字符串&#xff1a;0 翻譯成 “a” &#xff0c;1 翻譯成 “b”&#xff0c;……&#xff0c;11 翻譯成 “l”&#xff0c;……&#xff0c;25 翻譯成 “z”。一個數字可能有多個翻譯。請編程實現一個函數&#xff0c;用來計…