淺談OSGi.NET開放服務平臺和Discuz外掛系統
今天我先介紹一下該Store的核心OSGi.NET,同時也談一下我見過比較簡陋的外掛系統Discuz。
OSGi是一個開放服務規範,“開放”意味著基於該平臺可以使得很多人來共同使用和協作,而“服務”則是實現協作的一個手段。該規範可以總結為:A 外掛化支援規範; B 面向服務支援規範; C 外掛擴充套件規範; D 安全性與隔離性規範; E 系統服務規範。外掛化規範完整詳細定義了外掛的結構、外掛依賴、外掛類載入、L10N和I18N、宿主外掛和片段外掛;面向服務支援規範定義了模組間服務協作的支援,這個服務並不是傳統意義的企業級Web Service,確切的講,僅是“介面+實現”,並對實現的引用進行管理;外掛擴充套件規範定義了一個外掛如何對另一個外掛進行擴充套件,這種擴充套件手段非常簡單,在這裡提出了擴充套件點概念;安全性與隔離性則要確保被核心載入的外掛不會對核心和其它外掛產生一些副作用,比如我們決不能允許一個非法的外掛來停止另一個外掛;系統服務規範則預定義了幾個系統服務。OSGi規範是基於Java編寫的,此前還沒有一個針對.NET平臺OSGi規範,原因在於.NET並不支援ava那樣優雅的類載入機制,不過還在我們目前都找到了繞過這些固有缺陷的方法並設計了針對.NET的規範。
我們團隊在設計OSGi.NET時候,把易用性放在首位,透過場景驅動來設計Usecase。從而,基於OSGi.NET開發一個外掛和開發一個.NET專案方式基本一樣(當然,我們並不認為目前已經做到最好了,易用性肯定還有很大的改進空間)。以下是一個Hello World的外掛,開發人員應該可以在5分鐘內開發一個Hello World外掛的。
1 在OSGi.NET的Plugins目錄下,建立一個Class Library Project,並建立一個MyActivator類。
1 using System;
2 using System.Collections.Generic;
3 using System.Text;
4 using UIShell.OSGi;
5
6 namespace UIShell.TestBundle
7 {
8 public class MyActivator : IBundleActivator
9 {
10 public void Start(IBundleContext context)
11 {
12 Console.WriteLine("Hello World! Plugin is started.");
13 }
14 public void Stop(IBundleContext context)
15 {
16 Console.WriteLine("Plugin is stopped.");
17 }
18 }
19}
20
2 定義一個Manifest.xml檔案
1 xml version="1.0" encoding="utf-8" ?>
2 Bundle Name="TestBundle"
3 SymbolicName="UIShell.TestBundle"
4 InitializedState="Started">
5 Activator Type="UIShell.TestBundle.MyActivator" />
6 Runtime>
7 Assembly Path="bin/Debug/UIShell.TestBundle.dll" Share="false" />
8 Runtime>
9 Bundle>
10
透過Console執行OSGi.NET後,這個外掛便會被核心載入啟動,然後Print出Hello World。
基於OSGi.NET外掛開發,一般只需做的事情有:(1)定義外掛要實現的功能;(2)判斷外掛是否需要引用其它外掛的功能,如果有,則可以透過A)在Runtime宣告一個Dependeny節點;B)在MyActivator.Start方法中使用context.GetService方法獲取依賴的服務;(3)透過定義Extension來擴充套件其它外掛功能,透過ExtensionPoint暴露擴充套件點。
對於Discuz的關注是始於我們在設計基於ASP.NET的Store的。在設計這個Store的時候,我想比較一下基於OSGi.NET的ASP.NET外掛平臺和其它外掛平臺。Discuz外掛系統是我見過設計的最為簡單也是最為簡陋的外掛系統了。我只看了一下反編譯的結果,就沒有深入研究它的慾望了。以下是透過反編譯看到的外掛定義。
它的外掛系統是基於介面和實現類來設計了。這種簡陋的設計從嚴格意義上來講不是一個外掛平臺,對開放性的支援也就更弱了,註定不可能有太多的人參與到這個產品外掛的設計與擴充套件了。此外,每次核心的升級都可能會導致原有的外掛無法正常使用。不過,這也可能是因為Discuz在產品設計階段並沒有提出開放性目標。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4798/viewspace-2800076/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- FInClip開放平臺:淺談輕應用的發展
- 開放式服務管理系統
- 高層次人才一站式服務平臺開發 人才綜合服務平臺系統
- 淺談直播教育平臺開發成本
- 淺談服務的治理
- 淺談 vue-cli 擴充套件性和外掛設計Vue套件
- 淺談服務閘道器和聯邦雲
- 淺談bootstrap表單驗證外掛BootstrapValidatorboot
- 由淺入深瞭解羚瓏平臺統一接入服務 —— Monet
- composer通用外掛平臺包
- 平臺開放外鏈訪問是共贏RK
- ai開放平臺AI
- 平臺化建設思路淺談
- 淺談 2018 移動端跨平臺開發方案
- 淺談支付系統開發基本流程
- OPPO開放平臺完善海外運營服務,賦能遊戲開發者出海遊戲開發
- 淺談NodeJS搭建GraphQL API服務NodeJSAPI
- composer通用外掛平臺包,開發進度2
- 高層次人才一站式服務平臺系統開發 探索全方位服務新模式模式
- 區塊鏈商品溯源平臺開發,區塊鏈公共服務系統開發方案區塊鏈
- 數位上線開放平臺,共建位置服務生態【歡迎體驗】
- 工行api開放平臺API
- 抖店開放平臺
- Dubbo Mesh - 從服務框架到統一服務控制平臺框架
- AI智慧體服務平臺-智慧客服系統-獨立部署搭建AI智慧體
- 淺談:服務架構進化論架構
- windows平臺,eclipse安裝maven外掛WindowsEclipseMaven
- 智簡魔方淺談IDC財務系統的作用
- 淺談CRM系統的選型和實施
- 開放閘道器統一認證服務
- 淺談surging服務引擎中的rabbitmq元件和容器化部署MQ元件
- 雲平臺設計系統,助力業務快速開發
- 熱點淺談:與傳統IT開發相比,低程式碼平臺有何優勢?
- 智慧黨建管理服務平臺建設,組織部幹部管理系統開發
- 智慧平安社群管理系統搭建,智慧社群一體化綜合服務平臺開發
- 區塊鏈商品溯源系統開發方案,區塊鏈公共服務平臺建設區塊鏈
- MineCraft - 服務端外掛指令彙總Raft服務端
- 大型直播平臺應用架構淺談應用架構