可怕的 Naked Objects on .NET


這一切都是由InfoQ “使用面向.NET的Naked Objects進行快速應用程序開發” 這篇文章開始的。
然後先看看An Introduction to Naked Objects,對所謂Naked Object就會比較了解。
可看完文章,其實心中還有不少疑惑,於是決定先去下載Naked Objects for .NET - Express Edition來玩玩。
安裝完之後,開啟其C#的範例:expenses-csharp。
compile之後,執行,因為範例是帶有User Authentication的,所以密碼輸入”pass”。
接著就會出現只有menu的空白畫面,隨便點選幾個menu:
1
這個範例是for creating, submitting and approving expense claims.
所以我們可以看到員工 , 對應的經費, 項目 ……
接著就可以看看方案結構了。
Standalone可以先不去看它,主要在Domain這個專案上。
扣去recordedAction跟services先不看,就可以發現NOF(Naked Object Framework)確實的可怕了。
No UI ,No Persistence Layer。
是的,上面的畫面是Naked Objects用WPF自行產生的,DB在Expression版則是用'xml object store' 替代,Enterprise則是會使用ADO.NET Entity Framework去實作的。
DDD(Domain Driven Design)開發的極致在此展露無遺,真是太可怕了。An Introduction to Naked Objects中所說的到此完全明白。
其中的We refer to this as creating 'behaviourally-rich' domain objects.則為其主要精神。
NOF 試圖提出一個簡化的方式,將 UI 和 DB 抽取出來,不要干擾系統的開發和維護。
誠如Richard Pawson所說:Naked Objects引人入勝之處是你可以只使用它就能夠支持開發過程中的領域驅動設計:Naked Objects不會強迫你必須要實現整個系統。

要從頭自己實作一個sample的話,只要參照Naked Objects developement manual的Part III. Running the model as a standalone prototype,以及跟expenses-csharp裡面的sample code比對,就可以做出一個簡單的範例了。
要熟悉使用NOF,對其Attributes要仔細研究。
不過我好奇的是,在模擬完Domain model之後,NOF可以匯出乾淨的domain.dll之類的嗎?
不然裡面就會有一堆attributes以及,像是遵守其編碼約定:
Employee employee = new Employee();
    須改成
  Employee employee = Container.NewTransientInstance< Employee>(); 
這樣在專案實際應用時,就還要包含一堆 NOF 的 library 了。
關於這點,若是有人有答案,請告訴我。

0 意見: