标签:
在Visual Studio(以下简称IDE)当中,存在两个很微妙的专用名词”项目(project)”和”解决方案(solution)”。这两个概念对于我们组织工作有怎样的启示呢?
当我们以空白环境启动IDE后,通过
[主窗口]/{文件}/{新建}/{项目}/,可以呼出[新建项目]窗口。
在[新建项目]窗口中任意选择一个项目模板,由于默认有
[新建项目]/{解决方案}=创建新的解决方案,
因此在完成新建项目后,在[解决方案资源管理器]中出现了一个解决方案内含有一个项目的情况。
此时,
[解决方案资源管理器]/{项目名}>>{在Windows资源管理器中打开}/,
可以看到这个项目具有独立的输出目录:bin目录,其中的Debug文件夹就是项目的输出目标。
回到主窗口,
[主窗口]/{新建项目}/得到[新建项目],
再建一个项目附加到当前解决方案,
[新建项目]/{解决方案}=添加到当前解决方案。
此时,观察目录结构是
很显然,这样的设计哲学呈现的是,项目代表了某种”单元”的东西。而解决方案就是这些”单元”的集合。请试着猜想,我们对项目的引用进行添加的时候,自动生成的信息到哪里去了?是’解决方案.sln’还是’项目1.csproj’?
我们可以把这种特性用来组织程序的编写工作。也就是把项目(project)作为可以复用的单元。这个单元比类高级,因为类实质就是文本文档。这个单元又比实际的应用程序低级,因为有一些项目它不产生新的.exe只产生新的.dll。其实这个等级恰恰就是常说的”模块化重用”中的模块。
既然输出是指,使用Visual Studio所做实际工作对应的新增项。那么它可能是一个dll,也可能是一个.exe。总之,它一定是一个新增的单元。
可以提出一个简单的问题:一个项目可以对应几个引用项目?一个项目可以对应几个输出项目?一个引用项目可以对应几个项目?一个输出项目可以对应几个项目?实际上通过自己编写编译脚本,比如Makefile之类的东西,是可以精确掌握编译的过程。但是很显然,在Visual Studio当中没有要求强制写编译脚本。可以说,既然编译过程可以自动化,那么为什么不利用这个好处呢?
利用这个好处的结果就是对上面问题的一种解答方式:一个项目可以引用多个项目,一个项目就是输出一个项目(假如是Application模板,那就是一个.exe,类库就是一个dll),而一个项目可以被其他任意多个项目引用。
借助这样的模块化统一思想,可以更加科学地划分问题域,限制问题出现的范围,有效地形成复用。
以360安全卫士为例,360安全卫士很显然对应一个”解决方案”。其主界面可以对应于IDE中的一个桌面应用程序项目,模块化的实际功能就可以对应于IDE当中的类库项目。同样的理解,还可以应用于其他的应用程序。
对于应用程序的安装包打包,实际上就是IDE当中的特殊项目:部署。
一个功能丰富的应用程序很难像”Hello,World!”这样简单。Visual Studio提供了自动化的项目管理方法论,在其中,解决方案面向总的问题域,项目则提供了模块化的实现方式,理解并遵守这种方法论或许不能避免造轮子,但可以一定程度上避免自己始终造同一个轮子。
编程工作的组织--llorch的Visual Studio 基础教程(一)
标签:
原文地址:http://blog.csdn.net/u010289866/article/details/46575021