微软企业库4.1学习笔记(三)企业库迁移和并行使用,以及企业库的扩展
通常来说,企业库是建立在.NET 2.0 的基础上,使用后续版本的企业库也不需要改变任何代码。不需要将引用更新到新的程序集,也不需要在配置文件中指明程序集的正确版本。
这个版本4.1的企业库可以和以前版本的企业库同时安装,你可以将使用新版本的应用程序和使用旧版本的应用程序一起部署。也你可以一次性的将现有应用的企业库应用升级到新版本。
如果你选择并行使用不同版本的企业库,你一定要将他们部署在不同的文件夹。在任何情况下,不能将不同版本的企业库程序集混合在一起。例如,你不能将4.0的Data Access相关程序集和3.0的Caching相关程序集放在一个目录。
可以在应用项目下面的AssemblyInfo.cs在存在不同版本的程序集信息。这样就可以通过强命名的方式,并行使用GAC中的不同版本程序集。
1、部分迁移
应用中的每个程序集只能引用一个版本的企业库,但是多个程序集可以引用多个版本的企业库。例如,你的应用有两个程序集,原来都是用企业库3.0,现在可以将一个程序集迁移到使用4.0,保留另外一个对3.0的引用。这就是说你可以逐步迁移,一次一次的替换。尽管支持分步骤的迁移,但是实现起来可能是复杂的;所以,不推荐这种做法。
注意:企业库的配置界面是根据企业库的版本定制的,所以在配置不同版本的企业库的时候,请使用不能版本下面的配置程序。
二、企业库的扩展指导
企业库可以作为自定义类库的基础,你可以利用每一个功能模块的扩展点,提供新的支持。
你也可以修改企业库的源代码,组成新的功能。扩展的时候可以遵循下面的指导。
可以通过三种方式扩展企业库。你可以写自定义的provider,可以修改现有功能模块的源代码,可以写一个新的功能模块。如果你要扩展企业库,可以参考下面的建议:
- 功能模块应该暴露方法,方便开发者不需要修改就可以使用它。
- 功能模块应该很容易修改和扩展。
- 功能模块应该包含Microsoft Patterns & Practices指导
- 功能模块应该包含一些仪表
- 功能模块和其他功能模块应该是松耦合的关系
1、方法暴露
一个功能模块应该提供公用的API来暴露自己的方法,API应该独立于内部实现。开发者应该不需要理解模块的设计和实现,就可以高效的使用模块提供的即开即用功能。
无论什么时候,API应该为为特殊的功能提供通用的解决方案。使用配置界面设置值,而不是使用代码设置,可能对特殊的情况和用户很有用,例如数据库的名称,可以使用的缓存数量等。
2、扩展和自定义功能模块
一个功能模块应该提供扩展点给开发者,使得开发者可以根据自己的需要裁剪功能模块。最常用的扩展点就是允许开发者使用自己的provider。例如,一个管理在数据库中存储数据的功能模块,应该允许开发者很容易的添加不同类型的数据库。
开发者应该可以不修改功能模块的源代码,就可以扩展功能模块。为了实现这些,你的扩展点应该包括公共基类或者是接口。开发者可以扩展基类或者实现接口,然后通过修改配置文件来扩展功能模块。通过这种方式,不需要修改或者重新编译功能模块。开发者会发现扩展功能模块很有意思,很好组织,很容易理解,同时应该遵守Microsoft patters & practices的指导。
当提供扩展的时候,也需要考虑给易用性带来的影响。大量的扩展点,可能会给功能模块的配置和使用带来很大的困难。
一些开发者更喜欢自定义的代码,意味着他们可能会修改源代码,而不是使用扩展点。提供这种功能,模块设计应该提供下面的指导。
- 在任何实际情况下,都应该遵循面向对象的设计原则
- 应该正确的使用设计模式
- 应该高效的使用资源
- 应该支持安全准则,例如,不信任用户的输入和最小优先级原则。
代码风格和命名规范都应该和.NET类库保持一致,这方面可以查看MSDN的Design Guidelines for Class Library Developers。有一个这方面的代码检查工具,叫做FxCop,这个工具可以检查代码是否和微软的类库设计建议保持一致。
3、包括patterns & practices
有一点很重要,需要记住,企业库只是Microsoft patterns & practices的一小部分。一个功能模块应该包含patterns & practices的相关指导。
4、包含性能仪表
一个功能模块应该包含性能仪表,使得开发者,测试者和系统管理员都可以监测功能模块的运行行为和性能。仪表的数量依赖于功能模块的方法,需要足够的仪表提供给开发人员、测试人员和管理员,使他们可以可以获取足够的信息,保证功能模块正在像设计的时候那样运行,并且性能在可接受的范围之内。
5、使用松耦合
如果一个企业库功能模块需要其他的模块来完成工作,他们之间依赖应该是松耦合的,方便开发者可以用自己的实现来替换他们。如果有可能,使用插件模型的方式。分离和一个provider的代码依赖。开发者可以在需要的时候换成一个不同的provider。
三、企业库的修改指导
企业库被设计成可以在任何应用中使用,提供通用的工具类和方法。使用扩展点,你可以调整企业库来满足任何特殊的需要。但是,如果你想要在功能模块中添加新的feature,你可以对源代码进行一些修改。在这种情况下,可以参考下面的建议:
- 通过阅读文档,保证你理解了企业库的功能模块是如何工作的。
- 如果你改变代码的签名或者在使用原有版本的同时使用自定义的版本,你可能要考虑修改命名空间。如果修改命名空间,你需要修改所有相关的程序集的命名空间,使得他们和新的命名空间保持一致。
- 使用强命名。强命名使得程序集具有唯一标识、版本和完整性检查。你需要自己的签名来表示修改的程序集。
- 你一定要重新编译你的代码,查看修改产生的影响。开发VS,重新编译整个解决方案。
未完待续。。。。。。。。。。。。。。。。。。