其实也谈不上学习,因为我对vb不怎么了解,郁闷!觉得DNN最好的地方就是它可以添加moudle,tab,portal.最重要的地方当然是它的模块加入了,因为模块的作用就是完成一个功能.最开始我被系统自带的模块和自定义的Tab给迷惑了,比如Admin下边的一个Tab,叫做Site Log,当我点这个Tab的时候,发现在这个Tab里边包括了一个东西也叫Site Log,怎么都理解不了是怎么实现的,后来一看数据库里边的内容,其实这个也叫Site Log的东西,不过是系统加入的一个Site Log Moudle而已.
到现在主要看了一下User Account模块,发现它的管理上对于address用户控件实现了对一些内容是否为必添项由管理员控制,其实结构不是很麻烦,但由于我们是逆向研究代码,探究其实现,所以感觉很乱!
在这个系统中,大量用到类似这样的代码
DataProvider.Instance().UpdateModuleSetting(ModuleId, SettingName, SettingValue)
和SqlHelper.ExecuteNonQuery(ConnectionString, DatabaseOwner & ObjectQualifier & "UpdateModuleSetting", ModuleId, SettingName, SettingValue)
就我的理解,是叫做所谓Provider(提供者)/Factory(工厂)模式,目的就是可以实现对不同数据库的支持,好处应该是当要对系统进行扩展,比如要加入一个对oracle数据库的支持只需要再实现一个类似SqlHelper.ExecuteNonQuery这样的东西,也就是说满足开放/闭合原则.对于整个系统还采用到什么模式,我也不太清楚,高手指点.对于UpdateModuleSetting这样的类名,在数据库中有同样的名字UpdateModuleSetting这样的存储过程,所以学习这些类的关系时,通过存储过程就能学习个大概.大家有什么好的学习方法,大家相互学习.我这只算是一个笨方法.
同时也有一些疑问,比如这些不同的.cs文件,他们组织的依据是什么,有时候我发现,要完成的功能,可能不是在它自己的文件夹中,组织的原则又是什么呢?还有就是CompanyName.Survey以及相似文件夹,是用来干什么.
另外对模块的学习,一个相当不错的地方,包括用c#自定义模块,这里有很详细的示例
http://dotnetnuke.dk/Default.aspx?PageContentID=8&tabid=60,也包括了一些可下载的moudle,不过对http://www.dotnetnuke.com/,不知道怎么利用里边的资源.
对dnn的了解,我只是一知半解,感谢灵感之源和中Rainbow,从他们那学到很多东西,希望能得到大家的指点.