The Last Day Of Summer

.NET技术 C# ASP.net ActiveReport SICP 代码生成 报表应用 RDLC
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

不应被遗忘的项目模板

Posted on 2006-08-17 20:21  Cure  阅读(3658)  评论(5编辑  收藏  举报

1.          问题的引出

在一些较大型的项目中,为了可重用,易维护,常常将系统设计为可插接式的,就是用一个框架将很多个小的组件组装起来。有时一个系统中的组件有数百个之多,而这些组件都要去调用一组类库,对应到.NET中就是有很多个程序集。如下图:

 

 

在这种结构下,在开发时我们就要建很多个项目,这些项目的内部组织方式可以根据其功能进行分类的,比如常见的有:对数据进行列表,对表进行维护,显示打印报表等。对于一个进行单表维护的项目,一般要用到验证,日志,数据访问,自定义控件等,这样就要添加对应程序集的引用。对单表维护而言,界面上控件的摆放,执行的操作,有很多都是相似的。

所以可以想像一下,上百个工程,每个工程都要添加引用,然后给窗体上添加控件,写一些类似的代码。这样的工作烦琐而又容易在工程间产生不一致性,为了解决这些问题,我们可以使用项目模板。

 

2.          为什么是项目模板

l         为什么不使用代码生成:

代码生成对UI层的能力很有限,特别是winform下的窗体,里面有很多设计器生成的代码,代码生成也可以对付,但是不是最佳的选择。而且和VS.net整合度不好。

l         为什么不使用继承:

我们也可以使用继承,但是窗体的继承会有很多麻烦,常见的就是控件大小莫名其妙的自己变化,子窗体使用设计器打不开,显示一片白等情况。虽然我们可以通过.net的工具DbgClr来调试,查找问题。但是相比能带来的好处而言,付出的代价还是太大了。

l         为什么使用项目模板:

n         足够的灵活度:可以自定义项目的引用,包含的文件,可以使用向导接收用户输入,替换代码中的内容,和代码生成中的代码模板功能相似。

n         便于使用:可以将整个过程都集成到Vs.net中,直接通过新建项目来使用自定义的模板,一次完成项目的共通操作。还可以自定义项模板,通过新建文件来添加自己的特定分类的文件。

n         提高代码的一致性:开发人员都使用相同的模板,项目所引用数据集的顺序和版本,是否拷贝到本地等属性都是一致的。文件的命名也是一致的,有规则的。初始生成的代码结构也是一致的。

 

3.          怎样制作项目模板

本来想写写如何制作模板,但是msdn中已经有很详尽的说明了,所以这里只介绍几个重要的操作。

l         如何导出模板:

可以新建一个项目,把它作为模板,定义引用,包含的文件,窗口的公共部分等,然后使用“文件”菜单里的“导出模板”,通过向导来将这个项目保存为模板,这样你就可以在新建项目的选项里看到刚导出的模板,使用它来新建你的项目。

l         如何使用向导:

你也可以在新建项目时使用向导来使你的项目模板能够获取更多的信息,建立向导主要使用Iwizard接口,新建一个类库项目,使一个类从Iwizard接口继承,并新建窗体,用来接收用户输入,然后在实现IwizardRunStarted的方法中接收输入,并置入到replacementsDictionary参数中。然后打开模板的.zip文件,配置其中的. Vstemplate文件,在其中添加WizardExtension项来使用刚才的向导项目。

l         如何建立自己的模板分类:

如果你使用“导出模板”功能,在新建项目的时候,你的模板会出现在列表的最下方,如果你想让你的模板和VS.net的模板放在一起并出现在新建项目对话框中,你可以把模板拷贝到VS.net安装目录的\Common7\IDE\ProjectTemplates\Csharp目录下,并且在命令行中执行devenv /setup。完成后你的模板就和Vs.net的模板在一起显示了。也可以在这里新建一个目录,下面放入自己的模板,这样就创建了一个项目分类。