文件名称:个人集成平台
文件大小:154KB
文件格式:7Z
更新时间:2016-11-11 11:43:34
WPF MVVM MEF Prism
前段时间学习了一下Prism,感觉应该找个机会实践一下,而且前段时间,贱内(希望我老婆看不到这篇文章:))让我帮她做个定时提醒的小工具,做好之后感觉以前做了好多自己能用的小工具,如果能够整合到一起,该多好,所以,想起来做个个人工具集成平台,用来继承一系列我自己的以前做过的小软件。 知识背景 主要的知识背景是基于WPF的框架Prism,这个框架是微软的CodePlex中的一个Team开发的平台,现如今貌似已经发布4.0了。唉,说到这里,我以前的公司就是用的这个框架做的应用程序,现在的公司虽然比以前的公司待遇好了,不过用不着做WPF了,也基本上不使用任何框架开发,郁闷啊,呵呵,发发牢骚。在我的“个人平台”里面,没有使用整个框架,只是将框架减配加到我的基础类库里面。使用的东西包括,“Bootstrapper”,“ServiceLocator”,还有“Modularity”,而且我只是借用了他们的思想,然后进行了轻量级的实现。特别是其中的“Modularity”部分,我使用了微软推出的MEF架构进行了简单的实现,经过单元测试,效果不错。 大家如果有兴趣研究Prism的知识,可以访问下面的链接: http://compositewpf.codeplex.com/ 应用程序的外壳使用WPF的应用程序,并且采用了MVVM模式,个人感觉这种方式更有利于子系统的集成。希望大家要是进行WPF的开发一定要关注这种模式,能够带来很多好处,比如:解耦、利于单元测试、界面利于更换等等。 名词解释 模块: 实现应用程序(个人集成平台)功能的各个部分; 子系统: 能够集成到应用程序(个人集成平台)中的各个功能插件; 系统结构 图1 Personal Integration Platform系统结构图 (1). Personal.Component 作为基础模块,借助于Prism的思想,轻量级的实现了部分Prism的功能。包括Bootstrapper,ServiceLocator,以及Modularity(使用MEF架构)。 (2). Personal.Presentation 作为基础模块,对WPF的MVVM模式进行了简单的支持。 (3). IntegrationUtilities 对子系统集成的逻辑进行支持,在此模块中定义了集成的规范的数据结构,以及用于子系统集成的服务(服务的概念借助于Prism中的ServiceLocator)。 (4). PersonalIntegrationPlatform 个人集成平台,这个也就是这个应用程序最核心的部分,整个应用程序的入口,外壳程序。 (5). NotifyIconWpf 一个第三方的开源WPF控件,用过Winform的同志们都知道,NotifyIcon是个系统托盘。因为我希望的是,我的软件运行后直接运行在托盘中,而不是在桌面上占据个Form跑着,我觉得大家平时用软件,肯定没有那么多时间老是盯着一个Form在那里操作,因此,我觉得采用系统托盘的方式比较好,需要的时候打开,不需要的时候,就在系统托盘里面呆着。 (6). Sub-System 子系统,可以有任何有.net知识的人员开发并且集成到平台中,只要符合集成平台的集成规范就可以。现在已经默认集成了ShutDown子系统,后续还会集成我原来做过的一些比较有用的小程序。呵呵,大家有兴趣,也可以按照继承规范,向里面集成一些自己喜欢的子系统。 使用技术思想 谈到技术思想,主要的思想其实就是面向对象,因为那几个所谓的SOLID思想都是由面向对象的思想衍生出来的。希望大家读到我的这篇文章,不能够奢望大家有收获,但是,希望大家能够不把注意力过于集中到使用的技术,或者编程的技巧,而是集中到系统的结构以及技术思想的运用上。也就是说,不在乎怎么实现,而是在乎怎么组织。嘿嘿,这样就是我为啥给大家看这个系统的结构图,而不是代码的原因,在后面会附上这个项目的源代码,如果对大家有用的话,大家可以拿去看看。 集成方法 (1). MEF框架 MEF框架应该是微软在.net 4.0中推出的一种框架,我理解,主要就是运用IOC的思想进行解耦。最大的好处就是可扩展,这个思想其实早就有,想设计模式中的观察者模式,IOC/DI的思想,以及好莱坞原则,其实都是运用的这种松耦合,可扩展的模式设计的。所谓的松耦合,不是没有耦合,而是耦合到基础的框架,什么叫基础框架,就是谁都能耦合的框架,比如: 如果你写的是.net的应用程序,那你肯定要与.net进行耦合,所以解耦的概念是相对的,耦合才是绝对的。 这里只是想为大家引入这个概念与这种思想,这里并不对MEF进行详细说明,毕竟这种框架实现起来很简单,有兴趣的朋友可以查查MSDN。 (2). 配置文件 在配置文件中,配置扫描子系统的方式,文件夹扫描、程序集扫描或者混合扫描。 文件夹扫描——你需要在系统配置文件中制定要扫描的文件夹,MEF框架会去制定的文件夹中扫描; 程序集扫描——在配置文件中将扫描方式修改为程序集扫描,MEF框架会扫描当前AppDomain中所有的程序集; 混合扫描 ——呵呵,顾名思义,前两种方式的结合; (3). 引用基础架构 需要引用上面系统结构图中所述的基础结构Personal.Component、Personal.Presentation以及IntegrationUtilities。记住咱们在第一点里面提到的,解耦是相对的,耦合是绝对的。 Benifits 这个平台有什么好处呢? 第一,让我练习了Prism和WPF,哈哈; 第二,提供了一个相对可扩展的系统,大家如果使用这个平台,以后只需要开发可集成的类库即可将子系统集成到平台中,节省了开发成本; 第三,由于平台使用了MVVM的模式,因此,能够轻而易举的换掉外壳程序,瞬间可以是应用程序变成你想要的样子。 Roadmap 我将会不断的更新平台,以后可能还会制作网络模块,让大家能够把自己的配置以及数据上传到服务器中,实现异地使用。后话后话,哈哈。