1.
问题的引出
在一些较大型的项目中,为了可重用,易维护,常常将系统设计为可插接式的,就是用一个框架将很多个小的组件组装起来。有时一个系统中的组件有数百个之多,而这些组件都要去调用一组类库,对应到
.NET
中就是有很多个程序集。如下图:
在这种结构下,在开发时我们就要建很多个项目,这些项目的内部组织方式可以根据其功能进行分类的,比如常见的有:对数据进行列表,对表进行维护,显示打印报表等。对于一个进行单表维护的项目,一般要用到验证,日志,数据访问,自定义控件等,这样就要添加对应程序集的引用。对单表维护而言,界面上控件的摆放,执行的操作,有很多都是相似的。
所以可以想像一下,上百个工程,每个工程都要添加引用,然后给窗体上添加控件,写一些类似的代码。这样的工作烦琐而又容易在工程间产生不一致性,为了解决这些问题,我们可以使用项目模板。
2.
为什么是项目模板
l
为什么不使用代码生成:
代码生成对
UI
层的能力很有限,特别是
winform
下的窗体,里面有很多设计器生成的代码,代码生成也可以对付,但是不是最佳的选择。而且和
VS.net
整合度不好。
l
为什么不使用继承:
我们也可以使用继承,但是窗体的继承会有很多麻烦,常见的就是控件大小莫名其妙的自己变化,子窗体使用设计器打不开,显示一片白等情况。虽然我们可以通过
.net
的工具
DbgClr
来调试,查找问题。但是相比能带来的好处而言,付出的代价还是太大了。
l
为什么使用项目模板:
n
足够的灵活度:可以自定义项目的引用,包含的文件,可以使用向导接收用户输入,替换代码中的内容,和代码生成中的代码模板功能相似。
n
便于使用:可以将整个过程都集成到
Vs.net
中,直接通过新建项目来使用自定义的模板,一次完成项目的共通操作。还可以自定义项模板,通过新建文件来添加自己的特定分类的文件。
n
提高代码的一致性:开发人员都使用相同的模板,项目所引用数据集的顺序和版本,是否拷贝到本地等属性都是一致的。文件的命名也是一致的,有规则的。初始生成的代码结构也是一致的。
3.
怎样制作项目模板
本来想写写如何制作模板,但是
msdn
中已经有很详尽的说明了,所以这里只介绍几个重要的操作。
l
如何导出模板:
可以新建一个项目,把它作为模板,定义引用,包含的文件,窗口的公共部分等,然后使用“文件”菜单里的“导出模板”,通过向导来将这个项目保存为模板,这样你就可以在新建项目的选项里看到刚导出的模板,使用它来新建你的项目。
l
如何使用向导:
你也可以在新建项目时使用向导来使你的项目模板能够获取更多的信息,建立向导主要使用
Iwizard
接口,新建一个类库项目,使一个类从
Iwizard
接口继承,并新建窗体,用来接收用
户输入,然后在实现Iwizard的RunStarted的方法中接收输入,并置入到
replacementsDictionary
参数中。然后打开模板的
.zip
文件,配置其中的
.
Vstemplate
文件,在其中添加
WizardExtension
项来使用刚才的向导项目。
l
如何建立自己的模板分类:
如果你使用“导出模板”功能,在新建项目的时候,你的模板会出现在列表的最下方,如果你想让你的模板和
VS.net
的模板放在一起并出现在新建项目对话框中,你可以把模板拷贝到
VS.net
安装目录的
/Common7/IDE/ProjectTemplates/Csharp
目录下,并且在命令行中执行
devenv /setup
。完成后你的模板就和
Vs.net
的模板在一起显示了。也可以在这里新建一个目录,下面放入自己的模板,这样就创建了一个项目分类