今天突然想到分層的問題,可能有的晚了,不過問題可能不是很嚴(yán)重,因?yàn)槲业臄?shù)據(jù)訪問很多都是在一個(gè)類里面實(shí)現(xiàn)的。
為了搞明白分層的涵義,瀏覽了一些資料,把其中的一些摘錄如下:
一篇好文章:用MS.NET開發(fā)三層結(jié)構(gòu)應(yīng)用程序
1、推薦的實(shí)例:PetShop、Dowamish
2、
不用想得這么復(fù)雜,說白了,三層架構(gòu)就是
cs文件是其中一層
不在CS文件中直接操作數(shù)據(jù)庫,把所有操作數(shù)據(jù)庫的語句都寫成類,這個(gè)類文件又是其中一層,
SQL server的東西(如存儲(chǔ)過程等)又是一層
3、
依我認(rèn)為,這樣比較清晰,不必搞得這么復(fù)雜。
1、新建一個(gè)項(xiàng)目。
2、添加,新建項(xiàng)目,類庫。(需要多少層就建多少次)
在需要引用的地方加上using即可。
4、
“三層結(jié)構(gòu)”一詞中的“三層”是指:“外觀層”、“中間層”、“數(shù)據(jù)庫層”。其中:
外觀層:位于最外層,直接呈現(xiàn)在用戶面前。用于顯示數(shù)據(jù),并為用戶提供一種交互式的界面。
中間層:負(fù)責(zé)處理用戶輸入的信息,或者是將這些信息發(fā)送給數(shù)據(jù)庫層進(jìn)行保存,或者是調(diào)用數(shù)據(jù)庫層中的函數(shù)再次讀出這些數(shù)據(jù)。
數(shù)據(jù)庫層:僅實(shí)現(xiàn)對(duì)數(shù)據(jù)的保存和讀取操作。
通俗點(diǎn)說:一個(gè)“三層結(jié)構(gòu)”的Web應(yīng)用程序,就象是公司生產(chǎn)線。
WebUI(Web User Interface Layer)就像是公司的經(jīng)理,他負(fù)責(zé)洞察市場(chǎng)趨勢(shì),決策產(chǎn)品的生產(chǎn)。并根據(jù)市場(chǎng)籌策下一步計(jì)劃。
BLL(Business Logic Layer)就像是公司的管理員,他主要負(fù)責(zé)管理下層員工,傳達(dá)上級(jí)布置的生產(chǎn)任務(wù)給員工,并將生產(chǎn)結(jié)果反饋給上級(jí)Web。
DA(Data Access Layer)就是公司里的工人,他們主要是負(fù)責(zé)產(chǎn)品的生產(chǎn)裝配工作,并將生產(chǎn)結(jié)果反饋給上級(jí)InterService。他們并不需要知道產(chǎn)品將銷往何處,也不用關(guān)心產(chǎn)品銷量。只要能完成任務(wù),就可以拿到報(bào)酬。
那么我們假設(shè)有一段登錄代碼,則可以這樣處理Web程序,外觀層負(fù)責(zé)接收前臺(tái)頁面的數(shù)據(jù),然后傳給中間層,中間層對(duì)數(shù)據(jù)進(jìn)行處理,比如格式化,防SQL注入等等一些,這樣的數(shù)據(jù)再傳給數(shù)據(jù)訪問層然后與數(shù)據(jù)庫進(jìn)行操作,比如與數(shù)據(jù)庫的用戶名和密碼匹配等等一些代碼。
5、
http://community.csdn.net/Expert/topic/4294/4294668.xml?temp=.8061029
Web 層
Web 層為客戶端提供對(duì)應(yīng)用程序的訪問。這一層是作為 Duwamish.sln 解決方案文件中的 Web 項(xiàng)目實(shí)現(xiàn)的。Web 層由 ASP.NET Web 窗體和代碼隱藏文件組成。Web 窗體只是用 HTML 提供用戶操作,而代碼隱藏文件實(shí)現(xiàn)各種控件的事件處理。
業(yè)務(wù)外觀層
業(yè)務(wù)外觀層為 Web 層提供處理帳戶、類別瀏覽和購書的界面。這一層是作為 Duwamish.sln 解決方案文件中的 BusinessFacade 項(xiàng)目實(shí)現(xiàn)的。業(yè)務(wù)外觀層用作隔離層,它將用戶界面與各種業(yè)務(wù)功能的實(shí)現(xiàn)隔離開來。除了低級(jí)系統(tǒng)和支持功能之外,對(duì)數(shù)據(jù)庫服務(wù)器的所有調(diào)用都是通過此程序集進(jìn)行的。
業(yè)務(wù)規(guī)則層
業(yè)務(wù)規(guī)則層是作為 Duwamish.sln 解決方案文件中的 BusinessRules 項(xiàng)目實(shí)現(xiàn)的,它包含各種業(yè)務(wù)規(guī)則和邏輯的實(shí)現(xiàn)。業(yè)務(wù)規(guī)則完成如客戶帳戶和書籍訂單的驗(yàn)證這樣的任務(wù)。
數(shù)據(jù)訪問層
數(shù)據(jù)訪問層為業(yè)務(wù)規(guī)則層提供數(shù)據(jù)服務(wù)。這一層是作為 Duwamish.sln 解決方案文件中的 DataAccess 項(xiàng)目實(shí)現(xiàn)的
代碼示例:
以下是兩種不同處理路徑的代碼示例:
獲取商品目錄
表示層調(diào)用業(yè)務(wù)外觀層:
productSystem = new ProductSystem();
categorySet = productSystem.GetCategories(categoryID);
業(yè)務(wù)外觀層直接調(diào)用數(shù)據(jù)層:
public CategoryData GetCategories(int categoryId)
{
if ( dsCommand == null )
{
throw new System.ObjectDisposedException( GetType().FullName );
}
return FillCategoryData("GetCategories", "@CategoryId", categoryId);
}
添加定單
表示層調(diào)用業(yè)務(wù)外觀層:
public void AddOrder()
{
ApplicationAssert.CheckCondition(cartOrderData != null, "Order requires data", ApplicationAssert.LineNumber);
ApplicationLog.WriteTrace("Duwamish7.Web.Cart.AddOrder:\r\nCustomerId: " +
cartOrderData.Tables[OrderData.CUSTOMER_TABLE].Rows[0][OrderData.PKID_FIELD].ToString());
cartOrderData = (new OrderSystem()).AddOrder(cartOrderData);
}
業(yè)務(wù)外觀層調(diào)用業(yè)務(wù)規(guī)則層:
public OrderData AddOrder(OrderData order)
{
ApplicationAssert.CheckCondition(order != null, "Order is required", ApplicationAssert.LineNumber);
(new BusinessRules.Order()).InsertOrder(order);
return order;
}
業(yè)務(wù)規(guī)則層調(diào)用數(shù)據(jù)層:
public bool InsertOrder(OrderData order)
{
//此處省略復(fù)雜的處理邏輯
if ( isValid )
{
using (DataAccess.Orders ordersDataAccess = new DataAccess.Orders())
{
return (ordersDataAccess.InsertOrderDetail(order)) > 0;
}
}
else
return false;
}