以前一直聽別人說分層的好處,但是自己一直都不是很理解。在這一年的工作裡,我開始對分層有了一種朦胧的認識,以下是我在實際中正在使用的分層結構,以.NET為例(因為工作中使用較多),但不限於.NET(如使用QeePhp,Django都是差不多的結構)
1.程序結構
一共分為Model,DAL,BLL,WebUI,Views 5部分
Model和DAL為數據層,大部分框架的DAL層都與Model聯系在一起(公司的類ORM也是,定義好Model層後,DAL只需要一句話,所以DAL層大多可以忽略)
BLL為業務邏輯層,控制器不直接與數據層打交道(它不知道DAL層的存在),控制器所需要的數據全部由BLL提供(BLL再調用DAL獲得數據)
WebUI為控制器層,它的每個類為一個控制器(Control),類的每個函數為一個動作(Action),訪客每次訪問頁面,其實就是執行Control中的一個Action(大家想一下平時做的web,是否一個頁面的展示其實就是一個函數執行的結果?)
Views,這個就是視圖了,也就是頁面模板(很多做.NET的人不喜歡用模板,這裡只是對於MVC來說的)
2.表現層結構(MVC)
M:就是上面的所說的BLL,為Control提供數據
V:就是Views,頁面需要動態數據的地方,會使用相應的模板引擎標簽替換
C:就是上面所說的WebUI
就.NET來說,BLL,WebUI,都是一個dll類庫,而Views只是一堆html文件,他們是怎樣聯系起來的呢?
(1)M與C的關系
這個簡單,因為屬於同一種語言,他們之間的調用就和平常的類調用一樣
(2)M與V的關系,
完全無關系,V與M都是與C通訊,並不知道對方的存在
(3)C與V的關系
C是一個程序文件(.cs,.php,.py),V是是一個文本文件(.html),兩者是如何聯系的呢?答案是模板引擎(基本每種語言都會有模板引擎,你自己也可以寫一個),我在日常用的是Smarty,NVelocity,一般模板引擎的語法都很簡單,有個for和if循環就差不多了,具體請自己上網查看
現在C可以通過模板引擎找到V,並使用它了,但是如何呈現給訪客看呢?
3.動作調度
前面說過,每個訪客看到的一個頁面都是由後台的一個函數生成的,但是訪客如何通過url找到對應的函數呢。
這個就是動作調度了,每個MVC框架都會自帶的,我大多數看到的有兩種
(1)路由調度
通過配置路由,實現對每個Action的調度,如Django和ASP.NET的MVC
(2)單入口
這個貌似Php比較多(Java沒看過,不清楚),我現在在.NET下用的也是這種。如
Index.aspx?ctl=Test&act=Hello就是調用WebUI下的Test類的Hello函數。
此文僅當作.NET一年總結