zoukankan      html  css  js  c++  java
  • 重构笔记---MEF框架(下)

    概述

    上一篇介绍了MEF的一个很简单很基本的应用,实现了MEF框架并展示了MEF框架的一些基本的要求和设置,这些基础知识很重要,接下来我们分析一下如何扩展或增强MEF框架内容。

    增强的Contract类库

    其实有了上篇的介绍,读者很快会发现,Contract类库制约性很强,或者说“它”只引用了windows自带的System.XXX类型的公共类库,而往往在协议中我们是要引用我们实际项目工程中的方法和成员,这样就导致了要依赖一个非系统的公共类库,例如Practise_MEF.Core。那能否还能实现,我的插件仅仅生成一个“类库DLL”呢?

    首先我们来看一下依赖性图解:

    这里所有项目工程都将依赖于Core,这其中Practise_MEF和Practise_MEF.contract是直接引用(Copy Local = true),Practise_MEF.Plugin.MultiCalculateEx是间接引用(Copy Local = false),这里CalculateEx这个项目没有引用Core,如果引用的话也为间接引用。扩展库通过间接引用后将不产生或复制Core.DLL,而是依赖于宿主(一般指调用扩展类库的UI类库,这里是Practise_MEF),这样插件类库只会产生本身类库的DLL而不会产生引用的DLL,至少看起来比较工整。

    项目重构

    有了上面这些技术上的铺垫,我们就为重构为MEF架构的软件提供了一条光明的道路。然而,道路永远是曲折的。

    首先,既然框架式基于协议的,那就得分析要重构的项目中哪些是公共的属性、方法,以便提取出接口,这是至关重要的,如果没有共性,那重构本身的意义并不是很大。

    在整理、提取项目核心类库的过程中,我认为一下几个方面值得提出到Core中:

    1. BaseForm
    2. 基础的Module/Entity/Objects
    3. 接口Interface
    4. 枚举Enum
    5. 委托Delegate
    6. 工具类Utility
    7. 基础方法Fucntion

    。。。

    其它,业务逻辑、非基础方法则提取到BLL等上层模块中。

    Docker框架

    在Winform下推荐WeifenLuo的DockPanel插件,这个插件实现起来简单方便、功能强大,可以将插件的Form作为Docker的一个子集加入其中,布局上类似于Visual Studio 编辑器。

    介绍WeifenLuo:

    http://www.cnblogs.com/wuhuacong/archive/2009/07/09/1520082.html

    总结

    有了以上三个方面的积累,使得重构成为MEF插件框架成为可能。

    由于此项目尚在开中,故相关代码不宜公开。

  • 相关阅读:
    js获取input file文件二进制码
    nginx新手入门
    代码神器Atom,最常用的几大插件,你值得拥有。
    css3 3d 与案例分析
    express搭建简易web的服务器
    hosts文件管理和nginx总结
    css3 3D
    问题大神
    面试题整理
    版本控制简介,git使用----使用GitHub托管代码
  • 原文地址:https://www.cnblogs.com/cuiyansong/p/4152863.html
Copyright © 2011-2022 走看看