由簡單三層到工廠模式

以ASP.NET爲例,簡單三層就是 DAL, BLL,Model 三層構成, DAL層處理數據,負責與數據打交道,比如SQL語句的書寫等,DAL層處理完數據後的結果,交由BLL層,BLL層這時對數據進行邏輯整理。具體如下詳細說明:

 

現有一個簡單的需求,一個訂單裏可能包含幾個產品,這時,我們一般這樣處理,把訂單寫在主表,把具體的詳細商品寫在訂單詳細表,詳細表中有一個主表的ID,用於關聯二表。當用戶下單提交時,處理如下:

 

兩個表設爲 主表Orders, 副表 OrderItem

 

DAL層:寫SQL語句,分別寫兩個方法,一個是插入主表的方法,另一個是插入副表的方法。

 

插入主表Orders

public long Add(ModelOrder model)
{
          ……
}

插入副表OrderItem,語句這裏略掉,這裏只說明思路,不做真實的數據。

public long Add(ModelOrderItem model)
{
          ……
}

這兩個方法,首先執行第一個返回的ID,然後第二個方法要用到這個返回的ID,那麼這個邏輯處理就在BLL層裏來處理了,這樣寫:

//插入主表後返回的ID
long id = DAL.Add(model);
//如果執行成功,說明ID>0
if(id>0)
{
	DAL.Add(model);
}


這個方法執行完,再返回到頁面層級結果。

 

注意:其實上面的業務層處理嚴格的說寫的不正確,爲什麼呢?設想我們插入主表成功了,但返回ID後,插入副表的時候,出錯了,沒有插入,那麼就會造成數據庫裏只保存了訂單信息,但沒有訂單詳情信息。如何解決呢?自然我們會想到了事務,一旦出現上述情況,使用事務時,數據庫會回滾,就是第二步出錯了,那麼第一步也會撤消。


using (SqlTransaction transaction = connection.BeginTransaction()){}

當然,這就個就要寫在DAL層裏了,在DAL層裏把各個的添加方法寫好了,然後在寫一個方法,這個方法就是把各個方法加到事務中去,如果有一條語句執行時出錯,則事務回滾,等於沒有操作。

 

這基本上是一個簡單三層的形象的最簡單的介紹,那麼簡單三層有時候不能滿足我們需要,比如說,你是一家軟件公司,那麼你開發了一個軟件,用的SQLServer,而剛好碰到一個客戶需要使用oracle,或是mysql,怎麼辦?當然,你也可以改,但是改的東西多了,最起碼整個數據層都要被你扒了一遍了,而有一種方法基本不用怎麼修改就可以達到需求,那就是工廠模式。

 

簡單介紹:使用工廠模式,面向接口的編程,把數據層和業務層使用接口來交接,面向接口,不面向具體的實現,只要操作接口,實現變了也無所謂。


首先我們還是定義SQLServerDAL,BLL,Model三層,這次我們把DAL與BLL不直接進行交互了,中間插入一個IDAL接口層,這個接口負責與BLL通信,

BLL通過工廠反射等創建接口IDAL,


private readonly IOrderAction dal = DAOrder.CreateOrderAction();

SQLServerDAL只需實現IDAL即可,

public partial class Orders:IOrders

如果某一天你想換數據庫,只需加相應的接口實現即可。

比如添加一個OracelServerDAL等

或是你提前把全部的數據層寫好SQLServerDAL,OracelServerDAL,MySqlServerDAL……要哪個用哪個

當然,工廠模式帶來的好處也絕不僅僅是上述這點功勞。


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章