這幾年俺主要做Business Logic layer,特痛恨做Presentation layer,因為受不了一天到晚把控件挪來挪去的痛苦。特高興把數據以xml格式送給做presentation的兄弟,看他痛苦
Business Logic總是要和database打交道的。俺主要是用Microsoft的Enterprise Library,感覺它的Database library 即滿足了一定的封裝性,又非常的靈活,比方說,不返回數據,返回一個標量,返回幾個數據,返回DataSet等等。
兩年前的一個項目中,一個兄弟覺得這不是個好的Design,生生做了一個Database layer,定義了一個Interface,每次調用數據庫之前先填充好Interface中的定義,然後再提交,由他的Database layer 調用Enterprise Libary。
於是俺們就有一個漂亮的設計:Presentation/Business Logic/Data Access/Database。可是調用數據庫不靈活,那位兄弟只好不斷改他的code。最後bug一堆,俺一直跟蹤到他的code裡面才發現問題。
後來俺發現,其實那個Data Access也不做什麼事情,直接就調用Microsoft的Database Library了。大量的工作是實現那個破數據接口 (Interface),搞的做Business Logic 的兄弟不爽。
俺想問問各位xdjm,用Enterprise Library裡的Database Library 是不是已經足夠了,還是各位都創建自己的Database Access Layer?
說明一下,Database Library 提供了大量的Method來存取數據。那位封裝Data Access的兄弟想簡化合並這些Method,於是帶來了bug和不靈活。
David007 寫道: |
說明一下,Database Library 提供了大量的Method來存取數據。那位封裝Data Access的兄弟想簡化合並這些Method,於是帶來了bug和不靈活。
|
就像不應該重寫C++庫提供的函數一樣,以一己之力質疑和試圖“封裝”大型成熟商用SDK的作法似乎不太明智。
另外,微軟從MFC時代就開始將設計模式引入到SDK中,他們現在的產品肯定都是經過良好設計的。如果那位兄弟的設計水准沒有達到“I wrote the book”級別,最好不要重新設計他們的SDK。不過有一個例外情況:如果微軟的SDK對於你們的應用過於龐大和復雜,可以用Facade解決——不知道那位兄弟是不是出於這個目的和這樣設計的。
自己寫DAO不是很流行了吧
現在不是流行hibernate這樣技術了?
所以,要麼自己寫sql。改什麼就改sql
要麼用hibernate, data library這樣的技術,省心點算了。
隨便一說
小系統自己寫DAO還行,方便不用設一堆東西,大中型系統還是用hiebernate,top-link之類的JPA成型的東西,省很多事;要不搞幾台高性能數據庫服務器,直接寫sql,其實性能上也差不了太遠
小丹尼 寫道: |
自己寫DAO不是很流行了吧
現在不是流行hibernate這樣技術了?
所以,要麼自己寫sql。改什麼就改sql
要麼用hibernate, data library這樣的技術,省心點算了。
隨便一說
|
同意。不過我一般盡可能不把邏輯寫道stored procedure裡去,因為SQL難維護。
我的stored procedure盡可能只做insert/update/delete,邏輯搬到Business Layer裡去
再補充說明一下,數據存取層不是DAO,實際上數據存取層就是調用ADO.NET 來存取數據。
在一個大型的系統中,用C#的Interface定義數據層接口,使得接口統一化,好處是有的,只是覺得受限制。