設計模式(Design Pattern)是前輩們對代碼開發經驗的總結,代表了最佳的實踐是解決特定問題的一系列套路。這些解決方案是眾多軟件開發人員經過相當長的一段時間的試驗和錯誤總結出來的。它不是語法規定,而是一套用來提高代碼可復用性、可維護性、可讀性、穩健性以及安全性的解決方案。
三層架構:表述層(WEB層)、業務邏輯層(Business Logic),以及數據訪問層(Data Access)
2.java有哪些設計模式
創建型模式,共五種:工廠方法模式、抽象工廠模式、單例模式、建造者模式、原型模式。
結構型模式,共七種:適配器模式、裝飾器模式、代理模式、外觀模式、橋接模式、組合模式、享元模式。
行為型模式,共十一種:策略模式、模板方法模式、觀察者模式、迭代子模式、責任鏈模式、命令模式、備忘錄模式、狀態模式、訪問者模式、中介者模式、解釋器模式。
3.MVC是什么設計模式
GoF(Gang of Four,四人組,《Design Patterns: Elements of Reusable Object-Oriented Software》/《設計模式》一書的作者:Erich Gamma、Richard Helm、Ralph Johnson、John Vlissides)並沒有把MVC提及為一種設計模式,而是把它當做“一組用於構建用戶界面的類集合”。在他們看來,它其實是其它三個經典的設計模式的演變:觀察者模式(Observer)(Pub/Sub),策略模式(Strategy)和組合模式(Composite)。根據MVC在框架中的實現不同可能還會用到工廠模式(Factory)和裝飾器(Decorator)模式。
也就是說MVC並不在23中設計模式中,mvc屬於構架模式,一個構架往往用到多個設計模式。除了MVC架構模式,還有MVP,MVVM架構模式等。
4.為何要使用MVC
MVC模式最主要精神之一就是Model與View的分離, 這兩者之間的分離可使網頁設計人員和程序開發人員能夠獨立工作、 互不影響, 從而提高了開發效率和維護效率。除此之外, 將模型層的數據處理建立成許多組件, 增加了程序的可復用性、 增進了系統功能的可擴展性; 將業務流程集中在控制層, 增強了程序流程的清晰度.
5.MVC各層的作用
Model(模型) 層
是應用系統的核心層, 負責封裝數據和業務邏輯操作, 模型層可以分為數據模型和業務模型。 數據模型用來對用戶請求的數據和數據庫查詢的數據進行封裝; 業務模型用來對業務處理邏輯進行封裝。(這個層現在知道可以放dao和JavaBean。JavaBean是如果我一次要取10個數據,封裝起來,就可以放在javaBean中。)
View (視圖) 層
視圖提供模型的表示, 它是應用程序的外觀, 是直接和用戶交互的界面。它一方面向用戶顯示相關的數據, 另一方面用來接收用戶的輸入數據,提交給控制器處理。HTML css js jsp這些都是視圖層的。
Controller(控制器) 層
主要的工作就是控制整個系統處理的流程, 控制器對用戶的請求做出處理。 它創建並調用模型的相關數據業務處理方法, 選擇相應的視圖返回給客戶端。
(例如:servlet在MVC模式中就是一個控制器,核心功能就是處理請求,把視圖層的請求發給servlet,servlet就可以處理請求,使用getParameter()取到前端發來的數據。處理數據交給dao,這是模型層。Dao處理完了,處理的結果,返回值。結果給servlet.servlet根據結果選擇一個合適的視圖,給用戶生成相應。)
總的來說, MVC處理過程為: 首先控制器接收用戶的請求, 並選擇相應的模型去處理; 模型根據控制器的調用進行相應的業務處理邏輯,並返回數據給控制器; 最后控制器選擇相應的視圖將數據顯示給客戶端用戶。
二:1.關於三層架構:
我們常說的三層架構是由JavaWeb提出的,也就是說這是JavaWeb獨有的! 所謂三層是表現層(WEB層)、業務邏輯層(Business Logic),以及數據訪問層(Data Access)。 開發中更多的是用到三層架構。很少提及MVC。
2.三層架構各層的作用
三層架構(3-tier application) 通常意義上的三層架構就是將整個業務應用划分為:表現層(UI)、業務邏輯層(BLL)、數據訪問層(DAL)。區分層次的目的即為了“高內聚,低耦合”的思想。
1、表現層(UI,也稱用戶接口層):通俗講就是展現給用戶的界面,即用戶在使用一個系統的時候他的所見所得。
2、業務邏輯層(BLL):針對具體問題的操作,也可以說是對數據層的操作,對數據業務邏輯處理。
3、持久化層(數據層DAL):其功能主要是負責數據庫的訪問,可以訪問數據庫系統、二進制文件、文本文檔或是XML文檔。簡單的說法就是實現對數據表的Select,Insert,Update,Delete的操作。如果要加入ORM的元素,那么就會包括對象和數據表之間的mapping,以及對象實體的持久化。
概述:
在軟件體系架構設計中,分層式結構是最常見,也是最重要的一種結構。
3.三層架構各層詳細說明與原理
3個層次中,系統主要功能和業務邏輯都在業務邏輯層進行處理。
所謂三層體系結構,是在客戶端與數據庫之間加入了一個“中間層”,也叫組件層。這里所說的三層體系,不是指物理上的三層,不是簡單地放置三台機器就是三層體系結構,也不僅僅有B/S應用才是三層體系結構,三層是指邏輯上的三層,即使這三個層放置到一台機器上。
三層體系的應用程序將業務規則、數據訪問、合法性校驗等工作放到了中間層進行處理。通常情況下,客戶端不直接與數據庫進行交互,而是通過COM/DCOM通訊與中間層建立連接,再經由中間層與數據庫進行交互。
表示層
位於最外層(最上層),離用戶最近。用於顯示數據和接收用戶輸入的數據,為用戶提供一種交互式操作的界面。
業務邏輯層
業務邏輯層(Business Logic Layer)無疑是系統架構中體現核心價值的部分。它的關注點主要集中在業務規則的制定、業務流程的實現等與業務需求有關的系統設計,也即是說它是與系統所應對的領域(Domain)邏輯有關,很多時候,也將業務邏輯層稱為領域層。例如Martin Fowler在《Patterns of Enterprise Application Architecture》一書中,將整個架構分為三個主要的層:表示層、領域層和數據源層。作為領域驅動設計的先驅Eric Evans,對業務邏輯層作了更細致地划分,細分為應用層與領域層,通過分層進一步將領域邏輯與領域邏輯的解決方案分離。
業務邏輯層在體系架構中的位置很關鍵,它處於數據訪問層與表示層中間,起到了數據交換中承上啟下的作用。由於層是一種弱耦合結構,層與層之間的依賴是向下的,底層對於上層而言是“無知”的,改變上層的設計對於其調用的底層而言沒有任何影響。如果在分層設計時,遵循了面向接口設計的思想,那么這種向下的依賴也應該是一種弱依賴關系。因而在不改變接口定義的前提下,理想的分層式架構,應該是一個支持可抽取、可替換的“抽屜”式架構。正因為如此,業務邏輯層的設計對於一個支持可擴展的架構尤為關鍵,因為它扮演了兩個不同的角色。對於數據訪問層而言,它是調用者;對於表示層而言,它卻是被調用者。依賴與被依賴的關系都糾結在業務邏輯層上,如何實現依賴關系的解耦,則是除了實現業務邏輯之外留給設計師的任務。
數據層
數據訪問層:有時候也稱為是持久層,其功能主要是負責數據庫的訪問,可以訪問數據庫系統、二進制文件、文本文檔或是XML文檔。
簡單的說法就是實現對數據表的Select,Insert,Update,Delete的操作。如果要加入ORM的元素,那么就會包括對象和數據表之間的mapping,以及對象實體的持久化。
4.關於三層架構的補充與實際應用
在實際的開發中,因為項目的大小不同,分層會有表現上的差異,比如業務邏輯層會分層幾層 controller dm BLL。而dao層可能也分為兩部分,要靈活使用。
三1.三層架構與MVC有關系嗎
三層架構與MVC毫無關系。三層是基於業務邏輯來分的,mvc是基於頁面來分的。
三層是從整個應用程序架構的角度來分的三層(如果程序需要,還可以分多層)。
三層是為了解決整個應用程序中各個業務操作過程中不同階段的代碼封裝的問題,為了使程序員更加專注的處理某階段的業務邏輯。
比如將數據庫操作代碼封裝到一層中,提供一些方法根據參數直接返回用戶需要的相應數據,這樣在處理具體的業務邏輯的時候,就不用關心數據的存儲問題了。
MVC是在應用程序(BS結構)的視圖層划分出來的不同功能的幾個模塊。
MVC主要是為了解決應用程序用戶界面的樣式替換問題,把展示數據的 HTML 頁面盡可能的和業務代碼分離。MVC把純凈的界面展示邏輯(用戶界面)獨立到一些文件中(Views),把一些和用戶交互的程序邏輯(Controller)單獨放在一些文件中,在 Views 和 Controller 中傳遞數據使用一些專門封裝數據的實體對象,這些對象,統稱為Models。
只所以說MVC和三層毫無關系,是因為它們二者使用范圍不同:三層可以應用於任何語言、任何技術的應用程序;而MVC只是為了解決BS應用程序視圖層各部分的耦合關系。它們互不沖突,可以同時存在,也可根據情況使用其中一種
但是他們有相同的設計理念:把視圖設計與數據持久化進行分離,從而降低耦合性,易於擴展,提高團隊開發效率。
2..MVC與三層架構的對應關系,圖示如下:
圖片轉自https://blog.csdn.net/weixin_42153410/article/details/90753696
四:SSM與三層架構的關系:
SSM即Spring+SpringMVC+MyBatis框架
SpringMVC作為View層的實現者,完成用戶的請求接收功能。SpringMVC的Controller作為整個應用的控制器,完成用戶請求的轉發及對用戶的響應。
MyBatis作為Dao層的實現者,完成對數據庫的增刪改查。
Spring以大管家的身份出現,管理所有Bean的生命周期,即整個應用中所有對象的創建、初始化、銷毀,以及對象間關聯關系的維護均由Spring管理。
JSP本質上其實就是個Servlet,所以JSP能做的事,一般來說Servlet也能做,JSP+Servlet+JavaBean開發模式可以克服一些JSP+JavaBean模式的弊端,使開發邏輯更加清晰,系統擴展更加容易。在這種架構中,JSP主要負責頁面展示,控制邏輯交給Servlet,JavaBean的職責不變(這也是為什么三層架構會出現)。舉個簡單的例子,假設瀏覽器有個登錄界面,該界面是通過JSP技術展示的(頁面展示),當用戶輸入用戶名和密碼時,JSP端會把數據傳遞給Servlet,Servlet首先判斷用戶的輸入是否符合要求,然后調用JavaBean(控制邏輯),而后由JavaBean來完成數據的封裝以及調用數據庫數據對數據進行判斷(數據封裝和業務邏輯)。
其實JSP+Servlet+JavaBean開發模式涵蓋了MVC模型的思想,所謂MVC,是Model(模型)-View(視圖)-Controller(控制器)的縮寫,是一種用於設計創建 Web 應用程序表現層的模式,在這里可以把JavaBean看做模型,JSP看做視圖,Servlet看做控制器。各個模塊的功能如下:
Model(模型):完成數據的封裝與傳遞,業務邏輯的處理,目前在Javaweb三層架構下主要指實體類,即域模型。
View(視圖):用於數據的展示,通常指JSP和HTML。
Controller(控制器):接收用戶的請求,處理數據,控制數據的流向,類似一個調度員。
上面提到,JavaBean也是一個禍害,既要數據封裝又要業務邏輯處理,還要操作數據庫,如果將它的功能進行拆解,就有了我們的三層架構。
三層架構分為表現層、業務層和持久層,其中MVC模型屬於表現層。各個層的功能如下:
表現層:頁面的展示,接收用戶的請求,數據封裝,數據的簡單處理,調用業務層等
業務層:向上提供接口,事務管理,防SQL注入,調用持久層等
持久層:與數據庫進行交互
三層架構的優缺點
優點:
1、高內聚,低耦合
2、方便維護,易於擴展
3、開發人員可以只關注某一層,有利於分工協作,加快開發速度
缺點:
1、降低了系統的性能。這是不言而喻的。如果不采用分層式結構,很多業務可以直接造訪數據庫,以此獲取相應的數據,如今卻必須通過中間層來完成。
2、有時會導致級聯的修改。這種修改尤其體現在自上而下的方向。如果在表示層中需要增加一個功能,為保證其設計符合分層式結構,可能需要在相應的業務邏輯層和數據訪問層中都增加相應的代碼
3、增加了代碼量,增加了工作量
參考:https://blog.csdn.net/hanxuemin12345/article/details/8544957