天天看點

重構筆記---MEF架構(下)

概述

上一篇介紹了MEF的一個很簡單很基本的應用,實作了MEF架構并展示了MEF架構的一些基本的要求和設定,這些基礎知識很重要,接下來我們分析一下如何擴充或增強MEF架構内容。

增強的Contract類庫

其實有了上篇的介紹,讀者很快會發現,Contract類庫制約性很強,或者說“它”隻引用了windows自帶的System.XXX類型的公共類庫,而往往在協定中我們是要引用我們實際項目工程中的方法和成員,這樣就導緻了要依賴一個非系統的公共類庫,例如Practise_MEF.Core。那能否還能實作,我的插件僅僅生成一個“類庫DLL”呢?

首先我們來看一下依賴性圖解:

重構筆記---MEF架構(下)

這裡所有項目工程都将依賴于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插件架構成為可能。

由于此項目尚在開中,故相關代碼不宜公開。

作者:Stephen Cui

出處:http://www.cnblogs.com/cuiyansong

版權聲明:文章屬于本人及部落格園共有,凡是沒有标注[轉載]的,請在文章末尾加入我的部落格位址。

如果您覺得文章寫的還不錯,請點選“推薦一下”,謝謝。