到现在主要看了一下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,从他们那学到很多东西,希望能得到大家的指点.