MVC框架與三層架構

来源:https://www.cnblogs.com/progor/archive/2018/08/10/9456983.html
-Advertisement-
Play Games

MVC框架 介紹: MVC全名Model View Controller Model:模型的意思,代表業務模型 View:視圖的意思,代表用戶界面 Controller:控制器的意思,控制器接受用戶的輸入並調用模型和視圖去完成用戶的需求。 MVC把各個層次需要關註的內容分離了開來。 MVC將負責顯示 ...


MVC框架

介紹:

  • MVC全名Model View Controller
    • Model:模型的意思,代表業務模型
    • View:視圖的意思,代表用戶界面
    • Controller:控制器的意思,控制器接受用戶的輸入並調用模型和視圖去完成用戶的需求。
  • MVC把各個層次需要關註的內容分離了開來。
    • MVC將負責顯示數據的層次稱為視圖。View視圖主要負責向用戶顯示數據。它負責與用戶交互。
    • 視圖負責與用戶進行交互,用戶可以在視圖中進行數據交互,視圖中接收到數據之後,控制器負責封裝數據,根據業務來調用不同的業務模型去處理;模型接受到控制器發來的數據後,處理業務。

例子闡述:

  1. 用戶在web頁面中輸入了賬戶和密碼來進行餘額查詢操作(View)
  2. 視圖封裝數據傳遞給控制器,控制器識別出這是一個“查詢餘額”的業務請求。(View->Controller)
  3. 控制器識別出這是一個“查詢餘額”的業務請求之後,控制器繼續封裝數據,調用“查詢餘額”的業務模型來處理(Controller->Model)
  4. 業務模型接受到控制器傳來的數據,進行資料庫交互,查出餘額,返回結果給視圖(Model通常會把數據封裝到對象當中),視圖將業務模型返回過來的數據顯示出來。(Model->View)【這裡有時候需要更改視圖的界面,比如你點擊查所有用戶,會跳轉到一個新視圖用來顯示用戶列表。這裡的視圖改變依賴於視圖解析器 ,視圖解析器會根據結果來進行不同的視圖選擇,有時候這個結果是模型給的(動態頁面),有時候是控制器給的(靜態頁面)。】

註意:

  • 視圖雖然是一個“交互界面”,但它很多時候都是基於對象模型來創建的,比如一個註冊界面,很多時候註冊頁面的文本框的name屬性都要與業務模型中的數據進行對應,這樣可以很輕易地將數據封裝起來。

三層結構:

介紹:

應用程式架構可以分為三個層次:表現層、業務層、持久層。

  • 表現層:(頂層)表現層負責用戶界面的顯示,並且負責幫助用戶向業務層提交業務邏輯處理請求,通常還負責將業務層發來的處理結果顯示到界面中。
  • 業務層:(中間層)業務層負責處理業務邏輯,它可以根據不同的業務來調用不同的代碼來處理。
  • 持久層:(底層)持久層負責向一個或多個資料庫中讀取或寫入數據。通常用來給業務層的業務邏輯處理提供數據。這個層次通常必須包括業務實體模型。

例子闡述:

以一個例子來談三個層次的作用:

  • 用戶訪問了某個網站的頁面,這個頁面上有各種各樣的功能(如果只是靜態的頁面的話,還不算表現層)
  • 用戶點擊某個按鈕,向伺服器提交請求(表現層->業務層)
  • 伺服器接收到請求,分析請求,調用對應的邏輯處理程式來處理請求(業務層)
  • 如果用戶發起的業務請求是一個與資料庫相關的業務,對應的邏輯處理程式調用資料庫交互邏輯來讀取/寫入數據(業務層->持久層)
  • 資料庫交互邏輯通過程式的配置信息來與資料庫進行交互,讀取/寫入數據後,返回結果。(持久層->業務層)【如果這個資料庫交互邏輯處於某個業務處理邏輯當中,那麼這時候就不算持久層,每個層次的功能都是獨立的。】
  • 業務邏輯處理程式接收到資料庫交互邏輯程式返回的數據,進行數據處理,然後返回到用戶的界面上。(業務層->表現層)
  • 伺服器根據請求將數據顯示到網頁中,然後將這個網頁返回給用戶瀏覽器。(表現層)

註意:

  • 每個層次的職能應該是獨立的,否則無法獨立成一個層次。

  • 通常來說,表現層不應該存在業務邏輯處理的代碼,它通常只用來顯示動態數據。


MVC與三層架構的區別

  • MVC與三層架構並不等同,三層架構的三個層次並不與MVC對應
  • 如果要MVC與三層架構做對比的話,MVC就像一個中間件,它囊括了三層架構中業務層的大部分功能,但也涉及表現層(View視圖負責數據的顯示)和持久層(持久層中的實體類與Model模型,但Model比實體類要多出資料庫交互的功能)
  • MVC中Model基本相當於業務層+持久層


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • ie9中ajax請求一般處理程式成功後返回值始終是undefined,在網上找過很多資料,大致意思都是說前後端編碼不一致造成的,但是按照資料上的方案去修改卻發現根本不能解決我的問題,試過好多種方案都不行,最後沒辦法只能自己一點點的摸索找原因,最後發現必須要在後臺指定的地方去設置編碼方式才有效,至於前 ...
  • 何為滾動視差 視差滾動(Parallax Scrolling)是指讓多層背景以不同的速度移動,形成立體的運動效果,帶來非常出色的視覺體驗。 作為網頁設計的熱點趨勢,越來越多的網站應用了這項技術。 通常而言,滾動視差在前端需要輔助 Javascript 才能實現。當然,其實 CSS 在實現滾動視差效果 ...
  • 一、使用文檔自帶的原生API rich-text, nodes屬性直接綁定需要渲染的html內容即可,文檔參見這裡:https://developers.weixin.qq.com/miniprogram/dev/component/rich-text.html 二、使用WxParseData插件, ...
  • 如何實現進度條效果呢 ? 效果:點擊頁面的某個按鈕,彈出一個進度條,然後實時顯示進度,直到任務完成。 思路:頁面裡面有個隱藏的進度條,點擊按鈕後彈出。ajax迴圈請求數據,直到全部完成 難點:ajax的同步請求問題 1、首先引入頁面樣式: 2、頁面 進度條 HTML 元素 3、JS 實現 定義全局的 ...
  • 規則就是,調用函數,放兩個參數,第一個參數,是設計稿的寬度,第二個參數是px與rem的轉換比例,通常會寫100(因為好算);當然了,要把這段js代碼最好封裝在一個單獨的js文件里,並且放在所有的css文件引入之前載入。 其中 var n=t.clientWidth||320;n>720&&(n=72 ...
  • 初學前端js經常搞不清楚null與undefined的區別,他們是js中的原始數據類型 1、undefined數據類型只有一個值undefined,當聲明的變數未初始化時,變數的預設值是undefined. 2、null也只有一個值null,用來表示尚未存在的對象,常用來表示函數企圖返回一個不存在的 ...
  • obj =["34", "3", "34#add"] 數組,id 與樹形的所有id 一致 ...
  • 1、DOM操作: DOM操作分為三類: ●DOM Core:任何一種支持DOM的編程語言都可以使用它,如getElementById()、getElementsByName; ●HTML-DOM:用於處理HTML文檔,如document.forms; ●CSS-DOM:用於操作CSS(獲取和設置st ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...