分工的模式思考

分工的模式思考

ASP.NET的網頁程式設計可以分成三個部分,UI、Logic、DataAccess。

在架構規畫上,我保持一個原則是在UI只要處理畫面上的內容資訊,在Logic上處理程式流程,而在DataAccess則處理資料連結。

這樣的情形下,基本上會分出三個類別,分別對應這三個部分。

而每個部分的程式碼大致上都會是產生對應物件,執行其方法。

像UI使用Logic,

var obj = new LogicObject();

obj.DoSomething();

而Logic使用DataAccess的程式碼就會像,

var da = new DataAccessObject();

da.SaveSomething();

這樣的架構在實作上遇到了些問題,沒辦法有效地切割這三個部分來分工撰寫,寫Logic的人會需要DataAccess的定義資訊,而UI則需要Logic的定義資訊。

因此,想到了一個構想來解決這樣的問題,

我希望當UI使用Logic的時候可以像這樣使用,

var logic = LogicFactory.CreateLogic(xxx);

logic.DoSomething();

並且希望Logic使用DataAccess也是如此,

var dataAccess = DataAccessFactory.CreateDataAccess(yyy);

dataAccess.CRUD();

這樣做的話,可以統一物件的使用方式,讓這三個部分可以分工,不過,這樣的情形下,資料該如何傳遞變成了一個問題,

因為要達成這個目的,需要定義出泛用的界面來介接這三個部分,但是,每個UI所看到的資料並不相同,每個Logic所處理的資料也不同,同樣地,

DataAccess也是如此,而泛用的界面無法預知將會需要那些資料。

我所想到的是,利用一個方法來初始化物件所需資料,像,

var logic = LogicFactory.CreateLogic(xxx);

logic.AddPropertyValue("PropertyName", value);

logic.DoSomething();

這樣的話,不管物件如何實作,初始化的方式就可以統一,來達到分工的目的。

不過,這樣又產生了另一個問題,初始化的方式因為是使用字串,所以失去了一些檢核,造成需要在這部分留心,避免程式的錯誤。