天天看點

關于 DAL層

 我是今年上半年在做DNN項目的時候才聽說DAL的(資料處理層),而關于資料處理層的概念,在很早以前就知道了。

和其他很多概念一樣,我雖然是知道它們的存在,但是在寫代碼的時候,仍然是糊裡糊塗,很多時候,我都不知道為什麼這段代碼要這麼寫?似乎寫代碼的思路是在跟着業務流走,業務流怎麼執行,我就怎麼寫,這便是我的第一判斷。至于那些設計模式和層的概念,早就被抛在腦後了。這是我的煩惱。

今天,有一段代碼,在同僚的提示下,我對DAL的了解又有了新的了解。這實際上是一個bug,呵呵:

//這個方法就是DAL裡面的方法

private void UpdateLog(long logID, string title, string Initials, ...)

{

    //這個方法在執行的時候,實際上沒有對Initials字段進行更新操作,這就是bug;

}

當我把這個方法報告給我的同僚的時候,我的建議是從參數清單中去掉Initials,原因很簡單,因為在業務邏輯中規定,Initials資料一旦建立不能被更改。但是我的同僚立即決定在這個方法中加上對Initials字段的指派,他說用戶端在處理Initials的時候,已經限制了對Initials資料的編輯。

後來我思考了一下,他的這個做法是完全正确的。因為這個方法是資料處理層中的方法,它要做的隻是處理資料。但是後來我又思考了一下,僅僅做出這樣的結論是沒有意義的。因為我的判斷的結果也是在處理資料。是以後來我又添加了一個條件:DAL中,不要包含業務邏輯,比如,我剛才的那個判斷就把對業務邏輯的放進去了。

我覺得我們之是以要把各種邏輯分開,除了我們涉及的系統越來越複雜之外,還有很多技術可以支援資料的攫取。在這裡,我之是以用“攫取“一詞,是因為目在DAL一層的架構有很多,比如hibernate,subsonic等等。我覺得他們的出現,實際上隻有一個目的,就是讓業務邏輯和資料庫之間的gap越來越小。

不過對于我自己來說,還有很長的路要走呀!