Orchard CMS是针对CMS开发的,对于很多开发需求来说,内容管理这块儿可能并不需要,而需要它的模块式开发模式。所以我这里通过对OrchardCMS进行瘦身,去除 内容管理部分的内容,保留简单的运行环境和基础的模块。需要做的工作:
去除Orchard Framework的内容管理部分,同时去除Orchard Framework依赖内容管理的相关内容。
去除Orchard Core部分的部分module,只保留Sharpe和Setting两个模块。
去除内容管理和博客管理的相关模块,只保留支持模块启用和停用以及皮肤模块。
这里我只是对OrchardCMS的代码进行了瘦身,所以相关的license请参考Orchard CMS的。
Github上的源代码: https://github.com/nicholaspei/OrchardNoCMS
为什么需要对Orchard CMS瘦身?
在我们的项目中,需要一个类似于Java的OSGI框架。发现Orchard CMS是可以达到这个要求的,自己做的话,时间不够,整个成员能力也够呛。所以选择了Orchard CMS,但是这个CMS中,太多的数据库表和模块都是为了CMS服务的,而我们的业务中基本上不需要或者用CMS配置字段很难达到业务要求。于是我就对OrchardCMS进行了瘦身,只保留热插拔模块式开发,同时去除了大部分表,只保留6个表。
为了对得起开源,我就把自己整理好的代码分享出来,希望大家能够一起改进。https://github.com/nicholaspei/OrchardNoCMS
首先看一下最后完成的代码目录和之前的代码目录:
只保留了相当少的一部分,这就是Orchard可以运行的最小框架了。Orchard.CodeGeneration是为了创建模块的。而HelloWorld模块是为了测试模块式开发创建的新模块。
当把ContentManagement部分的代码去掉时,真的是全屏报错啊。很蛋疼。。经过不懈的努力,让整个Orchard.Framework跑起来了。
接下来蛋疼的是Orchard.Core。这里最先包含太多模块,Container,Contents,Dashboard等,大部分都依赖于ContentManagement。最后通过分析代码,发现其实必须的模块式Settings和Shapes模块。
Settings来获取站点运行时需要的信息,当前语言,时区等。
Shapes是用来把上下文转换成Html返回给浏览器的。最初没有把Shapes改好,所以出现了Action执行了,但是View却为空,发现ViewEngine也找到了页面,却显示不出内容来。
默认的Orchard是提供了模块的管理页面,皮肤的管理页面等。我个人觉得其实只需要提供控制台的模块管理就可以啦。
支持的命令如下:
默认命令中没有feature update,所以我增加了该命令,可以在模块的数据结构发生改变时,通过执行feature update来执行Migration。
另外,产品或者项目中,有共享模块的情况,所以接下来我会把Orchard.Package模块也集成进去。并加入自己的一些想法,加入NuGet更好的支持,让共享模块更加灵活。
希望Orchard爱好者可以关注该项目,试着使用它,并提出你的意见和建议。