解決過的問題備忘錄 (外部記憶體?)

2008年12月18日 星期四

ASP.NET C# ADO.NET的Type, Provider, Service的做法與觀念(目前還處於我猜測的階段)

Type class內宣告instance variables跟其accessors

Provider class內放資料的CRUD oprations,傳入參數而非透過O/R mapping來操作的話,這些oprations應該宣告成static,也就是class method。

舉例來說,假設有兩個物件,作者跟書
Authors (id, name, gender) // 編號,姓名,性別
Books (id, author_id, title, subtitle, published_at) //編號,作者FK,標題,副標題,出版日

要更新書籍時,透過Books的provider進行以下動作:

...BooksService.Make().Update(modified_row);


beyound_java.Update(modified_row) // beyound_java是一個books物件
都是不好的,

前者不符合LoD,只跟親近的朋友溝通,或稱最少知識原則。
後者有可能產生不make sense的狀況,看看下列的語法

beyound_java.Update(3, 4, "better faster and lighter java", null, null) // beyound_java是一個books物件

竟然由beyound java這本書去更新另一本書的資料,這很詭異,正常的作法應該是所謂「上系統」去修改資料,所以我目前認為這些oprations宣告成class method會比較合理一點。

至於service,其實可以不必存在,將為了跟控制項溝通的語法寫在provider裡面的各個method前即可。