1. 程式人生 > >MVC的設計與實現(改進)

MVC的設計與實現(改進)

MVC是web開發中常見的程式結構。

簡單的mvc結構如下:

view層:顯示層。

control層:業務層,集合了各種action。

model層:模型層,一般和資料打交道。簡單的sample:一個表對應一個model類。

其中control層呼叫model層的方法,實現對資料的訪問。

採用這樣的結構在一定程度上,可以做到程式碼清晰,較容易擴充套件,程式碼的管理複雜度較低。

但是如果是業務很多,邏輯又很複雜的網站,如果再加上開發人員的水平參差不齊,那必然會導致下面的情況:

1action中的程式碼越來越長,邏輯越來越複雜,不同action之間看起來有很多可以重用的程式碼, 但是真要進行重構的話,又非常困難。

2model層中包含的方法越來越多,有些方法也過於複雜。甚至在不少方法中還包含了業務邏輯。

3程式碼的修改,還是牽一髮而動全身。

4程式碼難以進行自動化測試。

本來以為引入了mvc,程式的管理複雜度問題就高枕無憂了,但現在又面臨了相同的問題了。

以我最近的所學看,在mvc中再引入service層,可以在很大程度上避免或者緩解上述問題。

原有的mvc結構改成如下:

1view層:顯示層。

2control層:業務層,集合了各種action。

3service層。

4DAO層。

原來的model層不見了,增加了service層和DAO層。DAO,即Data Access Object,資料訪問介面,資料訪問:顧名思義就是與資料庫打交道。

在這個結構中,control不直接和DAO聯絡,

需要操作資料的時候,通過service層訪問DAO層來實現。

service層做的事情,不僅僅是呼叫DAO操作資料,還會包含了一定的業務邏輯。整個程式的設計,也變成了針對服務進行設計。

這樣做的好處是:

1control層中的action得以精簡,因為action中的一些邏輯,被重構成一個個的服務。而不同的action也可以重用服務了

2只負責和資料打交道的DAO層,相比之前的model層,也得以精簡(DAO層儘量只做最原子的資料操作,不同資料操作之間的聯絡,這邊不考慮,那是service層的事情)。

3service層可以實現很大程度上的程式碼複用,程式的功能封裝更清晰了。

4由於service層更加清晰的定義了應用程式的邊界,那麼對於各個service函式(對應某個服務/應用),要做到自動化測試就方便多了。WEB程式如何做到能方便的進行單元測試,這是一直困擾我的難題,這樣的設計似乎真的可行了~

5開發人員的工作分配,理論上真的可以按層次劃分了。只是理論上~

同時,這樣的設計模式也是存在一定的缺點的:

層次太多,剛接觸的開發人員理解起來比簡單的mvc結構費時;

service層的設計需要一定的功力,因為action中和model層的邏輯在很大程度上轉移到這裡了。

但整體上看,service Layer的引入,更加清晰的定義了應用程式的邊界,提供了一系列可以重用的操作集合。這對於網站的可擴充套件性和可維護性是非常有幫助的。

當然,如果網站的業務邏輯並不複雜,完全沒必要用這樣的設計。過度設計是萬惡之源~ 物件的呼叫流程:JSP—Action—Service—DAO—Hibernate—資料庫

相關推薦

MVC設計實現改進

MVC是web開發中常見的程式結構。簡單的mvc結構如下:view層:顯示層。control層:業務層,集合了各種action。model層:模型層,一般和資料打交道。簡單的sample:一個表對應一個model類。其中control層呼叫model層的方法,實現對資料的訪問

模型類的設計實現

介紹 傳遞數據 規則 添加 play using ota 實體類 重要 實體類是現實實體在計算機中的表示。它貫穿於整個架構,負擔著在各層次及模塊間傳遞數據的職責。 一般來說,實體類可以分為“貧血實體類”和“充血實體類”,前者僅僅保存實體的屬性,而後者還包含一些實體間的關系與

Redis 設計實現

check 就會 鍵值 鍵值對 是否 second 變化 write 次數 RDB 持久化  一、生成RDB   cmd:SAVE --阻塞進程,執行完,才能有效接收客戶端命令。   cmd: BGSAVE --非阻塞,開啟子進程保存。           客

hadoop雲盤client的設計實現

white 下一跳 -c 文件 。。 edi track ++ ava 近期在hadoop雲盤client項目。在做這個項目曾經對hadoop是一點都不了解呀,在網

Redis 設計實現 --多機數據庫的實現

緩沖 所有 moved 啟動 tin 當前 body ica red 多機數據庫的實現 一、復制   slaveof 主服務器ip地址。形成主從關系。   1、同步       從向主服務器發送sync命令。     主服務器收到sync命令執行bgsav

Redis 設計實現 --事務

實現 標識 AC redis 服務 監視 不執行 get 狀態切換 事務 *ACID,指數據庫事務正確執行的四個基本要素的縮寫。包含:原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、持久性(Durability) redis

Redis 設計實現 --排序、慢查詢日誌、監視器

