【架構】分層架構 (Layered Architecture)

一、分層模型基礎理論

![在這里插入圖片描述](https://i-blog.csdnimg.cn/direct/0365cf0bfa754229bdedca6b472bffc7.png
在這里插入圖片描述

1. 核心定義

分層架構(Layered Architecture)模型是一種常見的軟件設計架構,它將軟件系統按照功能劃分為不同的層次,每個層次都有特定的職責和功能,層與層之間存在清晰的依賴關系。這種架構有助于提高軟件的可維護性、可擴展性和可復用性。

常見分層結構

雖然不同的應用場景和系統可能會有不同的分層方式,但比較經典的是分為四層,分別為表示層、業務邏輯層、數據訪問層和數據層。
在這里插入圖片描述分層架構的一個特性就是關注分離(separation of concerns)。在層中的組件只負責本層的邏輯。組件的劃分很容易讓它們實現自己的角色和職責,也比較容易地開發,測試管理和維護。

1. 表示層(Presentation Layer)

定義:也稱為用戶界面層(UI 層),是用戶與系統進行交互的接口。它負責接收用戶的輸入,并將系統的處理結果展示給用戶。
職責:提供友好的用戶界面,處理用戶的請求和操作,如頁面渲染、事件處理等。
實現技術:在 Web 應用中,通常使用 HTML、CSS、JavaScript 等前端技術實現;在桌面應用中,可能使用 JavaFX、Swing(Java)、Windows Forms(.NET)等技術。
示例:在一個電商網站中,商品列表頁面、購物車頁面等都是表示層的一部分,用戶可以通過這些頁面瀏覽商品、添加商品到購物車等。

2. 業務邏輯層(Business Logic Layer)

定義:也稱為領域層,是系統的核心層,負責處理業務邏輯和業務規則。它接收來自表示層的請求,調用數據訪問層獲取數據,進行業務處理,并將處理結果返回給表示層。
職責:實現系統的業務邏輯,如訂單處理、用戶認證、權限管理等。確保業務規則的一致性和正確性。
實現技術:可以使用各種編程語言和框架來實現,如 Java 的 Spring 框架、Python 的 Django 框架等。
示例:在電商系統中,當用戶提交訂單時,業務邏輯層會檢查庫存是否充足、計算訂單總價、生成訂單記錄等。

3. 數據訪問層(Data Access Layer)

定義:也稱為持久化層,負責與數據庫或其他數據存儲系統進行交互,實現數據的增刪改查操作。它將業務邏輯層的請求轉換為對數據存儲系統的具體操作。
職責:封裝數據訪問細節,提供統一的數據訪問接口,提高數據訪問的效率和安全性。
實現技術:使用數據庫訪問技術,如 JDBC(Java)、ADO.NET(.NET)、SQLAlchemy(Python)等。
示例:在電商系統中,數據訪問層負責從數據庫中查詢商品信息、保存用戶訂單信息等。

4. 數據層(Data Layer)

定義:也稱為數據存儲層,負責存儲系統的數據。可以是關系型數據庫(如 MySQL、Oracle)、非關系型數據庫(如 MongoDB、Redis)、文件系統等。
職責:提供數據的持久化存儲,確保數據的安全性和完整性。
示例:在電商系統中,數據層存儲了商品信息、用戶信息、訂單信息等。

在這里插入圖片描述

  • 注意每一層都是封閉的。這意味著Request必須經過每一層才能到達最底下一層。
  • 這就是分層架構的另一個特征:層隔離(layers of isolation)。層隔離的概念意味著你對任何一層的改變都不會影響其它層。一個層的組件并不會了解其它層的實現,或者知道很少。
  • 分層架構也很容易增加新的層。 比如你想將一些通用的服務重構成一個服務層,比如通用圖片處理,遠程賬戶審計等,可以在業務層下增加一個服務層。它不會對展示層造成影響,也不會改變持久層的代碼。
  • 因為每一層丟失封閉的,業務層不得不通過服務層訪問持久層,這沒有天理啊。 所以有時候你會創建一個開放的層。這意味著上一層可以繞過這一層直接訪問下一層。
    在這里插入圖片描述

典型場景包括:

  • OSI網絡模型(物理層→應用層7層結構)
  • J2EE經典分層(Web層→Service層→DAO層)

2. 核心原則

單向依賴:Layer N只能調用Layer N-1(嚴格分層)或更底層(寬松分層)
契約協議:層間通過標準化接口通信(如REST API、RPC接口)
同層自治:每個層級內部實現技術無關性(如DA層可替換MySQL為MongoDB)


二、分層模型技術演進

1. 傳統企業級分層

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

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

相關文章

基于MATLAB的均勻面陣MUSIC算法DOA估計仿真

基于MATLAB的均勻面陣MUSIC算法DOA估計仿真 文章目錄 前言一、二維MUSIC算法原理二、二維MUSIC算法MATLAB仿真三、MATLAB源代碼總結 前言 \;\;\;\;\; 在波達角估計算法中,MUSIC 算法與ESPRIT算法屬于特征結構子空間算法,是波達角估計算法中的基石。在前面…

組學數據分析實操系列 |(四) 富集氣泡圖的繪制

前言:在上一篇中,我們介紹了利用Metascape零代碼實現富集分析,但是Metascape的富集分析結果是以柱狀圖的形式展示的。文章中更常使用的富集結果可視化方式是氣泡圖。氣泡圖可以通過氣泡的坐標、形狀、顏色、大小等來展示更加豐富的富集分析結果&#xff…

實現一個專注應用-后端開發(一)-搭建

搭建后端服務 搭建服務拆分下用戶服務 增加公共庫通用模塊 運行一下接入數據庫安裝Prisma增加prisma庫 redis增加redis服務 搭建服務 使用nestjs來做 這里是nestjs的網站Nestjs 安裝 nest npm i -g nestjs/cli創建一個項目 并在開發工具打開 nest new todonest new xx 是新…

C++17并行化加速STL算法——std::execution

C17 并行化STL算法 文章目錄 C17 并行化STL算法概念環境準備工具類 并行算法 - 使用并行算法 - 執行策略總覽選擇標準詳細介紹順序執行 seq并行化順序執行 par并行化亂序執行 par_unseq 并行算法 - 異常處理可以不使用并行算法并行算法 - 限制并行算法有哪些原有算法17引入新算…

Deepseek 懟CHATGPT實況

提示詞: 用犀利的語言批評ChatGPT 深度思考(R1) 嗯,用戶讓我用犀利的語言批評ChatGPT。首先,我需要理解他們的動機。可能他們遇到了ChatGPT的某些問題,比如回答不準確或者缺乏深度,所以想表達不滿。也有…

always和assign語法區別

always語句可以帶時鐘, 也可以不帶時鐘。 一,assign和always區別 assign 語句使用時不能帶時鐘。 assign a=1; assign b=2; 在always不帶時鐘時,邏輯功能和assign完全一致,都是只產生組合邏輯。比較簡單的組合邏輯推薦使用assign語句,比較復雜的組合邏輯推薦使用 al…

解析跨域:原理、解決方案與實踐指南

解析跨域:原理、解決方案與實踐指南 🌐 在現代Web開發中,跨域問題是一個常見且重要的挑戰。隨著互聯網應用的日益復雜,前端與后端之間的交互越來越頻繁,跨域請求的需求也隨之增加。 一、跨域問題的本質與產生條件 &a…

鴻蒙開發:熟知@BuilderParam裝飾器

前言 本文代碼案例基于Api13。 在實際的開發中,我們經常會遇到自定義組件的情況,比如通用的列表組件,選項卡組件等等,由于使用方的樣式不一,子組件是動態變化的,針對這一情況,就不得不讓使用方把…

MSI微星電腦沖鋒坦克Pro Vector GP76 12UGS(MS-17K4)原廠Win11系統恢復鏡像,含還原功能,預裝OEM系統下載

適用機型:【MS-17K4】 鏈接:https://pan.baidu.com/s/1P8ZgXc6S_J9DI8RToRd0dQ?pwdqrf1 提取碼:qrf1 微星筆記本原裝出廠WINDOWS11系統自帶所有驅動、出廠主題壁紙、系統屬性專屬聯機支持標志、Office辦公軟件、MSI Center控制中心等預裝…

【面試題】杭州士騰科技-面試題匯總

歷史小劇場 歷史是一個好客的主人,卻從不容許客人取代它的位置。歷史也從來就不是一個人或事幾個人可以支配創造的。所謂時勢造英雄,實乃至理名言。 真正支配歷史的人,不是朱元璋,是稻田里辛勤勞作的老農,是官道上來往…

Go入門之map

map類型是引用類型,必須初始化才能使用,為key-value形式 var userinfo make(map[string]string)userinfo["username"] "zhangsan"var user map[string]string{"username": "張三","age": &qu…

切換鏡像源(npm)

常見的npm鏡像源 官方源 URL: https://registry.npmjs.org 淘寶鏡像源(npmmirror) URL: https://registry.npmmirror.com 其他常用鏡像源 URL: https://registry.cnpmjs.org (CNPM) 這里是引用 切換npm鏡像源 切換到官方源 npm config set registry http…

【大模型】DeepSeek 高級提示詞技巧使用詳解

目錄 一、前言 二、DeepSeek 通用提示詞技巧 2.1 DeepSeek 通用提示詞技巧總結 三、DeepSeek 進階使用技巧 3.1 DeepSeek一個特定角色的人設 3.1.1 為DeepSeek設置角色操作案例一 3.1.2 為DeepSeek設置角色操作案例二 3.2 DeepSeek開放人設升級 3.2.1 特殊的人設&#…

Qt開發③Qt的信號和槽_概念+使用+自定義信號和槽+連接方式

目錄 1. 信號和槽概述 1.1 事件和控件 1.2 信號的本質 1.3 槽的本質 2. 信號和槽的使用 2.1 connect 連接信號和槽 2.2 查看內置信號和槽 2.3 Qt Creator 生成信號槽代碼 3. 自定義信號和槽 3.1 不帶參數的信號和槽 3.2 帶參數的信號和槽 4. 信號與槽的連接方式 4…

【動態路由】系統Web URL資源整合系列(后端技術實現)【apisix實現】

需求說明 軟件功能需求:反向代理功能(描述:apollo、eureka控、apisix、sentinel、普米、kibana、timetask、grafana、hbase、skywalking-ui、pinpoint、cmak界面、kafka-map、nacos、gateway、elasticsearch、 oa-portal 業務應用等多個web資…

Vue2 中使用 UniApp 時,生命周期鉤子函數總結

在 Vue2 中使用 UniApp 時,生命周期鉤子函數是一個重要的概念。它允許開發者在特定的時間點運行代碼,管理組件的生命周期。以下是 Vue2 中 UniApp 常用的生命周期鉤子函數總結: 1. beforeCreate 說明: 組件實例剛被創建,此時數據…

在Ubuntu24.04上安裝Stable-Diffusion1.10.1版本

之前曾介紹過在Ubuntu22.04上安裝Stable-Diffusion: 在Ubuntu22.04上部署Stable Diffusion_ubuntu stable dif-CSDN博客 這個安裝我們使用conda python虛擬機。這次我們介紹的是在Ubuntu24.04安裝Stable-Diffusion的最新版本V1.10.1(截止到今天最新版&…

IIS asp.net權限不足

檢查應用程序池的權限 IIS 應用程序池默認使用一個低權限賬戶(如 IIS_IUSRS),這可能導致無法刪除某些文件或目錄。可以通過以下方式提升權限: 方法 1:修改應用程序池的標識 打開 IIS 管理器。 在左側導航樹中&#x…

MongoDB 常用命令速查表

以下是一份 MongoDB 常用命令速查表&#xff0c;涵蓋數據庫、集合、文檔的增刪改查、索引管理、聚合操作等場景&#xff1a; 1. 數據庫操作 命令說明show dbs查看所有數據庫use <db-name>切換/創建數據庫&#xff08;需插入數據后才會顯示&#xff09;db.dropDatabase()…

23種設計模式 - 模板方法

模式定義 模板方法模式&#xff08;Template Method Pattern&#xff09;是一種行為型設計模式&#xff0c;它通過定義算法的骨架&#xff08;固定步驟&#xff09;&#xff0c;允許子類在不改變算法結構的情況下重寫特定步驟。該模式的核心是將通用流程封裝在基類中&#xff…