應用分層是?種軟件開發設計思想,它將應用程序分成N個層次,這N個層次分別負責各自的職責,?多個層次之間協同提供完整的功能。根據項目的復雜度,把項目分成三層,四層或者更多層。常見的MVC設計模式,就是應用分層的?種具體體現。
為什么需要應用分層?
在最開始的時候,為了讓項目快速上線,我們通常是不考慮分層的。但是隨著業務越來越復雜,大量的代碼混在?起,會出現邏輯不清晰、各模塊相互依賴、代碼擴展性差、改動?處就牽?發而動全身等問題。所以學習對項目分層就是我們程序員的必修課了。
如何分層?
"MVC", 就是把整體的系統分成了Model(模型),View(視圖)和Controller(控制器)三個層次,也就是將用戶視圖和業務處理隔離開,并且通過控制器連接起來,很好地實現了表現和邏輯的解耦,是?種標準的軟件分層架構。
目前現在更主流的開發方式是 "前后端分離" 的方式,后端開發工程師不再需要關注前端的實現,所以對于Java后端開發者,又有了?種新的分層架構: 把整體架構分為表現層、業務邏輯層和數據層。這種分層方式也稱之為"三層架構"。
- 表現層: 就是接受用戶指令和返回數據結果的,是最靠近用戶的?層;
- 業務邏輯層: 負責處理業務邏輯, 里面有復雜業務的具體實現;
- 數據層: 負責存儲和管理與應用程序相關的數據
按照上面的層次劃分, Spring MVC 站在后端開發人員的角度上, 也進行了支持, 劃分為三個部分:
- 請求處理、響應數據:負責,接收頁面的請求,給頁面響應數據。
- 邏輯處理:負責業務邏輯處理的代碼。
- 數據訪問:負責業務數據的維護操作,包括增、刪、改、查等操作。
這三個部分,在Spring的實現中, 均有體現:
- Controller:控制層。接收前端發送的請求,對請求進行處理,并響應數據。
- Service:業務邏輯層。處理具體的業務邏輯。
- Dao:數據訪問層,也稱為持久層。負責數據訪問操作,包括數據的增、刪、改、查。
Model:實體層
MVC 和三層架構的區別和聯系
關于?者的關系,?直存在不同的觀點。有人認為三層架構是MVC模式的?種實現, 也有人認為MVC是三層架構的替代方案,等等各種說法都有。根本原因是大家站在不同的角度來看待這個問題的。
從概念上來講,?者都是軟件工程領域中的架構模式。MVC架構模式由三部分組成, 分別是: 模型(Model), 視圖(View)和控制器(Controller)。三層架構將業務應用劃分為:表現層,業務邏輯層,數據訪問層。
MVC中,視圖和控制器合起來對應三層架構中的表現層。模型對應三層架構中的業務邏輯層,?數據層,以及實體類。二者其實是從不同角度對軟件工程進行了抽象。
MVC模式強調數據和視圖分離, 將數據展示和數據處理分開,通過控制器對兩者進行組合。
三層架構強調不同維度數據處理的高內聚和低耦合,將交互界面,業務處理和數據庫操作的邏輯分開。
角度不同也就談不上互相替代了,在日常的開發中可以經常看到兩種共存的情況,比如我們設計模型層的時候往往也會拆分出業務邏輯層(Service層)和數據訪問層(Dao層)。但是二者的目的是相同的, 都是“解耦,分層,代碼復用”。
軟件設計原則:高內聚低耦合。
- 高內聚指的是:?個模塊中各個元素之間的聯系的緊密程度,如果各個元素(語句、程序段)之間的聯系程度越高,則內聚性越高,即 "高內聚"。
- 低耦合指的是:軟件中各個層、模塊之間的依賴關聯程序越低越好。修改?處代碼, 其他模塊的代碼改動越少越好。
高內聚低耦合矛盾嗎?
不矛盾, 高內聚指的是?個模塊中各個元素之間的聯系的緊密程度, 低耦合指的是各個模塊之間的緊密程度這就好比?個企業,包含很多部門,各個部門之間的關聯關系要盡可能的小,?個部門發?問題,要盡可能對降低對其他部門的影響,就是耦合。但是部門內部員?關系要盡量緊密,遇到問題?起解決,克服,這叫做內聚。比如鄰里鄰居, 樓上漏水, 樓下遭殃, 就是耦合。家庭?個成員生病,其他成員幫忙照顧,就叫內聚。?個家庭內部的關系越緊密越好,?個家庭盡可能少的影響另?個家庭,就是低耦合。
企業規范
- 1. 類名使用?駝峰風格,但以下情形例外:DO/BO/DTO/VO/AO。
- 2. 方法名、參數名、成員變量、局部變量統?使用小駝峰風格。
- 3. 包名統?使用小寫,點分隔符之間有且僅有?個自然語義的英語單詞。
常見命名風格介紹
- 大駝峰: 所有單詞首字母都需要大寫, 又叫帕斯卡命名法, 比如: UserController
- 小駝峰: 除了第?個單詞,其他單詞首字母大寫,比如: userController
- 蛇形: 用下劃線(_)作用單詞間的分隔符,?般小寫,又叫下劃線命名法,比如: user_controller(數據庫字段命名)
- 串形: 用短橫線(-)作用單詞間的分隔符,又叫脊柱命名法,比如: user-controller(CSS樣式名等)
Spring, Spring Boot 和Spring MVC的關系以及區別
1.Spring: 這里指spring framework簡單來說, Spring 是?個開發應用框架,什么樣的框架呢,有這么幾個標簽:輕量級、?站式、模塊化,其目的是用于簡化企業級應用程序開發。
- Spring的主要功能: 管理對象,以及對象之間的依賴關系, 面向切面編程, 數據庫事務管理, 數據訪問, web框架支持等.
- 但是Spring具備高度可開放性, 并不強制依賴Spring, 開發者可以自由選擇Spring的部分或者全部, Spring可以無縫繼承第三方框架,比如數據訪問框架(Hibernate 、JPA), web框架(如Struts、JSF)
2.Spring MVC: Spring MVC是Spring的?個子框架, Spring誕生之后, 大家覺得很好用,于是按照MVC模式設計了?個 MVC框架(?些用Spring 解耦的組件),主要用于開發WEB應用和網絡接口,所以,Spring MVC 是?個Web框架。
- Spring MVC基于Spring進行開發的,天生的與Spring框架集成。可以讓我們更簡潔的進行Web層開發,支持靈活的 URL 到頁面控制器的映射,提供了強大的約定大于配置的契約式編程支持,非常容易與其他視圖框架集成,如 Velocity、FreeMarker等。
3.Spring Boot: Spring Boot是對Spring的?個封裝, 為了簡化Spring應用的開發而出現的,中小型企業,沒有成本研究自己的框架,使用Spring Boot 可以更加快速的搭建框架,降級開發成本,讓開發?員更加專注于Spring應用的開發,而無需過多關注XML的配置和?些底層的實現。
- Spring Boot 是個腳手架, 插拔式搭建項目, 可以快速的集成其他框架進來。
- 比如想使用SpringBoot開發Web項目,只需要引入Spring MVC框架即可,Web開發的工作是SpringMVC完成的,而不是SpringBoot,想完成數據訪問,只需要引入Mybatis框架即可。Spring Boot只是輔助簡化項目開發的,讓開發變得更加簡單,甚至不需要額外的web服務器,直接生成jar包執行即可。
最后?句話總結: Spring MVC和Spring Boot都屬于Spring,Spring MVC 是基于Spring的?個MVC 框架,而Spring Boot 是基于Spring framwork的?套快速開發整合包。