Atitit 插件机制原理与设计微内核 c# java 的实现attilax总结
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Atitit 插件机制原理与设计微内核 c# java 的实现attilax总结,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3813字,纯文字阅读大概需要6分钟。
内容图文
Atitit 插件机制原理与设计微内核 c# java 的实现attilax总结
3.2. 必须手动throw stop ex终止,负责自动接续。。 4
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://blog.csdn.net/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
版权声明:本文为博主原创文章,未经博主允许不得转载。
Atitit 插件机制原理与设计微内核 c# java 的实现attilax总结
原文:http://blog.csdn.net/attilax/article/details/47740517
内容总结
以上是互联网集市为您收集整理的Atitit 插件机制原理与设计微内核 c# java 的实现attilax总结全部内容,希望文章能够帮你解决Atitit 插件机制原理与设计微内核 c# java 的实现attilax总结所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。