基于MVC和AutoFac的插件架構(gòu)的實(shí)現(xiàn)方法
【專利摘要】本發(fā)明的一種基于MVC和AutoFac的插件架構(gòu)的實(shí)現(xiàn)方法屬于數(shù)據(jù)處理【技術(shù)領(lǐng)域】。該插件架構(gòu)的實(shí)現(xiàn)方法包括如下步驟:S1,定義平臺(tái)插件接口;S2,實(shí)現(xiàn)基礎(chǔ)類的方法;S3,基于MVC架構(gòu)進(jìn)行插件編寫,添加插件基礎(chǔ)描述,插件的基本信息以及安裝時(shí)需要讀取的信息。本發(fā)明的插件架構(gòu)的實(shí)現(xiàn)方法通過(guò)MVC和AutoFac設(shè)計(jì)一套高效靈活的插件機(jī)制,使得系統(tǒng)高效處理核心流程和數(shù)據(jù),把與具體業(yè)務(wù)相關(guān)的功能交給插件實(shí)現(xiàn),提高系統(tǒng)的靈活性以及可擴(kuò)展性,適應(yīng)系統(tǒng)的不斷更新?lián)Q代。
【專利說(shuō)明】基于MVC和AutoFac的插件架構(gòu)的實(shí)現(xiàn)方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及系統(tǒng)數(shù)據(jù)處理【技術(shù)領(lǐng)域】,尤其涉及一種基于MVC和AutoFac的插件架構(gòu)的實(shí)現(xiàn)方法。
【背景技術(shù)】
[0002]隨著互聯(lián)網(wǎng)的發(fā)展及政府企業(yè)信息化的日益發(fā)展及普及,信息系統(tǒng),特別是互聯(lián)網(wǎng)應(yīng)用,需要更大的開放性以及不斷的擴(kuò)展更新,插件機(jī)制、MVC設(shè)計(jì)模式均得到廣泛的應(yīng)用。但目前,插件機(jī)制的設(shè)計(jì)模式往往與MVC無(wú)法很好地整合,插件無(wú)法充分利用MVC的優(yōu)勢(shì),做到最大程度的靈活。
【發(fā)明內(nèi)容】
[0003]為了解決上述技術(shù)問(wèn)題,本發(fā)明的目的是提供一種基于MVC和AutoFac的插件架構(gòu)的實(shí)現(xiàn)方法,該插件架構(gòu)的實(shí)現(xiàn)方法通過(guò)MVC和AutoFac設(shè)計(jì)一套高效靈活的插件機(jī)制,使得系統(tǒng)高效處理核心流程和數(shù)據(jù),把與具體業(yè)務(wù)相關(guān)的功能交給插件實(shí)現(xiàn),提高系統(tǒng)的靈活性以及可擴(kuò)展性,適應(yīng)系統(tǒng)的不斷更新?lián)Q代。
[0004]本發(fā)明的目的是通過(guò)以下技術(shù)方案實(shí)現(xiàn)的:
[0005]一種基于MVC和AutoFac的插件架構(gòu)的實(shí)現(xiàn)方法,包括如下步驟:
[0006]SI,定義平臺(tái)插件接口;
[0007]S2,實(shí)現(xiàn)基礎(chǔ)類的方法;
[0008]S3,基于MVC架構(gòu)進(jìn)行插件編寫,添加插件基礎(chǔ)描述,插件的基本信息以及安裝時(shí)需要讀取的信息。其中所有的Model均實(shí)現(xiàn)IModel,所有的ControlIer均實(shí)現(xiàn)IController,若用到AutoFac反射,則定義DependencyRegistrar ;通過(guò)實(shí)現(xiàn)IRouteProvider,注冊(cè)所有路由;實(shí)現(xiàn)IPlugin或繼承BasePlugin,實(shí)現(xiàn)安裝及卸載方法。
[0009]通過(guò)上述本發(fā)明的技術(shù)方案,本發(fā)明的插件架構(gòu)的實(shí)現(xiàn)方法提出一種基于MVC的插件機(jī)制,利用AutoFac的優(yōu)秀1C(控制反轉(zhuǎn))框架,設(shè)計(jì)出一種可以靈活擴(kuò)展的插件機(jī)制及方法。
[0010]具體效果為:定義一套完善的接口,把系統(tǒng)的細(xì)節(jié)交給系統(tǒng)外的處理,系統(tǒng)只控制每個(gè)業(yè)務(wù)的總體流程。通過(guò)MVC規(guī)范每個(gè)插件的設(shè)計(jì)模式,并利用AutoFac的高效1C機(jī)制,設(shè)計(jì)一套高效靈活的插件機(jī)制,使得系統(tǒng)高效處理核心流程,把與具體業(yè)務(wù)相關(guān)的功能交給插件實(shí)現(xiàn),提高系統(tǒng)的靈活性以及可擴(kuò)展性,適應(yīng)系統(tǒng)的不斷更新?lián)Q代。
【專利附圖】
【附圖說(shuō)明】
[0011]圖1為本發(fā)明的插件架構(gòu)的實(shí)現(xiàn)方法的流程框圖;
[0012]圖2為本發(fā)明的插件機(jī)制總體架構(gòu)圖;
[0013]圖3為本發(fā)明的插件機(jī)制詳細(xì)結(jié)構(gòu)圖;
[0014]圖4為本發(fā)明的插件工作流程。
【具體實(shí)施方式】
[0015]下面結(jié)合附圖對(duì)本發(fā)明的【具體實(shí)施方式】進(jìn)行詳細(xì)說(shuō)明:
[0016]如圖1所示,一種基于MVC和AutoFac的插件架構(gòu)的實(shí)現(xiàn)方法,包括如下步驟:
[0017]SI,定義平臺(tái)插件接口;
[0018]S2,實(shí)現(xiàn)基礎(chǔ)類的方法;
[0019]S3,基于MVC架構(gòu)進(jìn)行插件編寫,添加插件基礎(chǔ)描述,插件的基本信息以及安裝時(shí)需要讀取的息。
[0020]如圖2和圖3所示,所述的步驟SI定義平臺(tái)插件接口包括在平臺(tái)的架構(gòu)中,增加以下接口:
[0021]IPlugin:插件的操作接口,包括設(shè)置插件的屬性信息,安裝插件接口,卸載插件接口,定義安裝方法以及卸載方法。
[0022]IPluginFinder接口,為獲取插件的信息接口,定義關(guān)于獲取插件信息的基礎(chǔ)方法。
[0023]IRouteProvider,為路由注冊(cè)接口,定義路由注冊(cè)方法。
[0024]IRoutePublisher,為路由發(fā)布接口,定義路由發(fā)布方法。
[0025]IController,定義相關(guān)Act1n的基礎(chǔ)方法。
[0026]IModel,定義與本平臺(tái)相關(guān)的基礎(chǔ)實(shí)現(xiàn)方法,所述的IModel包括ToString。
[0027]IService,用于插件調(diào)用平臺(tái)的相關(guān)接口,定義基礎(chǔ)的業(yè)務(wù)邏輯方法。所述的IService 包括 Insert、Update、delete、FindOne 或 FindAll 方法。
[0028]如圖2、圖3和圖4所示,所述的步驟S2實(shí)現(xiàn)基礎(chǔ)類的方法包括在平臺(tái)的架構(gòu)中,增加以下方法:
[0029]RoutePublisher,實(shí)現(xiàn)IRouteProvider中的所有方法,利用AutoFac反射出所有路由注冊(cè)類,并對(duì)所有路由進(jìn)行注冊(cè)。
[0030]BasePlugins,實(shí)現(xiàn) IPlugin 的所有方法。
[0031]PluginDescriptor,插件的實(shí)體類,所述的PluginDescriptor包含插件的版本、描述,類型,文件名稱和作者等一系列狀態(tài)。
[0032]PluginFileParser,包含對(duì)插件的實(shí)體操作方法,所述的PluginFileParser包括寫入插件的描述信息,用于解析插件文件,讀入插件配置,安裝插件和保存插件配置。
[0033]PluginFinder,加載所有的插件,并獲取它們的信息,供平臺(tái)調(diào)用插件的所有方法,及用于獲取插件的數(shù)據(jù)。
[0034]PluginManager,插件管理的主類,為平臺(tái)提供插件的安裝、保存以及卸載的方法。
[0035]XXXService,實(shí)現(xiàn)IService,實(shí)現(xiàn)讀取本平臺(tái)數(shù)據(jù)的方法。所述的XXXService中的方法包括 Insert、Update、delete、FindOne 或 FindAll。
[0036]所述的步驟S3插件編寫包括基于MVC開發(fā)插件具體功能,其中所有的Model均實(shí)現(xiàn)IModel,所有的Controller均實(shí)現(xiàn)IController,若用到AutoFac反射,則定義DependencyRegistrar ;通過(guò)實(shí)現(xiàn)IRouteProvider,注冊(cè)所有路由;實(shí)現(xiàn)IPlugin或繼承BasePlugin,實(shí)現(xiàn)安裝及卸載方法。
[0037]下面對(duì)附圖作一詳盡說(shuō)明:
[0038]如圖2所示,本發(fā)明中基于MVC及Autofac的插件機(jī)制,是基于接口的插件機(jī)制,包括以下接口模塊:
[0039]平臺(tái)接口模塊,IService。此處IService是最基礎(chǔ)的接口,它是一切Service層(服務(wù)層)所有類的基礎(chǔ)接口,只要實(shí)現(xiàn)了 ISerVice的SerVice類,均可無(wú)縫地被插件所調(diào)用,使得插件能夠統(tǒng)一、規(guī)范地讀取系統(tǒng)的數(shù)據(jù)。
[0040]插件接口模塊,包括:IModel、IController以及IRoute。由于本發(fā)明是基于MVC模式的,MVC模式的核心包含Model、Controller以及View,并通過(guò)Route處理路徑解釋的。而Model、Controller以及Route涉及到核心數(shù)據(jù),因此通過(guò)IModel、IController以及IRoute接口的規(guī)范,使得平臺(tái)能夠統(tǒng)一、規(guī)范的獲得插件的數(shù)據(jù)。而View主要用于頁(yè)面顯示,與數(shù)據(jù)規(guī)范性無(wú)關(guān),因此本發(fā)明中的機(jī)制無(wú)需設(shè)計(jì)View的接口。
[0041]關(guān)于MVC的整體機(jī)制,如圖2右邊(插件項(xiàng)目)所示,插件必須給予MVC模式開發(fā),并且所有的Model及Controller必須實(shí)現(xiàn)平臺(tái)的IModel以及IController,插件頁(yè)面的路由(Route)需經(jīng)過(guò)平臺(tái)的路由規(guī)范管理,并在平臺(tái)中注冊(cè)路由,因此需要實(shí)現(xiàn)IRoute接口。當(dāng)有路徑發(fā)出請(qǐng)求,系統(tǒng)根據(jù)實(shí)現(xiàn)的Route,找出對(duì)應(yīng)的Controller,并調(diào)用對(duì)應(yīng)具體的act1n,從Model中獲取數(shù)據(jù),并返回相應(yīng)的View,返回給用戶。
[0042]圖1中所示,本發(fā)明中,所有的接口實(shí)現(xiàn)均基于AutoFac進(jìn)行反射。
[0043]如圖2所示,是本發(fā)明中的基于MVC及AutoFac的插件機(jī)制詳細(xì)結(jié)構(gòu)圖,主要是關(guān)于平臺(tái)如何管理插件的詳細(xì)架構(gòu)圖。
[0044]IPlugin,插件的操作接口,主要有設(shè)置插件的屬性信息,安裝插件接口,卸載插件接口。
[0045]BasePlugins,實(shí)現(xiàn)IPlugin的所有方法,基礎(chǔ)的接口類,一般的插件繼承此類。
[0046]IPluginFinde 接口,獲取插件的信息接口,在 AutoFac 里的 DependencyRegistrar注冊(cè)此接口。系統(tǒng)啟動(dòng)的時(shí)候會(huì)加載到內(nèi)存里。
[0047]PluginDescriptor,插件的實(shí)體類,包含了插件的版本、描述,類型,文件名稱,作者等一系列狀態(tài)。
[0048]PluginFileParser,包含對(duì)插件的實(shí)體操作方法,主要是寫入插件的描述信息,用于解析插件文件,讀入插件配置,安裝插件,保存插件配置等。
[0049]PluginFinder,加載所有的插件,并獲取它們的信息,主要供平臺(tái)調(diào)用插件的所有方法,及用于獲取插件的數(shù)據(jù)。
[0050]PluginManager,插件管理的主類,為平臺(tái)提供插件的安裝、保存以及卸載的方法。
[0051]關(guān)于插件MVC的路由的接口 IRoute 分為 IRouteProvider 以及 IRoutePublisher。IRouteProvider主要是插件接口,每個(gè)插件需要注冊(cè)路由,必須實(shí)現(xiàn)IRouteProvider,而IRoutePublisher是平臺(tái)接口,平臺(tái)實(shí)現(xiàn)了此方法,用于發(fā)布所有實(shí)現(xiàn)了 IRouteProvider的插件類,并把實(shí)現(xiàn)了的路由注冊(cè)到系統(tǒng)中。
[0052]本發(fā)明中,所有的接口均通過(guò)AutoFac的1C機(jī)制進(jìn)行反射。
[0053]如圖3所示,插件機(jī)制的工作流程如下:
[0054]每個(gè)插件新建時(shí),必須實(shí)現(xiàn)IPlugin或者繼承BasePlugin,若需要多個(gè)路由,貝丨J實(shí)現(xiàn)IMiscPlugin。此處插件的實(shí)現(xiàn)類,實(shí)現(xiàn)了安裝方法以及卸載方法。同時(shí)插件建立好插件的描述信息,供平臺(tái)安裝插件時(shí)使用。
[0055]插件必須遵循MVC模式設(shè)計(jì),每一個(gè)Model以及Controller必須實(shí)現(xiàn)IModel以及IController。路由的注冊(cè),必須通過(guò)實(shí)現(xiàn)IRouteProvider的類進(jìn)行注冊(cè)。
[0056]插件可以通過(guò)AutoFac把IService的具體類反射出來(lái)并調(diào)用,達(dá)到讀取平臺(tái)數(shù)據(jù)的功能。
[0057]平臺(tái)根據(jù)插件的描述信息以及實(shí)現(xiàn)的安裝以及卸載類,通過(guò)AutoFac的1C映射出插件具體的安裝方法安裝插件。安裝成功后即把插件注冊(cè)到平臺(tái)中。
[0058]安裝時(shí),平臺(tái)通過(guò)AutoFac的1C機(jī)制,把插件中的Model、Controller以及路由的注冊(cè)類反射到平臺(tái)中。
[0059]當(dāng)有請(qǐng)求送達(dá)時(shí),平臺(tái)通過(guò)安裝時(shí)注冊(cè)的路由,對(duì)路徑進(jìn)行分析,根據(jù)AutoFac反射出的具體Controller中具體的Act1n進(jìn)行處理,并返回相應(yīng)的View返回給用戶。
[0060]以上所述,僅為本發(fā)明較佳的【具體實(shí)施方式】,但本發(fā)明的保護(hù)范圍并不局限于此,任何熟悉本【技術(shù)領(lǐng)域】的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到的變化或替換,都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。因此,本發(fā)明的保護(hù)范圍應(yīng)該以權(quán)利要求書的保護(hù)范圍為準(zhǔn)。
【權(quán)利要求】
1.一種基于MVC和AutoFac的插件架構(gòu)的實(shí)現(xiàn)方法,其特征在于,包括如下步驟: Si,定義平臺(tái)插件接口 ; S2,實(shí)現(xiàn)基礎(chǔ)類的方法; S3,基于MVC架構(gòu)進(jìn)行插件編寫,添加插件基礎(chǔ)描述,插件的基本信息以及安裝時(shí)需要讀取的信息。
2.根據(jù)權(quán)利要求1所述的插件架構(gòu)的實(shí)現(xiàn)方法,其特征在于,所述的步驟SI包括在平臺(tái)的架構(gòu)中,增加以下接口: IPlugin:插件的操作接口,包括設(shè)置插件的屬性信息,安裝插件接口,卸載插件接口,定義安裝方法以及卸載方法; IPluginFinder接口,為獲取插件的信息接口,定義關(guān)于獲取插件信息的基礎(chǔ)方法; IRouteProvider,為路由注冊(cè)接口,定義路由注冊(cè)方法; IRoutePublisher,為路由發(fā)布接口,定義路由發(fā)布方法; IController,定義相關(guān)Act1n的基礎(chǔ)方法; IModel,定義與本平臺(tái)相關(guān)的基礎(chǔ)實(shí)現(xiàn)方法; IService,用于插件調(diào)用平臺(tái)的相關(guān)接口,定義基礎(chǔ)的業(yè)務(wù)邏輯方法。
3.根據(jù)權(quán)利要求2所述的插件架構(gòu)的實(shí)現(xiàn)方法,其特征在于,所述的IModel包括ToString0
4.根據(jù)權(quán)利要求2所述的插件架構(gòu)的實(shí)現(xiàn)方法,其特征在于,所述的IService包括Insert、Update、delete、FindOne 或 FindAll 方法。
5.根據(jù)權(quán)利要求1所述的插件架構(gòu)的實(shí)現(xiàn)方法,其特征在于,所述的步驟S2包括在平臺(tái)的架構(gòu)中,增加以下方法: RoutePublisher,實(shí)現(xiàn)IRouteProvider中的所有方法,利用AutoFac反射出所有路由注冊(cè)類,并對(duì)所有路由進(jìn)行注冊(cè); BasePlugins,實(shí)現(xiàn)IPlugin的所有方法; PluginDescriptor,插件的實(shí)體類; PluginFileParser,包含對(duì)插件的實(shí)體操作方法; PluginFinder,加載所有的插件,并獲取它們的信息,供平臺(tái)調(diào)用插件的所有方法,及用于獲取插件的數(shù)據(jù); PluginManager,插件管理的主類,為平臺(tái)提供插件的安裝、保存以及卸載的方法; XXXService,實(shí)現(xiàn)IService,實(shí)現(xiàn)讀取本平臺(tái)數(shù)據(jù)的方法。
6.根據(jù)權(quán)利要求5所述的插件架構(gòu)的實(shí)現(xiàn)方法,其特征在于,所述的PluginDescriptor包含插件的版本、描述,類型,文件名稱和作者狀態(tài)。
7.根據(jù)權(quán)利要求5所述的插件架構(gòu)的實(shí)現(xiàn)方法,其特征在于,所述的PluginFi IeParser包括寫入插件的描述信息,用于解析插件文件,讀入插件配置,安裝插件和保存插件配置。
8.根據(jù)權(quán)利要求5所述的插件架構(gòu)的實(shí)現(xiàn)方法,其特征在于,所述的XXXService中的方法包括 Insert、Update、delete、FindOne 或 FindAll。
9.根據(jù)權(quán)利要求1所述的插件架構(gòu)的實(shí)現(xiàn)方法,其特征在于,所述的步驟S3包括基于MVC開發(fā)插件具體功能,其中所有的Model均實(shí)現(xiàn)IModel,所有的Controller
b。銀練著--笨 ^xSnidaseg 承臶笹 uiSnui 臉笨:^θΡΙλο^^οηιΠ/^-TV TTrv < XT-) Tl oxQ^at r^TT^T^TT^rT^^T~~U t.W: 6 卜 f/ ^7 ^τ->r-ητ t.-T Π / M/ ?τηττ^τι τταα τ Π/^Γ>ζ
【文檔編號(hào)】G06F9/445GK104166560SQ201410255786
【公開日】2014年11月26日 申請(qǐng)日期:2014年6月11日 優(yōu)先權(quán)日:2014年6月11日
【發(fā)明者】陳秋汝 申請(qǐng)人:深圳德協(xié)保稅電子商務(wù)有限公司