DNN中XXXXControler.vb就是通常说的商业逻辑层,XXXXInfo.vb就是petshop中的module。而XXXXProvider.vb就是数据访问层。
XXXXProvider.vb文件类似于PetShop中的IDAL下面的接口,只不过它是通过Reflection来统一实现实例化,这点要比PetShop方便。
XXXXProvider.vb文件都是抽象函数,所以可以根据配置文件来引用具体的实现类。为在其他项目中引用DotNetNuke提供了方便。
以DotNetNuke.FAQs为例:
DataProvider.vb就是数据访问层对象。
FAQsController.vb是一个商业逻辑对象。
FAQsInfo.vb是自定义业务实体。
而EditFAQs.ascx、FAQs.ascx属于表现层。
其实XXXXProvider.vb类似于petshop下IDAL中的接口.不过XXXXProvider.vb可以通过调用配置文件
和Reflection类来实例化自己.
具体代码:
Private Shared Sub CreateProvider()
objProvider = CType(Framework.Reflection.CreateObject("data", "DotNetNuke.Modules.Events", "DotNetNuke.Modules.Events"), DataProvider)
End Sub
这要比IDAL中的接口方便.
按照这个思路,可以在DNN中找出两大类项目.
一类是实现XXXXProvider.vb抽象类的项目,例如: DotNetNuke.Announcements.SqlDataProvider、
DotNetNuke.Contacts.SqlDataProvider、DotNetNuke.Discussions.SqlDataProvider、DotNetNuke.Documents.SqlDataProvider、
都属于这一类。这一类的特点是一般只有XXXXProvider.vb类,而该类继承自另一个抽象的XXXXProvider.vb类。
另一类就是实现三层模式的项目,例如: DotNetNuke.Announcements、DotNetNuke.Contacts、
DotNetNuke.Discussions、DotNetNuke.Documents、DotNetNuke.Events、DotNetNuke.FAQs、
DotNetNuke.HTML等,都属于这一类。这一类的特点是有XXXXProvider.vb、XXXXControler.vb、,XXXXInfo.vb
三种类,还有几个自定义控件。
我统计了一下,
实现三层模式的项目大约有13个,他们分别是:
1 DotNetNuke.Announcements
2 DotNetNuke.Contacts
3 DotNetNuke.Discussions
4 DotNetNuke.Documents
5 DotNetNuke.Events
6 DotNetNuke.FAQs
7 DotNetNuke.HTML
8 DotNetNuke.Links
9 DotNetNuke.SearchInput
10 DotNetNuke.SearchResults
11 DotNetNuke.Survey
12 DotNetNuke.UserDefinedTable
13 DotNetNuke.UsersOnline
实现XXXXProvider.vb抽象类的项目大约有19个,他们分别是:
1 DotNetNuke.Announcements.SqlDataProvider
2 DotNetNuke.Contacts.SqlDataProvider
3 DotNetNuke.Discussions.SqlDataProvider
4 DotNetNuke.Documents.SqlDataProvider
5 DotNetNuke.Events.SqlDataProvider
6 DotNetNuke.FAQs.SqlDataProvider
7 DotNetNuke.HTML.SqlDataProvider
8 DotNetNuke.Links.SqlDataProvider
9 DotNetNuke.SearchInput.SqlDataProvider
10 DotNetNuke.Survey.SqlDataProvider
11 DotNetNuke.UserDefinedTable.SqlDataProvider
12 DotNetNuke.UsersOnline.SqlDataProvider
13 Provider.DNNScheduler.SQLDataProvider
14 Provider.DNNSQLMembershipProvider
15 Provider.DNNSQLProfileProvider
16 Provider.DNNSQLRoleProvider
17 Provider.Ftb3HtmlEditorProvider
18 Provider.SqlDataProvider
19 Provider.XMLLoggingProvider
这是一份很粗略的统计,没有进行验证,不一定准确。这就是32个项目了.另外,就像那些HttpModule项目,
基本上是实现了一个筛选器.在开始的时候,不一定不许对它进行了解,就像HttpModule.UrlRewrite,
它就是实现了URL的重写,是一个独立的知识点,刚开始,就是不对它进行了解,也构不成什么困惑。
综合以上,说明一个问题:
虽然DNN看起来很庞大,但是有许多项目是类似的。就像以上的两类,我们只要
弄清楚其中的一两个就可以了解其他的了。
所以我们学起来也没有看起来的那么困难。
如果这样给DNN瘦身,DNN也是很苗条的。