應用分層

應用分層是?種軟件開發設計思想,它將應用程序分成N個層次,這N個層次分別負責各自的職責,?多個層次之間協同提供完整的功能。根據項目的復雜度,把項目分成三層,四層或者更多層。常見的MVC設計模式,就是應用分層的?種具體體現。

為什么需要應用分層?

在最開始的時候,為了讓項目快速上線,我們通常是不考慮分層的。但是隨著業務越來越復雜,大量的代碼混在?起,會出現邏輯不清晰、各模塊相互依賴、代碼擴展性差、改動?處就牽?發而動全身等問題。所以學習對項目分層就是我們程序員的必修課了。

如何分層?

"MVC", 就是把整體的系統分成了Model(模型),View(視圖)和Controller(控制器)三個層次,也就是將用戶視圖和業務處理隔離開,并且通過控制器連接起來,很好地實現了表現和邏輯的解耦,是?種標準的軟件分層架構。

目前現在更主流的開發方式是 "前后端分離" 的方式,后端開發工程師不再需要關注前端的實現,所以對于Java后端開發者,又有了?種新的分層架構: 把整體架構分為表現層、業務邏輯層和數據層。這種分層方式也稱之為"三層架構"。

  1. 表現層: 就是接受用戶指令和返回數據結果的,是最靠近用戶的?層;
  2. 業務邏輯層: 負責處理業務邏輯, 里面有復雜業務的具體實現;
  3. 數據層: 負責存儲和管理與應用程序相關的數據

按照上面的層次劃分, 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的?套快速開發整合包。

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

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

相關文章

[特殊字符] 【JAVA進階】StringBuilder全方位解析:從使用到源碼,一文搞定!

🔥 掌握StringBuilder,讓你的Java字符串操作性能飆升!🧩 StringBuilder是什么? StringBuilder是Java中用于動態構建字符串的可變字符序列類,位于java.lang包中。與不可變的String類不同,StringB…

Redis 數據結構全景解析

