Orchard CMS是针对CMS开发的,对于很多开发需求来说,内容管理这块儿可能并不需要,而需要它的模块式开发模式。所以我这里通过对OrchardCMS进行瘦身,去除 内容管理部分的内容,保留简单的运行环境和基础的模块。需要做的工作:
去除Orchard Framework的内容管理部分,同时去除Orchard Framework依赖内容管理的相关内容。
去除Orchard Core部分的部分module,只保留Sharpe和Setting两个模块。
去除内容管理和博客管理的相关模块,只保留支持模块启用和停用以及皮肤模块。
这里我只是对OrchardCMS的代码进行了瘦身,所以相关的license请参考Orchard CMS的。
Github上的源代码: https://github.com/nicholaspei/OrchardNoCMS
如果你所在的地区网络不能访问github,请从下面的链接下载:http://pan.baidu.com/s/1zifoC
为什么需要对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爱好者可以关注该项目,试着使用它,并提出你的意见和建议。
更新:
1.昨天有同学说没有数据库,运行不了,发现时因为我的.gitignore文件里把*.sdf文件过滤掉了。已经更新。
2.我会接下来写一系列文章结合现实的一些需求让大家深入了解下如何更好的开发一个模块。
3.如何在不改变已经发布的模块而扩展功能。(修改关闭,扩展开放)
4.模块之间如何做到运行依赖,而非依赖。(个人不是很推荐,只是现实中有时候需要用到)
5.整合bootstrap,提供一套完整的UI解决方案。