.NET 平台下的插件化开发内核(Rabbit Kernel)
每个程序猿都有一个框架梦,曾经在2013年8月15日写过一篇“Koala Framework是什么?我为什么要写这个框架?”的文章,在开放框架路上迈出了第一步,之后作者如愿找到了一份相对满意的工作,此时 Koala Framework 改名为 RabbitHub,并在该公司内部使用了一年多的时间之后的今天“RabbitHub(兔窝)” 家族中的老大哥 “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 平台。
感谢的人
在框架的路上一路走来有着许许多多的心酸与打击,时而兴奋时而沮丧时而激动的欢呼时而无奈的叹息,不论如何作者还是坚持下来了,就算现在的框架还不是非常稳定与完善但也一步一步塌下每一步脚印每一个印记都在记录着成长不论是 RabbitHub 还是作者本身。需要感谢的人有很多很多。
感谢现在所在的公司信任并完全采纳了 RabbitHub,也给了作者一定的自由度来推动 RabbitHub 的发展,谢谢我的头不计后果的信任我。
感谢之前的公司的锻炼才让我在短短两年内完成了不可量计的技术积累。
感谢所有给过 RabbitHub 建议与鼓励的人。
感谢 Orchard。
感谢那些曾经带给我挫败感的人。
最后感谢给我推荐的人^_^。
.NET 平台下的插件化开发内核(Rabbit Kernel)的更多相关文章
- NET 平台下的插件化开发内核
.NET 平台下的插件化开发内核(Rabbit Kernel) 每个程序猿都有一个框架梦,曾经在2013年8月15日写过一篇“Koala Framework是什么?我为什么要写这个框架?”的文章, ...
- .NET 平台下的插件化开发内核(Rabbit Kernel)-转
什么是RabbitHub? RabbitHub 是专门针对 .NET 平台所设计.研发的一套相对完整的插件开发框架,它是由一个内核两大框架多个组件及一系列的开发时支持而构成. RabbitHub 架构 ...
- 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文件的方法数最大不能超 ...
随机推荐
- windows下使用mysql双机热备功能
一. 准备工作 1. 准备两台服务器(电脑),接入局域网中,使互相ping得通对方 2. 两台服务器都安装mysql-server-5.1,必须保证mysql的版本一致 3. 假设,服务器A:192. ...
- linux开机自动连接无线网络
1.右击无线网络图标的“编辑连接”. 2.在“无线”选项卡里,选择“编辑”. 3.在“无线安全性”选项卡里,输入无线密匙,并选中左下角的“对所有用户可 用”的选项点击应用,会提 ...
- 【转帖】4412ARM开发板学习笔记(一)
本文转自迅为论坛:http://www.topeetboard.com 新手在进行开发学习前,建议先看01-迅为电子开发板入门视频.对开发板和开发环境有一定的了解后,不要盲目接线开机.以下是个人的一点 ...
- [嵌入式开发入门]4412开发板从零建立Linux最小系统
本文转自iTOP-4412开发板实战教程书籍 http://www.topeetboard.com iTOP-4412开发板不仅可以运行Android,还可以运行简单的Linux最小文件系统. 最小L ...
- KVM 介绍(8):使用 libvirt 迁移 QEMU/KVM 虚机和 Nova 虚机 [Nova Libvirt QEMU/KVM Live Migration]
学习 KVM 的系列文章: (1)介绍和安装 (2)CPU 和 内存虚拟化 (3)I/O QEMU 全虚拟化和准虚拟化(Para-virtulizaiton) (4)I/O PCI/PCIe设备直接分 ...
- CSS3 ::selection选择器
一.介绍 之前看到有些网站选中内容的颜色和背景色都不是平时看到的蓝色和白色.今天有兴趣查看了一下,原来是一个很简单的CSS3的选择器::selection的用法. 上例子: <style> ...
- [转]simple sample to create and use widget for nopcommerce
本文转自:http://badpaybad.info/simple-sample-to-create-and-use-widget-for-nopcommerce Here is very simpl ...
- 150924-还是起得来床的好-HTML(CSS)
一早醒来是9:10,这些天最晚的了,也可能是睡的最爽的了. 不废话,早上Matlab仿真干不出来,不如学学html,上代码~ <!DOCTYPE HTML><html>< ...
- hdu-5933----hdu-5943
hdu-5933 思路: 贪心,首先要求总和是k的倍数,而又要求相邻,说明相邻的一块如果是sum/k的倍数,那么就地切割这样才能使操作数目最少; hdu-5934 思路: 强连通分量,可以找出强连通分 ...
- ArrayList如何保证线程安全
ArrayList是线程不安全的,轻量级的.如何使ArrayList线程安全? 1.继承Arraylist,然后重写或按需求编写自己的方法,这些方法要写成synchronized,在这些synchro ...