.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。
感谢那些曾经带给我挫败感的人。
最后感谢给我推荐的人^_^。