2012年6月3日 星期日

自修練功 大雜燴 委派 x 多層式架構 x 介面






如果只是想要打發笅剋扈速度交差了事的話,下面可以都不用看

如果跟我一樣無聊,沒事喜歡亂搞實驗的話就看吧。

 

 

 

 

基本上就是把最近學摸索的委派(還在持續摸索中)跟偉大的願景 - 寫一個多層架構的 符合物件導向概念的 偉大的應用程式 做結合

偉大的願景就跟崇高的理想一樣,輕易的就會被現實的專案時程打敗

但是對於一個燃燒摳頂小宇宙的PG來說,它還是散發著耀眼的光芒

以上廢話

 

 

 

 

UI很簡單長這樣

有五個專案看起來很強大,實際上不會有人這麼幹,但是可以作夢當作不同團隊開發各自的專案再整合

DatabaseAccessLayer 的 介面 IAccessType 定義所有資料存取的方法

類別 TSQL、TypedDataSet、LINQ 都繼承 IAccessType 各自所屬一個專案

這裡可以做夢當作不同團隊都用不同的方式存取資料庫,但是都必須遵守 介面 IAccessType 實作所有屬性方法事件

在程式需要存取資料庫的時候透過 繼承 IAccessType 的物件,來叫用方法取得資料

只是這次的練習很簡陋,所以沒有邏輯層

這次另一個練習重點是委派,分別使用了3種不同的委派寫法

radioButton的選擇決定使用何種委派方法,進而建立負責存取資料庫的物件的實例

或許這看起來很多此一舉,直接在判斷後面把類別指定給物件就好了,根本不必這麼麻煩

這裡可以做夢假設切換的條件是未知的,在某些特殊的情況下才切換,且發生的時機未知而不固定

由於未知且不定,很難明確的靠判斷式來取得實例,因為如果要判斷的條件本身不存在的話,就必須先判斷存在再判斷條件,將會十分複雜

另外委派的幾個好處:

1.當條件發生時再叫用方法

2.對不同狀況只要叫用不同方法即可,只要叫用的方法具有相同的簽名

3.易於擴充及維護(※物件導向概念的精隨)

為什麼易於擴充及維護呢?

舉例來說假如我很神真的全部用判斷式來搞定

但是再怎麼神我要判斷一種模式,勢必要寫一個 if

如果之後多了一種模式,我就必須再加一個 if

這個判斷式會長大!而且會越來越可怕,因為他們彼此間還可能互相關聯高耦合

如果我還沒有封裝這個判斷式,整個程式裡充斥著無數個這種判斷式,恩...你知道的

但是用委派則不必煩惱,面對不同狀況只要叫用不同方法

多了一種模式只要多一個新的方法,其他的無需顧慮

這裡我選擇 IEnumerable 來當回傳值,但是其實這對TSQL類TypedDataSet類是不便的,因為DataTable沒有直接轉換成 IEnumerable 的現成方法

這裡我簡單的用了一個結構來轉換資料來符合 IEnumerable

這裡又能做夢了,可以當作新舊系統用不同的存取方式,但是現在面臨整合並存,先定義明確的介面當規則,然後想辦法在新舊系統上實作這個介面,整體就能運行

雖然對某一方而言是多繞遠路多做工,但是我想沒有人會想要重新寫個系統

Form1.cs

TSQ.cs

TypedDataSet.cs

LINQ.cs

專案檔 資料庫是偉大的北風

題外話,師父曾說過,物件導向就是武林神功,入門容易精通難,但是只要你能夠隨便學個一招半式就能夠走遍天下,學八成就能出師授課,學100%就是新世界的神

沒有留言:

張貼留言