2.1.5 创建公共类库项目
一个比较重要的决策是:把所有的代码都放在网站上,还是把公共代码放在一个独立的类库中。完全可以把独立的类、实用的类、定制服务器控件和数据类都放在网站的App_Code文件夹下。
把所有代码都放在一个Web项目中,以后当有另一个项目需要引用这些代码时,问题就来了。此时,有两个选择:可以复制代码,这样代码就重复了;还可以把这些代码移到一个公共类库中,更新已有应用程序中对它的所有引用。如果决定复制代码,则在一个项目中对这些代码的修改不会反映在其他项目中。可以把代码移到一个共享库中,但不能设置很好的命名空间层次,所以必须修改许多代码,才能使用这个新的共享副本。
比较好的方法是事先确定哪些代码要在项目之间共享,再创建一个公共库,其中放置尽可能多的代码。这个新的公共库不仅可以由当前应用程序引用,还可以由将来的应用程序引用。
为了在解决方案中添加新的类库,应确保在Solution Explorer中选择Solution Level,再选择File | Add | New Project。如果这是在网站的外部添加到解决方案中的第一个项目,Solution Explorer会把项目显示为解决方案的分支。
根据要创建的这些类库的数量,策略会有所不同,这大多取决于项目和开发团队的规模。共享的代码类型也可以影响策略。例如,如果要共享数据库代码,并使用两个不同的数据库供应商,则可以把这些代码放在两个不同的库中,通过一个提供程序模型来引用。有关提供程序的更多信息请参见第3章。
在创建库时,还应考虑依赖性,但一定要避免循环引用。例如,创建下面的库就非常糟糕:
● 库A依赖库B
● 库B依赖库C
● 库C依赖库A
这不仅创建起来很复杂,而且,即使在建立过程中没有错误,它也并不是一个强壮的体系结构。这里不深入讨论体系结构,阻止发生这种情况的一种较简单的方式是使用“层”的概念,如图2-2所示。在层的概念中,所有的引用都是向下的,这表示库永远都不能引用其上面的层中的项。

图 2-2
下面更具体地解释这个例子:“实用例程”中的类永远都不会访问其上面的层中的代码。而“应用程序公共代码”中的类可以访问“应用程序数据库访问”和“实用例程”库中的类。
可以在解决方案中创建任意数量的类库。例如,本书将创建一个名为Common的类库。注意,创建太多的类库会增加它们的管理成本,所以应找出最合适的类库数量。使用类库中的文件夹常常就足够了,不需要其他库。
注意:
解决方案中的所有项目不一定要用同一种语言编写。在Visual Studio 2005中,现在可以在同一个项目中混用不同的语言文件。







