日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

Atitit 插件机制原理与设计微内核 c# java 的实现attilax总结

發布時間:2023/12/19 C# 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Atitit 插件机制原理与设计微内核 c# java 的实现attilax总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Atitit?插件機制原理與設計微內核?c#?java?的實現attilax總結?

?

1.?微內核與插件的優點1

2.?插件的注冊與使用2

2.1.?Ioc容器中注冊插件2

2.2.?啟動器微內核啟動3

3.?插件的倆種執行策略3

3.1.?必須手動接續,否則自動終止(推薦)3

3.2.?必須手動throw??stop?ex終止,負責自動接續。。4

4.?插件鏈的生成原理4

5.?-------code4

6.?參考7

?

1.?微內核與插件的優點

?

但凡有生命力的產品,都是在擴展性方面設計的比較好的,因為沒有哪個產品可以覆蓋所有需求,對于開源軟件尤其如此。所以,產品只有具有良好的擴展性,允許用戶或第三方參與進來,進行二次開發,才能保持生命力。

怎么樣的擴展性才是最好的?通常來講,就是沒有任何功能是硬編碼的,所有的功能都可被用戶替換。

?

原作者應把自己也當作擴展者,自己添加功能時,也要用第三方擴展者同樣的方式進行,而不要有特權。

要做到這一點,就需要一個良好的框架支撐,“微內核+插件”是一個不錯的選擇,Eclipse、Maven等知名軟件都采用該體系。

?

什么是“微內核+插件”?微內核,即最小化核心,內核只負責插件的組裝,不帶任何功能邏輯,所有功能都由可替換的插件實現,并且,組裝過程應基于統一的規則,比如基于setter注入,而不能對不同插件硬編碼組裝,這樣可以確保沒有任何功能在內核中硬編碼。比如:Spring,?OSGI,?JMX,?ServiceLoader等都是常見的微核容器,它們負責基于統一規則的組裝,但不帶功能邏輯。

非功能性的插件組裝過程,可以由微內核框架來完成,那功能性的組裝怎么辦呢?我們可以把功能性的組裝過程也封裝成插件,即讓大插件組裝小插件,形成級聯組裝關系。

?

?

?

2.?插件的注冊與使用

2.1.?Ioc容器中注冊插件

??????????FilterFilterChain?plugx?=?new?FilterFilterChain();

?

??????????plugx.add_action("ini",?new?G().m1);

?

?

作者::?老哇的爪子?Attilax?艾龍,??EMAIL:1466519819@qq.com

轉載請注明來源:?http://www.cnblogs.com/attilax/

?

?

2.2.?啟動器微內核啟動

????public?partial?class?App?:?Application

????{

????//????this.StartupEventArgs

?

??????

?

????????public?App()

????????{

?

?

????????????IocX.ini();

?

????????????FilterFilterChain?plugx?=?new?FilterFilterChain();

????????????plugx.do_action("ini",null,null);

?????????????Console.WriteLine("---f");

??????????????????}

???????

??????

????????}

}

?

?

?

3.?插件的倆種執行策略

3.1.?必須手動接續,否則自動終止(推薦)

?

Java的就是這個。

這個比較好,可以支持ajax。。。。

可以漏斗形閃入閃出調用。。折回調用。。

?

?

//for?ajax?,must?trans?in?param

do_action("submit_before_check",mp,submitx2);

3.2.?必須手動throw??stop?ex終止,負責自動接續。。

?

?

?

?

在以下情況下web?container不能把filter加載到service中:?

·?

·?拋出ServletException異常。

·?container定義的時間內沒有返回。

?

?

?

4.?插件鏈的生成原理

遍歷委托方法List,生成LIST

遍歷List,設置nextChain為下一個。。

啟動插件流程。。

??FilterFilterChain???firstChain?=?chains[0];

????????????filterHandler?hd?=?firstChain.handler;

????????????hd(args,firstChain.nextChain);

?

5.?-------code

using?System;

using?System.Collections;

using?System.Collections.Generic;

using?System.Linq;

using?System.Text;

using?System.Threading.Tasks;

?

namespace?ClassLibrary1.com.attilax.lang

{

????public?class?FilterFilterChain

????{

????????public?static?Dictionary<String,?IList<filterHandler>>?pluginsAti?=?new?Dictionary<string,?IList<filterHandler>>();

????????public?delegate?Object?filterHandler(Object?obj,?FilterFilterChain?nextChain);//第一步:定義委托類型

?

????????filterHandler?handler;?//filter

?????//???private?FilterFilterChain?next1;

??????//??private?filterHandler?filterHandler;

?

?

????????public?FilterFilterChain()

????????{

????????}

?

????????public?void?add_action(String?hookPoint,?filterHandler?func)

????????{

????????????

?????????

?

????????????try

????????????{

????????????????pluginsAti[hookPoint].Add(func);

????????????}

????????????catch?(KeyNotFoundException?e)

????????????{

????????????????pluginsAti.Add(hookPoint,?new?List<filterHandler>());

????????????????pluginsAti[hookPoint].Add(func);

????????????}

????????????//?????pluginsAti.hookPoint.push(func);

????????}

?

?

?

????????public?void?do_action(String?hookPoint,?object?args,?filterHandler?fltFinishCallback)

????????{

???????????

?????????

???????????

??????????

????????????IList<filterHandler>?fun_arr?=?pluginsAti[hookPoint];

?

?

??????????

????????????

???????????//===============add?to?list

????????????IList<FilterFilterChain>?chains?=?new?List<FilterFilterChain>();

?

????????????for?(var?i?=?0;?i?<?fun_arr.Count;?i++)

????????????{

?

?

????????????????FilterFilterChain?cur?=?new?FilterFilterChain();

????????????????cur.handler?=?fun_arr[i];

????????????????chains.Add(cur);

?

?

????????????}

?

????????????if?(fltFinishCallback?!=?null)

????????????{

????????????????FilterFilterChain?next2?=?new?FilterFilterChain();

????????????????next2.handler?=?fltFinishCallback;

?

????????????????chains.Add(next2);

????????????}

?

????????????///set?next?

????????????for?(var?i?=?0;?i?<?chains.Count;?i++)

????????????{

????????????????try

????????????????{

????????????????????chains[i].nextChain?=?chains[i?+?1];

????????????????}

????????????????catch?(ArgumentOutOfRangeException?e)?{?}

?

????????????}

????????????chains[chains.Count?-?1].nextChain?=?new?FilterFilterChain();

????????????//??fn(mp);

?

????????????FilterFilterChain???firstChain?=?chains[0];

????????????filterHandler?hd?=?firstChain.handler;

????????????hd(args,firstChain.nextChain);

?

????????}

?

????????public?void?doFilter(Object?data)

????????{

?

????????????????filterHandler?hd?=?this.handler;

???????????????if(hd!=null)

????????????????hd(data,?this.nextChain);

?

?

?

????????}

?

?

?

?

?

????????public?FilterFilterChain?nextChain?{?get;?set;?}

?

?

?

???????

????}

}

?

?

?

6.?參考

Atitit.wordpress插件機制原理與設計?attilax?總結

Atitit.java?filter插件機制原理與?attilax總結.doc

?

轉載于:https://www.cnblogs.com/attilax/p/4738207.html

總結

以上是生活随笔為你收集整理的Atitit 插件机制原理与设计微内核 c# java 的实现attilax总结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。