文章摘要:
- 一、什么是微内核架构
- 二、微内核架构适用的场景
- 三、简版的代码实现
- 四、典型案例
一、什么是微内核架构
微内核是一种典型的架构模式。由core 和 plugin 组成。core
二、微内核架构适用的场景
有点就是特别轻量化,适用做生态型的项目。核心core的职责:提供一套加载机制以及核心属性。把通信处理好。在项目运行过程中的不同时刻提供一些回调埋点出去,也就是生命周期。其他功能,由社区或是个人提供。
三、简版的代码实现
core 和 plugins 之间。 core 把 插件 连接起来,进行管理
core处理好几个方面:
- 加载机制
- 顺序机制
- 生命周期(明确的知道这个程序什么时候会执行,一些时机下埋入的callback)
- 通信机制(最最重要核心的机制)(分2种:core和plugin之间、plugin之间)
// 声明容器
const plugins = []//或是别的数据结构,new Map()
// 注册插件-往数组里塞东西
const registerPlugins = (plugin)=>{return plugins.push(plugin)}//收集装载
// 调用插件程序
const applyPlugins = (...args) => plugins.forEach(plugin => plugin.apply(this,...args))
const skipPlugin= ()=>{}
// 生命周期
const start = async()=>{
//读取配置文件-入参
const opts = getUserOptions()
//记载内置插件
await loadBuiltinPlugins()
//触发一个钩子
opts.created && opts.created()//外边要是传入这个钩子,就执行下
await loadUserPlugins()
opts.initePlugins && opts.initedPlugins()
}
// 通信=》最常见:发布订阅模式
export const mitt = ()=>{
const cache = new Map()//用来装依赖的
return {
on:()=>{},
off:()=>{},
emit:()=>{},
once:()=>{},
destory:()=>{},
}
}
//const originalApply = plugin.apply
//plugin.apply = function(){
// originalApply.apply()
//}
四、典型案例
Umi、webpack、Bable、Vue 都是属于微内核的设计思想。基本都是配置型的。内核轻量。Umi 核心是官方负责,内部集成少量插件,其他插件由社区开发提供,这样生态就慢慢建立起来了。
看Umi官方源码,可以看最初的版本1.x,流程简单,因为看最新的话,经过这些年沉淀积累,里面处理边界、异常、各种场景的代码太多了,不容易看清楚主干核心。
看下core 里带的插件没几个:dva(低瓦)、yunfengdie(云凤蝶)、dll、datahub、路由