像我這樣的菜鳥一開始看到DNN時,像劉姥姥進了大觀園眼睛都不夠用了。找了好久才找到能“下口”的地方。雖然E文很菜,但努力讀完 ~\Documentation\Public\DotNetNuke Module Developers Guide 文檔後,還是感覺頗有所得。
DNN的模組結構採用的是三層構架:
l DAL:在DNN中DAL層採用了Provider結構。按我自己的理解,就是先定義一個DataProvider,裡面定義好模組訪問資料需要的結構的,採用了單件模式。同時它是一個反射工廠。根據不同情況繼承出不同的ConcreteDataProvider。同時在web.config中定義好預設的Type字串。這樣通過Instance返回預設的provider。
l BLL:在這層中。一般都有Controller和Info兩部分。Controller的作用是完成所有UI需要的於資料來源相聯絡的功能,同時完成並提供Info給UI。Info即CBO(Custom Business Object)。在DNN中Info的建立是利用核心提供的CBO裝配集+IdataReader利用反射直接完成的。免去了由資料庫到DS再到苦力般的初始化過程。在我理解中,dr和cache的利用,都可以極大減少由反射引起的效能損失,而極大提高編程的舒適性和靈活性,通常可以視為很好的解決方式,不知道這種理解對不對。在涉及Sql的部分,DNN利用了Microsoft.ApplicationBlocks.Data這個裝配集中的內容。一般我的解決方案是利用自己寫的一個Sql類,不知道哪種更好。
l UI:主功能頁繼承自PortalModuleBase類。這個類也是從UserControl繼承而來。我想這個大家都會很瞭解。一般一個全面一點的模組都會實現菜單,Edit,等很多頁面。特別會擁有一個Setting類來完成頁面不同的Module的設定。通過不同的ModuleID來區別。(這是我的理解,我也不知道是否是這樣,希望高手門指正)DNN的核心提供了大量的功能。如logging,scheduler,search等等,可以通過這些核心提供的介面來實現。按我個人的理解。UI層完成的任務就是利用BLL層,其它模組,DNN核心功能來完成ascx的建立。
由於在家裡,DNN資料庫一直配置不好,msdn又沒裝。缺少實踐練習的機會。只是通過閱讀團隊各前輩的blog,和DNN的文檔獲得的一些淺顯的認識。希望各位大蝦如果看了的話,能夠指正,免得我深陷泥潭而不覺。