有极速快乐十分吗|极速快乐十分走势图|

軟件系統架構中的分層思想

關于分層結構
服務器君一共花費了274.221 ms進行了7次數據庫查詢,努力地為您提供了這個頁面。
試試閱讀模式?希望聽取您的建議

眾所周知,經典的三層結構包括數據訪問層、業務邏輯層和表示層。當然,如果繼續擴展下去,還可以分為4層、5層……

我相信很多人都用過,很多人都寫過,但是為什么要這么做,還是有一部分人是不能夠說清楚的,這不是我猜想的,而是遇見過很多想分層但是分的亂七八糟的層次結構。

1. 數據訪問層:

功能描述:處理與數據庫之間的交互,不應對數據做任何業務上的加工。捕獲數據庫交互式出現的異常,拋出或記錄下來。

說明:它的作用就是數據訪問,如果你沒有用其他的類似于ORM的框架,那么這里應該是SQL語句集合地(或者你可以把SQL語句寫在存儲過程中),業務邏輯層和表示層絕對不能出現SQL語句(包括SQL的關鍵字,單引號、百分號、LIKE等都不能出現)。那么如何組合動態SQL語句呢?這應該是最大的一個問題。我見過很多系統在業務邏輯層定義相當多的型參,然后在表示層收集參數數據,傳入業務邏輯層后拼合SQL語句,最后傳入數據訪問層執行操作,分層的概念已經完全沒有意義了。如何解決這個問題呢?最早的強類型數據集、自定義的業務實體,LINQ,或者ORM都可以解決,當然了,這只是他們的一部分功能(其實,我不太愿意用類似于NHibernate的HQL或LINQ)

2. 數據接口層:

功能描述:提供數據訪問層的接口標準、以便于提供多數據庫的支持,即數據庫的隨意遷移。

這里我要提一下數據接口層,我見過有很多項目組在數據訪問層的上面加了一個數據接口層,然后數據訪問層是各個數據接口層的具體實現,但是在業務邏輯層實例化數據層的時候,仍然是實例化到具體的類對象。

IDal_MyClass?dalmyclass?=?new?DAL_SQLClass();

我不知道為什么要這么做,除了增加了工作量,其他的一點意義也沒有。

那么到底需不需要這么數據接口層呢?我認為在做一個支持多數據庫的系統(做產品會多見一些,比如一個CRM系統即可支持SQL?Server,也支持Oracle和MySql)時就要用到數據接口層了,當然,單單一個數據接口層完成不了這個任務,你還要為每一種數據庫單獨做他們自己的數據訪問層,并且使用工廠模式以及依賴注入(比如Castle)技術就可以實現多數據庫的支持了,你可以在產品安裝或者運行時隨便進行數據庫間的遷移。

3. 業務邏輯層:

功能描述:接受從表示層傳過來的數據,做業務上的數據校驗,并實現業務流程,最后,把加工后的數據傳給數據訪問層。

你可以認為在三層之間有兩堵墻,三層之間誰也看不見誰,我只做好我的本職工作,其他的事情我不關心。業務邏輯層應該是設計者最關注的地方,也是設計模式應用最廣泛的地方,業務邏輯層設計的關鍵就是盡量的實現松耦合,如果業務邏輯層中的各個類之間都有調用關系,那這就是一個很糟糕的設計。進一步來說,如果把這些松耦合的功能模塊的接口作為一種服務的模式(比如Web?Service)發布出去,OK,這就是SOA。

4. 業務外觀層:

功能描述:把松散的業務邏輯層內的各個細分功能在這里整合,而后作為一個子系統的統一接口發布出去。這也是設計模式的一種。

業務外觀層應該是對業務邏輯層的進一步封裝。這只有在業務邏輯功能十分繁多但彼此間又有聯系的時候才會有用。我剛才說過了,業務邏輯層盡量要實現松耦合,但是各個業務之間肯定是有聯系的啊,這種聯系起來的工作就要交給業務外觀層。要把有聯系的幾個業務邏輯組合為一個子系統,然后在業務外觀層中實現這種聯系并發布出去。

我見過很多項目有業務外觀層,但業務外觀層的方法僅僅是對業務邏輯層一個方法的封裝。這樣做除了增加工作量,沒有任何好處,還不如直接調用業務邏輯層。

5. 表示層:

功能描述:從用戶控件中取得數據或者從業務邏輯層取得數據后展現出來,不應對取得的數據做任何加工。

在這層要是出現SQL語句那就更不應該了。在WEB項目中,因為效率的原因,很多時候要在客戶端做一些必填項的驗證(其實這也是業務邏輯的一部分),但這是值得的。

知其然,還要知其所以然,分層是有好處的,程序的結構很清晰,便于除錯、便于擴展、也便于閱讀。

本文地址:http://www.bavugt.tw/librarys/veda/detail/1706,歡迎訪問原出處。

不打個分嗎?

轉載隨意,但請帶上本文地址:

http://www.bavugt.tw/librarys/veda/detail/1706

如果你認為這篇文章值得更多人閱讀,歡迎使用下面的分享功能。
小提示:您可以按快捷鍵 Ctrl + D,或點此 加入收藏

閱讀一百本計算機著作吧,少年

很多人覺得自己技術進步很慢,學習效率低,我覺得一個重要原因是看的書少了。多少是多呢?起碼得看3、4、5、6米吧。給個具體的數量,那就100本書吧。很多人知識結構不好而且不系統,因為在特定領域有一個足夠量的知識量+足夠良好的知識結構,系統化以后就足以應對大量未曾遇到過的問題。

奉勸自學者:構建特定領域的知識結構體系的路徑中再也沒有比學習該專業的專業課程更好的了。如果我的知識結構體系足以囊括面試官的大部分甚至吞并他的知識結構體系的話,讀到他言語中的一個詞我們就已經知道他要表達什么,我們可以讓他坐“上位”畢竟他是面試官,但是在知識結構體系以及心理上我們就居高臨下。

所以,閱讀一百本計算機著作吧,少年!

《深入理解計算機系統(原書第2版)》 布萊恩特(Randal E.Bryant) (作者), 奧哈拉倫(David R.O'Hallaron) (作者), 龔奕利 (譯者), 雷迎春 (譯者)

《深入理解計算機系統》從程序員的視角詳細闡述計算機系統的本質概念,并展示這些概念如何實實在在地影響應用程序的正確性、性能和實用性。全書共12章,主要內容包括信息的表示和處理、程序的機器級表示、處理器體系結構、優化程序性能、存儲器層次結構、鏈接、異常控制流、虛擬存儲器、系統級I/O、網絡編程、并發編程等。書中提供子大量的例子和練習題,并給出部分答案,有助于讀者加深對正文所述概念和知識的理解。

更多計算機寶庫...

有极速快乐十分吗
股票涨跌 秒速赛车玩法 白板28加拿大28预测 腾讯阿里巴巴股票行情 大智慧手机炒股安卓版 理财保险可靠吗 上证指数走势图大盘指数 长江润发股票公告 龙湖配资 捉鸡麻将贵阳