正文

DNN2006-11-01 12:32:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/bilan/19879.html

分享到:

中国DNN团队博客群     中国DNN团队博客群  DNN模块开发系列文章(7)——用CodeSmith Templates进行编码 DNN模块开发系列文章(6)——DNN中的通用控件(下) DNN模块开发系列文章(5)——DNN中的通用控件(上) DNN模块开发系列文章(4)——与模块开发相关的类 DNN模块开发系列文章(3)——在DNN中添加模块定义 DNN模块开发系列文章(2)——建立模块开发项目 DNN模块开发系列文章(1)——分析设计 DotNetNuke与MemberShip的结合 FCKEditor在DNN中的心得使用 DNN中又一个好用的富文本编辑器(FCKEditor) DNN做为一个优秀的门户网站框架,可以通过安装各种功能模块的方式扩充应用。正是通过这一优秀的功能,DNN框架可以实现:文章管理,图片管理,文档管理,论坛,博客,商店,调查,FAQ等等各种各样满足实际需求的模块。通过这个强大的框架支持,我们可以很容易的实现这些模块。比如:权限控制,多语言支持,多数据库支持,搜索,聚合,皮肤等功能,我都可以很容易的通过框架实现。如果是在平时,光是实现这些基础功能我们就需要花去大量的时间。现在有了DNN框架的支持,我们就可以集中精力投入到模块的业务逻辑和流程上,从而大幅度提高开发效率和质量。  《DNN模块开发系列文章》将通过开发一个简单的文章模块(Article)为例,讲解整个模块的开发流程,和模块相关的一些DNN命名空间功能,如何实现模块搜索、聚合、导入导出等扩展功能,以及后期如何维护和升级DNN模块。   一般来说DNN模块开发有以下6个步骤,我也将安照每个开发环节,讲讲我在DNN模块开发中的心得:1、分析设计(确定模块功能,确定数据字段表结构,确定数据表名称,确定解决方案名称等几个工作)2、建立开发环境(确定整个模块的文件结构,讲解DNN模块需要用到的dll和命名空间,以及这些命名空间的功能)3、程序设计(设计需要几个控件来实现,每个控件的作用名称)4、程序编码(介绍使用CodeSmith,进行数据访问层、业务逻辑层和存储过程的编码)5、实现模块的扩展功能(如:搜索,聚合,导入导出)6、生成安装脚本,打包程序。(讲解如何高效正确的编写安装脚本和生成安装包) 分析设计  首先讲讲这个文章模块将要实现的功能:一个简单的文章模块,提供发布文章(包括作者,标题,内容,发布时间),列表显示(数字分页,需要设置分页大小),需要提供导入导出聚合和DNN中检索功能。根据上述需求描述,我确立了以下表结构文章信息表:MyCompany_ArticleArticleID               文章ID      int                       主键ModuleID             模块ID      int                       关联模块信息表(Modules)Title                      标题          nvarchar(225)Content                 内容          ntextCreatedByUser     作者          int                       此处存用户IDCreatedDate         创建时间  datetime注:因为DNN可以安装多个功能模块,为了不和其他模块发生冲突,最好以公司名+模块功能描述的方式来命名。如果你的文章信息表其名为Article就很容易和其他文章冲突。   解决方案名称也遵循公司名+模块功能描述的方式来命名,所以我确定模块解决方案名称为MyCompany.Article。   通过上述分析,我们基本清楚了这个模块要实现的功能,下面就可以实际动手开发了。下一篇文章是《DNN模块开发系列文章(2)——建立模块开发项目》,将讲述如何建立一个简单高效的模块开发项目和组织一个清晰的文件结构。建立模块开发项目         开发DNN模块可以通过两种开发环境来进行:一、在整个DNN解决方案下建立模块开发项目。        优点:可以方便的引用DNN组件,参考其他模块的实现方式,可以随时通过“转到定义”的操作查看DNN中该方法的定义,调试起来也比较容易。        缺点:速度慢。打开项目和编译项目都要费大量时间。二、用单独的方式建立模块解决方案。        优缺点正好和第一种相对,不过在实际开发中速度是关键,下面我就单独讲讲我在以单独方式建立模块开发解决方案中的一些心得。       建立单独的解决方案进行模块开发需要解决三个问题:1、在什么地方建立解决方案有助于边开发边测试?2、如何对原有dll进行引用,生成的dll又到那个目录中?3、怎样进行调试?        欲善其事,必先利其器。首先,我们应该为开发DNN模块准备以下工具:DNN Project Templates :一个由dnnjungle提供的VS.NET 2003下的功能插件。安装后,可以直接通过它在VS环境来创建DNN项目和一些DNN中所用的项。CodeSmith Templates:一组生成DNN模块业务逻辑层代码和数据访问层代码所用到的,CodeSmith代码生成模板。CodeSmith:代码生成工具,结合上述模块,可以大大加快代码编写工作。(http://www.codesmithtools.com/)相关网址:http://dnnjungle.vmasanas.net/Development/Templates/tabid/28/Default.aspx       当上面的工具都安装好后就可以开始我们的模块开发工作了。该模块用VS.NET 2003开发环境,以DNN3.3.3做为平台,数据库使用SQL Server数据库。1、创建DNN模块表示层项目。运行VS,创建DNN模块开发项目。如果,你安装好DNN Project Templates后,在创建新项目时,在项目类型处将会出现“Visual Basic Project for DotNetNuke 3”和“Visual C# Project for DotNetNuke 3”这两个新项目。在这里我选择VB.NET作为开发语言,其实用C#是一样可以开发DNN模块的。选择“DNN Module”模板,项目名称设置为:Article,项目位置选择DNN程序所在文件夹的DesktopModules目录,这样有利于边开发边测试。如下图: 2、创建DNN模块数据访问层项目。点击添加“新项目”,选择“DNN SqlDataProvider DAL”,项目名称为:Article。项目位置:DesktopModules\Article\Providers\DataProviders。如下图: 3、设置DNN模块表示层项目属性添加引用。首先,该项目需要添加DNN程序Bin目录下的DotNetNuke.dll组件的引用。项目属性到不用修改,默认设置即可。启用该项目,默认导入了一些DNN的命名空间,这样你就不必再每个文件中引用这些命名空间了。但是在以后文章中我还是会介绍到这些命名空间的作用,即常用功能。 4、设置DNN模块数据访问层项目属性添加引用。首先,该项目需要添加DNN程序Bin目录下的DotNetNuke.dll和Microsoft.ApplicationBlocks.Data.dll组件的引用,并且还要添加表示层的项目的引用。其次,将该设置为启动项目。设置项目生成路径为DNN程序的bin目录。这样每次编译后都可以及时调试。 5、编译程序,目前这个地方改的可以编译通过就可以了,以后我们还要重新对它进行编写。注:DNN3.3.X下开发的模块,可以在DNN4.3.X上使用。 来看看,我们建立的开发项目吧,如下图: MyCompany.Article项目App_LocalResources :语言包文件夹,存放与用户控件同名的资源文件Components :业务逻辑代码文件夹ArticleController.vb:业务逻辑对像,实现对像/关系映射,也就是实现业务实体对像到数据库的转换ArticleInfo.vb:业务实体对像DataProvider.vb: 支持多数据库访问Provider,相当于一个到多种数据库访问接口Do***entation : 可以放一些开发文档和用户说明书(如果制做安装包不需要时,请把它从项目中排除) Installation :  可以放一些生成好的安装包做为备份使用,制做安装包前,需要把它从项目中排除Providers :  放置一些模块相关的Provider,目前只有DataProviders,如果你还有其他需要兼容括充的业务,你也可以编写其他的Provider。例如:文章模块将来需要用到图表显示文章查看情况。网上可以使用的图表组件很多,你就可以编写一个ChartProvider,提供访问的统一接口。然后编写相应图表组件的Provider实现,如:ZedGraphProvider,WebChartProvider等。这样就可以通过在web.config中进行设置,灵活的兼容多种图表组件。Provider模式是DNN中一个应用非常广范设计思想,可以说是DNN的一个亮点。Article.ascx :做为文章列表显示控件ArticleEdit.ascx :做为文章新建/编辑控件ArticleShow.ascx:目前还没有,再以后新建做为文章显示控件icon_Article_32px.gif :模块图标module.css :模块所用到的样式Settings.ascx :做为设置文章列表分页大小控件 MyCompany.Article.SqlDataProvider 项目01.00.00.SqlDataProvider 模块数据库对像创建脚本SqlDataProvider.vb    SQL Server数据库访问具体实现类Uninstall.SqlDataProvider 模块数据库对像删除脚本 调试程序        有一篇文章有详细介绍:http://www.cnblogs.com/leeichang/archive/2004/11/16/64418.html大致就是,通过附加进程,来调试程序,方便快速,十分好用。那篇文章已经介绍的非常好了,我就不多讲,只是大家要注意:默认情况下,ASP.NET 进程(对于 Windows 2000 和 Windows XP 上的 IIS 5.0 和 IIS 5.1 为 aspnet_wp.exe,对于 Windows Server 2003 上的 IIS 6 为 w3wp.exe)作为 ASPNET 进程运行。因此,要调试它,您必须具有运行 ASP.NET 的计算机的管理员特权。         DNN模块项目初步建立完成了,我们就需要在DNN中添加该模块,看看该模块是否能正常添加运行,为下一步开发打好基础。在《DNN模块开发系列文章(3)——在DNN中添加模块定义》一文中我将详细介绍,如何在DNN添加一个模块。 添加模块定义  完成了以上几篇文章介绍的工作后,我们就可以把模块添加到DNN中了。虽然现在这个模块还不能运行,但是先添加进去就可以一边开发一边看到它的效果了。一、用host(主机管理员)的身份登陆,进入“Host --> Module Definitions”,点击“Add New Module Definition”添加新的模块定义。二、输入以下模块信息后点击“Update”保存新模块。Module Name(模块名称):MyCompany.ArticleFolder Name(模块所在文件夹):Article 注:这个要如实填写写。Friendly Name(友好名称):MyArticle 这个可以随便填写,在可添加模块列表中的显示值。Description(描述信息):MyCompany ArticleVersion(版本信息):01.00.00Controller Class(控制类):这个主要用于告诉DNN实现ISearchable(查询聚合接口)和IPortable(导入导出接口)的类,这里我们输入:DotNetNuke.Modules.Media.MediaController, DotNetNuke.Modules.Media。在以后我们将实现这些类。Supported Features(支持属性):保存后DNN会根据你实现的接口自动获得。Upgradeable 是个新特性我还没有仔细研究,以后看过后在和大家说说。其他两个就是查询聚合,导入导出了。Premium(是否收费):可以指定该模块在那些网站可以使用。三、添加模块定义。一个模块可以包括多个模块定义,让他们配合工作。Definitions:已有的模块定义。New Definition:添加新的模块定义。这里我们输入:MyCompany.Article四、添加控件。每一个模块定义又可以包含多个控件,来完成如:列表,添加/编辑,查看,设置等操作。点击“Add Control”(添加控件)进行如下设置:1、添加列表显示模块:Key:为空。为空的控件将默认首先显示在页面上。Title:控件标题。输入:ArticleSource:控件原文件。选择:DesktopModules/Article/Article.ascxType:控件类型。其实可以理解为访问该控件的权限设置。Skin Object:皮肤控件,Anonymous:可匿名访问,View:需要查看权限,Edit:需要编辑权限,Admin:需要主机管理员权限,Host:主机管理权限。这里我们选择:View。因为文章列表只要查看权限就可以了。View Order:排序号。Icon:控件图标。Help Url:该控件对应的帮助地址。2、添加文章添加编辑控件,输入以下属性:Key:为Edit。Key用来标识一个控件的作用。在代码中我们可以通过EditUrl方法来定位到我们需要的控件。这个我将在下一篇文章中详细介绍。Title:Edit ArticleSource:DesktopModules/Article/ArticleEdit.ascxType:Edit其余为空3、添加文章设置控件,输入以下属性:Key:为Settings。只有为Settings的控件在点击DNN设置时才会默认被调用。Title:Setting ArticleSource:DesktopModules/Article/ArticleSettings.ascxType:Admin其余为空   以后我们添加了文章查看控件后,将在这里继续设置。现在就这些操作就基本完成了整个模块的定义。不过现在添加模块还是会出错的,毕竟我们一行代码也没有写。在开始对模块进行编码是我们还需要先了解一下与模块相关的一些命名空间,控件和一些常用的类。在《DNN模块开发系列文章(4)——与模块开发相关的类》中我将介绍这些类和控件的做用及用法。 

阅读(5429) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册