Redis 不是簡單的 key-value 緩存,它更像一把“瑞士軍刀”。 只要掌握數據結構,就能把同一份內存用出 10 倍效率。0. 開場白:為什么聊數據結構? 面試常問“Redis 有幾種數據類型?”——很多人答 5 種(Strin…

ansible.cfg 配置文件的常見配置項及其說明

配置項說明默認值defaults默認配置部分inventory指定清單文件的位置,可以是文件路徑、目錄或動態清單腳本。/etc/ansible/hostsremote_user默認的遠程用戶roothost_key_checking是否啟用主機密鑰檢查。設置為 False 跳過 SSH 主機密鑰驗證。Trueask_pass是否在執行時…

Effective C++ 條款15:在資源管理類中提供對原始資源的訪問

Effective C 條款15:在資源管理類中提供對原始資源的訪問核心思想:RAII類需要提供訪問其封裝原始資源的顯式或隱式接口,以兼容需要直接操作資源的API,同時維持資源的安全管理。 ?? 1. 原始資源訪問的必要性 使用場景示例&#x…

Linux 進程管理與計劃任務設置

Linux 進程管理與計劃任務設置一、進程管理進程管理用于監控、控制系統中運行的程序(進程),包括查看進程狀態、調整優先級、終止異常進程等。以下是核心命令及操作說明:1. 常用進程查看命令(1)ps&#xff1…

MYSQL數據庫之索引

1、引入索引的問題在圖書館查找一本書的過程,可類比數據庫查詢場景。在一般軟件系統中,對數據庫操作以查詢為主,數據量較大時,優化查詢是關鍵,索引便是優化查詢的重要手段 。2、索引是什么索引是一種特殊文件&#xff…

ArcGIS以及ArcGIS Pro如何去除在線地圖制作者名單

問題:ArcGIS和ArcGIS Pro提供了許多在線地圖服務,但是這些地圖會自動生成制作者名單,如下圖所示: 在線地圖加載方式可參考:如何在ArcGIS和ArcGIS Pro中添加在線底圖 這在出圖時有時會造成圖的部分信息遮擋或出圖不美觀…

InfluxDB 與 Golang 框架集成:Gin 實戰指南(二)

四、實際應用案例4.1 案例背景某智能工廠部署了大量的物聯網設備,如傳感器、智能儀表等,用于實時監測生產線上設備的運行狀態、環境參數(如溫度、濕度)以及生產過程中的各項指標(如產量、次品率)。這些設備…

Linux系統磁盤未分配的空間釋放并分配給 / 根目錄的詳細操作【openEuler系統】

選擇 Fix 修正 GPT 表 輸入 Fix 并按回車,parted 會自動: 擴展 GPT 表的 結束位置 到磁盤末尾。釋放未被使用的空間(1048576000 個 512B 塊,約 500GB)。 驗證修正結果 修正后,再次運行: parted …

王道考研-數據結構-01

數據結構-01視頻鏈接:https://www.bilibili.com/video/BV1b7411N798?spm_id_from333.788.videopod.sections&vd_source940d88d085dc79e5d2d1c6c13ec7caf7&p2 數據結構到底在學什么? 數據結構這門課他要學習的就是怎么用程序代碼把現實世界的問題給信息化&…

k8s云原生rook-ceph pvc快照與恢復(上)

#作者:Unstopabler 文章目錄前言部署rook-ceph on kubernets條件Ceph快照概述什么是PVC安裝快照控制器和CRD1.安裝crds資源2.安裝控制器3.安裝快照類前言 Rook 是一個開源的云原生存儲編排器,為各種存儲解決方案提供平臺、框架和支持,以便與…

springcloud04——網關gateway、熔斷器 sentinel

目錄 注冊中心 nacos | eurekaServer |zookeeper(dubbo) 配置中心 nacos | config Server 遠程服務調用 httpClient | RestTemplate | OpenFeign 負載均衡服務 ribbon | loadbalancer 網關 zuul | gateway 熔斷器 hystrix | sentinel 網關 sentinel 流控 壓測工具 1…

XSS跨站腳本攻擊詳解

一、XSS攻擊簡介跨站腳本攻擊的英文全稱是Cross-Site Scripting,為了與CSS有所區別,因此縮寫為“XSS”由于同源策略的存在,攻擊者或者惡意網站的JavaScript代碼沒有辦法直接獲取用戶在其它網站的信息,但是如果攻擊者有辦法把惡意的…

Linux /proc/目錄詳解

文章目錄前言文件說明注意事項前言 在 Linux 系統中,/proc 目錄是一個特殊的虛擬文件系統,它提供了對系統內核和進程的訪問。/proc 目錄中的文件和目錄不是真實存在的,它們是在運行時由內核動態生成的,用于提供系統和進程的相關信…

北斗變形監測在地質災害監測中的應用

內容概要 北斗形變監測系統在地質災害監測領域發揮著核心作用,該系統基于北斗衛星導航技術,實現對地表變形的精確追蹤。通過毫米級精度定位能力,北斗形變監測技術為滑坡等災害提供關鍵數據支撐,尤其在偏遠地區應用中,單…

2025新征程杯全國54校園足球錦標賽在北京世園公園隆重開幕

2025年8月1日,備受矚目的2025新征程杯全國54校園足球錦標賽(北京)在北京世園公園盛大拉開帷幕。開幕式上,中國關心下一代健康體育基金會副秘書長、中國青少年研究會理事、全國 54 校園足球人才培養計劃創始人何占強主任表示&#…

分類預測 | Matlab實現CPO-PNN冠豪豬算法優化概率神經網絡多特征分類預測

分類預測 | Matlab實現CPO-PNN冠豪豬算法優化概率神經網絡多特征分類預測 目錄分類預測 | Matlab實現CPO-PNN冠豪豬算法優化概率神經網絡多特征分類預測分類效果基本介紹程序設計分類效果 基本介紹 1.Matlab實現CPO-PNN冠豪豬算法優化概率神經網絡多特征分類預測,運…

機器學習——邏輯回歸(LogisticRegression)的核心參數:以約會數據集為例

理解 LogisticRegression 的核心參數:以約會數據集為例 邏輯回歸(Logistic Regression)是機器學習中一種基礎且重要的分類算法,特別適用于解決二分類和多分類問題。本文將基于 sklearn.linear_model.LogisticRegression 的用法&a…

深入解析 Apache Flink FLIP-511:優化 Kafka Sink 事務處理,減輕 Broker 負載

一、 背景與核心問題:Kafka Sink 事務的痛點 Flink Kafka Sink 在 Exactly-Once 模式下依賴 Kafka 事務來確保數據寫入的原子性,并與 Flink 檢查點對齊。然而,非優雅關閉(如任務失敗、非 stop-with-savepoint 的停止)會…

設計模式:組合模式 Composite

目錄前言問題解決方案結構代碼前言 組合是一種結構型設計模式,你可以使用它將對象組合成樹狀結構,并且能像使用獨立對象一樣使用它們。 問題 如果應用的核心模型能用樹狀結構表示, 在應用中使用組合模式才有價值。 例如, 你有兩…