Composite Application Guidance for WPF(7)——模块2012-02-07既然是Composite Application ,毫无疑问地将涉及到“模块(Module)”以及“模块化(Modularity)”,今天简单地谈谈Prism中的模块,这包括:模块化,如何在Prism中枚举和加载模块等等1,模块化事实上“模块化”这个标题足以让我心惊胆战而无法完成此篇随笔,因为其是一个非常大的话题,并且在生活中随处可见,如果你对此感兴趣的话,不妨阅读一下《设计规则:模块化的力量》这本书。不过就比较狭隘地从软件开发这个角度上讲:我们通常将一个大的软件系统按照功能划分成若干子系统,一个子系统完成相对单一的一个功能,这可以让模块本身足够的单纯、自包含以及提高重用性。对于开发者而已,一个好的模块划分可以让模块更好地独立出来以便相对独立的开发、测试,因为往往复杂的沟通所带来的消耗让我们感到无穷困窘,并且,重用性也是一个非常值得注意的问题。说到重用性,我想引入一个话题是:我们知道,目前国内的大多数公司都会按照模块化的思想将开发人员的开发责任划分出来,开发人员D1领到模块M1的开发任务,开发人员D2领到模块M2的开发任务,然后各自开发去了,但从代码的角度上,很可能M1和M2有交叉(重复)的部分,由于没有很好的沟通导致这些本应该本重用的交叉部分没有得到重用而是D1和D2各自开发了一套,对于这个问题,我很想了解大家的想法。OK,继续我们的话题,从编程的角度上讲,关于模块化,一般会有以下这些规则:模块对系统的其余部分而言应该是opaque(透明?不透明?)的,并应该透过Interface(接口)解析初始化模块不应该直接引用其他模块或程序模块应该通过Service(服务)来和其他模块进行沟通模块不应该去维护其依赖项,这些依赖项应该有外部提供(比如依赖注入)模块不应该依赖静态方法(这会干扰测试)模块应该支持热插拔(既能够从系统中添加删除模块)2,在Prism中定义模块从语法层面上讲,在Prism中实现了IModule接口的类被称为一个模块,从实际应用上讲我们一般会将一个模块独立成一个Project(项目),而在项目中我们往往会发现一个MVP模式或MVC模式的实现,注意这两个模式中的M(模型)是Model,而语法上的模块是Module,关于Prism中的设计模式,我会在后续随笔中专门讨论。IModule是如下定义的:
/// <summary> /// 为部署到应用程序的模块拟定一个契约 /// </summary> public interface IModule { /// <summary> /// 表明模块已经被初始化 /// </summary> void Initialize(); }