[WPF+Prism]WPF个人集成平台

  前段时间学习了一下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

  我将会不断的更新平台,以后可能还会制作网络模块,让大家能够把自己的配置以及数据上传到服务器中,实现异地使用。后话后话,哈哈。

运行结果

  

源码

  http://download.csdn.net/detail/yangfeiyang/6437757

 

转载于:https://www.cnblogs.com/Frank-yafeya/p/WPF%e4%b8%aa%e4%ba%ba%e9%9b%86%e6%88%90%e5%b9%b3%e5%8f%b0.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值