監視 strong add 2.4 bsp log 格式 sadd 請求 一、排序 SORT <key> 對一個數字值的key進行排序 1、alpha 對字符串類型的鍵進行排序 2、asc / desc   redis 默認升序排序asc

認證鑑權API許可權控制在微服務架構中的設計實現

引言: 本文系《認證鑑權與API許可權控制在微服務架構中的設計與實現》系列的完結篇,前面三篇已經將認證鑑權與API許可權控制的流程和主要細節講解完。本文比較長,對這個系列進行收尾,主要內容包括對授權和鑑權流程之外的endpoint以及Spring Security過濾器部分踩坑的經歷。歡迎閱讀本系列

認證鑑權API許可權控制在微服務架構中的設計實現

引言: 本文系《認證鑑權與API許可權控制在微服務架構中的設計與實現》系列的第三篇,本文重點講解token以及API級別的鑑權。本文對涉及到的大部分程式碼進行了分析,歡迎訂閱本系列文章。 1. 前文回顧 在開始講解這一篇文章之前,先對之前兩篇文章進行回憶下。在第一篇 認證鑑權與AP

Linux核心設計實現1--核心開發的特點

1. 核心程式設計時既不能訪問C庫也不能訪問標準的C標頭檔案        其中的原因有很多種。其一,C標準庫的很多函式實現都是基於核心實現的,這核心編譯的時候都還沒有核心,所以就不存在這些函式,這個就是先有雞還是先有蛋這個悖論。其二,其主主要的的

中小型園區網路的設計實現

寫論文第二天 想要用心去寫一篇論文,首先要讀懂論文的要求   根據論文指導找出詳細的思路(論文的基本要求) 思路:①中小型區域網,500-1000臺計算機組成的一個網路。 ②網路型別是“園區網”,包括企業網、校園網等多種形式。園區網有一定的地理分佈範圍,不要簡單的一個辦

中小型園區網路的設計實現

在職本科臨近畢業,論文是躲不掉的。 謹此來記錄畢業論文的完成過程。 論文大綱 部分雖然已經交上去很多日了。但是個人覺得有必要寫到第一篇裡,以示論文過程的完整。 先聊一下寫論文大綱的思路。 第一,首先論文是需要有專案背景的,就像做一件事情要有個目的。說仔細點就是某項工作需要交

lua設計實現資料型別

lua中的資料型別 //lua.h /* ** basic types */ #define LUA_TNONE (-1) #define LUA_TNIL 0 #define LUA_TBOOLEAN 1 #define LUA_TLIGHTUSERD

OpenStack設計實現訊息匯流排AMQP

在西方有一句諺語,叫做“Don’t Reinvent the Wheel!”。直譯過來就是不要在重新發明輪子了。也就是說我們應該避免做一些重複性的工作,如果一個東西別人已經做過了,那麼我們拿來直接用就行了,沒有必要重新制作,這一點在軟體開發裡尤為突出。所以在Op

OpenStack設計實現RESTful API和WSGI

在上一篇部落格中我們提到過,OpenStack每個專案內部的服務程序之間是通過訊息匯流排來通訊的,而在各個專案之間則是通過RESTful API來進行通訊的,在這一篇部落格中,我們就來詳細的討論一下OpenStack各個專案之間的通訊。 一、什麼是RESTfu

OpenStack設計實現虛擬化

雲端計算的一個核心思想就是在伺服器端提供集中的物理計算資源,這些計算資源可以被分解成更小的單位去獨立地服務於不同的使用者,也就是在共享物理資源的同時,為每個使用者提供隔離、安全、可信的虛擬工作環境,

自動升級系統OAUS的設計實現 附最新原始碼

private void button1_Click(object sender, EventArgs e) { int changedCount = 0; int addedCount = 0; List<FileUnit&g

自動升級系統的設計實現原始碼

  對於PC桌面應用程式而言,自動升級功能往往是必不可少的。而自動升級可以作為一個獨立的C/S系統來開發,這樣,就可以在不同的桌面應用中進行復用。基於的檔案傳送功能,我實現了一個可直接複用的自動升級系統OAUS,現在將其分享給大家。這篇文章將著重介紹OAUS的相關背景、使用方法,至於詳細的實現細節,大家可

快取伺服器設計實現

本文講快取中的內容管理–檔案的刪除。 基本原理 快取系統中的檔案,從無到有是被動產生的。初始狀態,快取系統中是空的,請求過來之後,快取會回源取,然後存在本地。而不像web伺服器,檔案是通過其他的手段(傳統的是通過ftp上傳)來建立的,這個建立檔案

ssm許可權管理的設計實現

介紹:          畢業設計要做一個許可權管理系統,自己查了些資料,看了些不同的前臺框架,選單的同異步載入,資料庫設計也大不相同。蕩了兩個相關的專案,一直在讀程式碼。不知道怎麼下手,現在基本明白程式碼流程,自己前後臺略懂,這個模組又不大,說的不詳細的可以搜一下,很容