分工的模式思考
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();
這樣的話,不管物件如何實作,初始化的方式就可以統一,來達到分工的目的。
不過,這樣又產生了另一個問題,初始化的方式因為是使用字串,所以失去了一些檢核,造成需要在這部分留心,避免程式的錯誤。