.NET 平台下的插件化开发内核(Rabbit Kernel)-转
什么是RabbitHub?
RabbitHub 是专门针对 .NET 平台所设计、研发的一套相对完整的插件开发框架,它是由一个内核两大框架多个组件及一系列的开发时支持而构成。
RabbitHub 架构图:
它为了解决什么?
一般公司内部的产品肯定是多元化的,而拥有的开发团队也不止一支,这样以来各个开发团队内部所使用的框架多多少少有一些不一致,从而导致技术无法共享、各个团队之间无法进行技术交流的僵局,各个团队还有可能对相差无几的功能重复开发,甚至导致服务器部署环境的不一致,浪费宝贵的资源与时间。
而采用 RabbitHub 后这些问题将有效的得到改善,由于 RabbitHub 是由处在最顶端的 Modules 层来决定最终系统的逻辑与 UI,所以除了 RabbitHub 为大家提供的强大功能外,公司或团队还可以围绕着 Rabbit Kernel 来开发新的层或组件以得到共用、共享,其他的开发团队就无需开发重复的功能,最多只是扩展现有层的功能来支持最新的需求,而这些通用的层就是公司以后开发新的产品很有力的基石,也是公司宝贵的一笔财富。
它提供了什么?RabbitHub现状。
核心
Rabbit Kernel
一个轻量级的内核。
Rabbit.Web
针对 Web 的框架。
Rabbit.Web.Mvc
针对 ASP.NET MVC 的框架。
Rabbit.Web.WebForms
针对 ASP.NET WebForms 的框架。
组件
- 基于 EntityFramework 的数据组件
- 基于 NLog 的日志实现。
- 基于 FluentMigrator 的数据迁移组件。
- 基于 SignalR 的总线实现。
- 安全组件。
- 与 SignalR 组件的集成适配器。
- 用于 Web 项目的快速启动器。
- ……
支持
- Visual Studio 扩展插件。
- Visual Studio 项目模板。
- 批量 Modules 发布工具。
- 命令行工具。
- ……
支持的 .NET Framework 版本
RabbitHub 全系列至少使用 .NET Framework 4 或以上.NET Framework版本才可使用。
什么是Rabbit Kernel?
Rabbit Kernel是整个Rabbit Hub的核心,Kernel内不仅包含了扩展引擎、租户引擎、工作引擎,同时还抽象了Bus、Caching、FileSystems、Localization、Logging这些常用组件的抽象与部分实现。
Rabbit Kernel 最大层度上保证了 Kernel 的纯净性、除了必须的 IOC 组件 Autofac 外只依赖 FCL(Framework Class Library)而不再依赖其它任何类库。所以 Kernel 内部组件的设计尽量保证可扩展性与灵活度牺牲了一些 API 的友好性,甚至部分组件不提供具体的功能实现(如:Caching、Logging)。
Rabbit Kernel 会一直在精简依赖的组件的同时保证其强大的可扩展性,为宿主应用提供一个轻量且强大的微内核。
支持的环境
- ASP.NET MVC
- Console Application
- Windows Service
- WPF
- WinForm
- WebForm
- Mono
- ……
功能
扩展引擎
Rabbit Kernel最核心的理念就是一切皆是扩展,并且扩展是可以进行热拔插的,Kernel内部提供了一个强大的扩展引擎,可以适应各种功能类型的扩展,如:Component、Module、Theme。
多租户
Rabbit Kernel从底层考虑了多租户的相关内容,从底层直接对对象进行了隔离,最大程度上减少开发者在开发业务模块时需要考虑多租户相关的内容,并且保证了数据的安全。
Works
Work类似于电脑安全领域中的Sandboxie(沙盒),以保证对象独立的工作区,也在一定程度上防止了内存泄漏(因为当Work工作区被释放时Work中所有的对象也将被释放)。
一个宿主中可以有多个Work工作区。
基于Rabbit Kernel的Demo?
写了一个基于 WinForm 的 Demo,非常的简单,因为本篇只打算介绍,后续文章中会写一些相对复杂一些的 Demo。
Demo 运行效果图:
主要由两个菜单项构成,WinForm 菜单项是在主界面中显示一个窗体,MessageBox 是以弹出框的形式直接进行提示。
其中 Hello World 来自项目中的插件:Rabbit.HelloWorld。
根据上面的 Demo 效果可以很容易的看懂下面的代码,我就不画蛇添足的进行解释了。
Demo下载
https://github.com/majian159/RabbitDemo
基于 RabbitHub 的案例
出于隐私保护的原因这边不写出具体的公司名称,只写相关的一些情况。
目前 RabbitHub 框架部分被应用在两家公司,三个商业性产品上(移动端、PC端、政府系统)。
经历过一年多的风雨,这三款产品有着不错的稳定性及不错的销售业绩。
RabbitHub 中的部分组件已在 NuGet 中发布有着近 3000 的安装量。
详情戳下面的文章:
开源是一种态度、分享是一种精神 — FirApi发布、WeiXinApi更新
Bootstrap for MVC:Html.Bootstrap().TextBoxFor(model=>model.Name)
在小的个体,也有自己的官网
跟众多项目一样,RabbitHub 也有着自己简陋的官网,请戳:http://www.rabbithub.com/。
由于备案和服务器的关系目前官网挂在香港,可能会比较慢。
发布方式
目前 RabbitHub 所有的项目都托管在微软的 TFS 上,将来打算迁移至 GitHub 从 Demo 的托管就可以看出来,至于为什么,微软给了最好的证明。
收不收费?
现在当然不,以后也绝对不,永久免费(也没有必要收费)。
ps:限本篇文章中提及的内容(因为考虑后面会推出 工作流引擎、表单引擎 等相关系统还没有考虑好是否收费)。
开不开源?
相关项目最后肯定会开源,只是选择一个对的时机,现在的 RabbitHub 面向大众显得还相当稚嫩,作者会在 Fix 了相关 Bug 后择机进行开源。
ps:会按时机推出已经准备好开源的项目,但不一定所有项目都进行开源,在完善好后在进行考虑,就目前来说 Rabbit Kernel 是肯定会进行开源的,目前打算采用 Apache 协议。
联系方式
QQ讨论群:384413261
作者Email:majian159@live.com
为什么执着于框架?
开发 RabbitHub 耗费了我不少的时间与精力,在同样时间与精力的消耗下其实完全可以接点私单赚些外快,再或者写一些组件、SDK,效果可能要比 RabbitHub 好的多。为了 RabbitHub 我不在接私单,哪怕很诱人。
2014年微软宣布了 .NET 平台中的部分将开源、跨平台,沉寂已久的 .NET 社区再次有了新的活力,很多人期盼着新的组件、新的技术的出现来解决目前的一些情况,相比 Java 社区 .NET 缺少了太多太多,而 RabbitHub 就是为了给 .NET 社区添砖加瓦的一次尝试,在此呼吁大家多为社区做出贡献,多开放、共享一些项目和解决方案。
总而言之,开发 RabbitHub 是为了锻炼自身,也像是看着 .NET 变的越来越好,不论社区或 .NET 平台。
.NET 平台下的插件化开发内核(Rabbit Kernel)-转的更多相关文章
- NET 平台下的插件化开发内核
.NET 平台下的插件化开发内核(Rabbit Kernel) 每个程序猿都有一个框架梦,曾经在2013年8月15日写过一篇“Koala Framework是什么?我为什么要写这个框架?”的文章, ...
- .NET 平台下的插件化开发内核(Rabbit Kernel)
每个程序猿都有一个框架梦,曾经在2013年8月15日写过一篇"Koala Framework是什么?我为什么要写这个框架?"的文章,在开放框架路上迈出了第一步,之后作者如愿找到了一 ...
- TinyFrame升级之八:实现简易插件化开发
本章主要讲解如何为框架新增插件化开发功能. 在.net 4.0中,我们可以在Application开始之前,通过PreApplicationStartMethod方法加载所需要的任何东西.那么今天我们 ...
- Android插件化开发
客户端开发给人的印象往往是小巧,快速奔跑.但随着产品的发展,目前产生了大量的门户型客户端.功能模块持续集成,开发人员迅速增长.不同的开发小组开发不同的功能模块,甚至还有其他客户端集成进入.能做到功能模 ...
- Android 使用动态载入框架DL进行插件化开发
如有转载,请声明出处: 时之沙: http://blog.csdn.net/t12x3456 (来自时之沙的csdn博客) 概述: 随着应用的不断迭代.应用的体积不断增大,项目越来越臃肿,冗余添 ...
- Android插件化开发---执行未安装apk中的Service
欢迎各位增加我的Android开发群[257053751] 假设你还不知道什么叫插件化开发.那么你应该先读一读之前写的这篇博客:Android插件化开发,初入殿堂 上一篇博客主要从总体角度分析了一下 ...
- 插件化开发—动态加载技术加载已安装和未安装的apk
首先引入一个概念,动态加载技术是什么?为什么要引入动态加载?它有什么好处呢?首先要明白这几个问题,我们先从 应用程序入手,大家都知道在Android App中,一个应用程序dex文件的方法数最大不能超 ...
- Eclipse平台下配置Go语言开发环境(Win7)
<Go语言编程>中写到:“从功能和易用性等方面考虑, Eclipse+GoEclipse.LiteIDE这两个环境在所有IDE里面是表现最好的”,所以笔者打算采用Eclipse+GoEcl ...
- 插件化开发—动态载入技术载入已安装和未安装的apk
首先引入一个概念,动态载入技术是什么?为什么要引入动态载入?它有什么优点呢?首先要明确这几个问题.我们先从 应用程序入手,大家都知道在Android App中.一个应用程序dex文件的方法数最大不能超 ...
随机推荐
- HBASE学习笔记-初步印象
HBASE概念: HBASE是一个分布式架构的数据库,通过对数据进行多层的分块打散储存.从而改写传统数据库的储存能力和读取速度. HBASE的集群服务器: HBASE的集群主要分为Zookeeper集 ...
- 使用AdvinceInstaller把exe或者msi重新包装成为msi静默安装程序
最近在学习installShelled打包.net做的软件,其中mysql数据库的静默安装脚本不会写,本人新手勿喷.在不会写脚本的方式下,偶然间看见了这个AdvinceInstaller可以吧.exe ...
- 网页引用google字体速度慢:fonts.googleapis.com
由于众所周知的原因,国内使用google font库有很大的问题. 使用国内镜像如360网站卫士常用前端公共库CDN服务 http://libs.useso.com/ 优点:使用方便 缺点:目标用户包 ...
- debain 8安装为知笔记(how to install wiznote in debain 8)
刚装了debain8后想安装为知笔记,百度之后发现为知笔记原来是开源软件.代码托管在github上:https://github.com/WizTeam/WizQTClient 但是上面只有Ubunt ...
- xmind的第十二天笔记
- php-长文章分页函数
<?php function ff_page($content,$page) { global $expert_id; $PageLength = 2000; //每页字数 $CLength = ...
- html EVENT对象
Event 对象 Event 对象代表事件的状态,比如事件在其中发生的元素.键盘按键的状态.鼠标的位置.鼠标按钮的状态. 事件通常与函数结合使用,函数不会在事件发生前被执行! onabort 图像的加 ...
- S3C2440的Linux启动过程分析(一)——SC2440处理器结构
1.1. S3C2440处理器结构 S3C2440处理器的结构如下图所示,其核心单元为ARM9TDMI处理器核,主要包括16K的指令Cache和16K的数据Cache,以及分开的指令和数据MM ...
- 第六篇T语言实例开发,多点找色应用
---恢复内容开始--- 多点找色应用 文字,图形特征的获取 多点找色 功能原型 窗口多点找色(窗口句柄,x1,y1,x2,y2,颜色值,色点组,相似度,方向,返回x,返回y) 功能说明 根据指定的多 ...
- jekins构建自动化项目的步骤
填入项目名字 源码管理从git自动拉取代码到工作目录 jenkins拉取代码会到工作空间linux下安装完目录是/var/lib/jenkins/workspace/jeekins-test(可以根据 ...