本文主要参考官方文档"How Orchard works"以及Orchardch上的翻译。
 

源码分析应该做到庖丁解牛,而不是以管窥豹或瞎子摸象。所以先对Orchard架构有个整体的了解,以及对一些基本概念有所认识。

 
创建一个基于Web的CMS(内容管理系统)不同于创建一个普通的Web应用程序:它更像是建立一个应用程序容器。 这样一个系统,必须拥有优良的开放性、可扩展性。但是作为一个可扩展系统,它可能会面临应用程序"可用性"的挑战:在系统中的核心模块与未知的未来模块的组合,包括用户界面级别的整合。组合相对独立的模块中的小组件,从而形成一个连贯的整体,是Orchard是关键。
我们可以做个类比,如果Orchard对应操作系统,则核心模块对应系统软件,自定义模块对应第三方应用程序,菜单(前台或后台)对应开始菜单。Orchard启动的时候需要加载一些模块,对应操作系统开机启动的系统服务。
 
 本文解释了Orchard选择怎样的构架的,以及怎样获得灵活性和良好的用户体验。
 
一、Orchard架构

 

最上三层就是Orchard。可见Orchard运行于.Net/ASP.NET之上,使用了几个包括ASP.NET MVC在内的开源框架或类库。位于Orchard最底层的是Orchard框架(Orchard.Framework程序集),其上是核心模块(Core Modules)以及来自官方或非官方的其他模块(Modules)。实际上我们可以在任何一层上进行开发,通常我们是在Modules层开发,创建新的Module/Theme或修改已经存在的Module/Theme。
 
二、Orchard基础
Orchard CMS基于现有的框架和库构建,包括ASP.NET MVC,NHibernate,Autofac,Castle等。
 
三、Orchard框架(Orchard.Framework程序集)
Orchard.Framework程序集位于Orchard最底层,它包含应用程序引擎以及不适合分离到模块的功能。这些都是最基础的东西,甚至连最基本的模块将不得不依赖它。你可以把它看作是Orchard的基础类库。
 
四、Orchard核心模块(Orchard.Core项目及Orchard.Core程序集)
Orchard.Core项目中包含了一组Orhcard运行所必须的模块。其它模块可以安全地依赖到这些模块上,因为这些模块总是可用的。比如 feeds,navigation,routable模块。当然,就像上面所说,我们可以基于Orchard的任何一层进行开发,如果有必要,我们完全可以自己来设计"Core"。
 
五、模块(Moduls)
Orchard默认发行版包含了一些像blogging、pages的内置模块,并且也能很方便的创建第三方模块。
模块就是用于扩展Orchard的包含module.txt文件的ASP.NET MVC Area。 
模块通常包含事件处理程序(event handlers),内容类型(content types)和它们的默认渲染模板以及一些管理界面(Admin UI)。
对模块".csproj"文件或".csproj"引用文件的修改都能使模块自动被动态编译。也就是说可以不将模块编译成静态程序集甚至可以不使用Vistual Studio来创建或编辑模块。
 
六、主题(Themes)
主题可以让Orchard用户自定义站点显示界面,量身定制他们想要的站点风格。主题还可以有针对性的对Orchard模块所提供的任何模板进行样式重写、甚至是改变图像、布局等。
主题位于Orchard网站根目录下的Themes文件夹中,包含theme.txt文件。
 
七、租户/子站点(Tenants)
Orchard支持子站点,即一套程序、一个应用程序域部署多个不同域名或者相同域名不同Url前缀的站点。
 
参考资料:

最新文章

  1. hbase集群安装与部署
  2. Net设计模式实例之桥接模式( Bridge Pattern)
  3. elk
  4. MySQL 升级
  5. AngularJS-系统代码的配置和翻译
  6. 用 Fabric 实现自动化部署
  7. Java_Java SE6调用动态编译
  8. windows 版的julia repl 启动时间已经大大优化!
  9. ListView的动态刷新问题——用notifyDataSetChanged没作用
  10. BZOJ 1507 Editor(块状链表)
  11. PHP生成静态页面
  12. 【转】404、500、502等HTTP状态码介绍
  13. 投票系统前台 C#,数据库SQL
  14. 前端基本知识(四):JS的异步模式:1、回调函数;2、事件监听;3、观察者模式;4、promise对象
  15. Extending sparklyr to Compute Cost for K-means on YARN Cluster with Spark ML Library
  16. GIL:全局解释器锁 VS 用户程序锁
  17. EmWin 文本显示函数
  18. 轮播图插件swiper 的使用
  19. Authorize的Forms认证
  20. json 不能 dumps Decimal 解决办法

热门文章

  1. C#-面向对象的三大特性——继承
  2. 总结的js性能优化方面的小知识
  3. Win7下如何设置护眼的电脑豆沙绿界面?保护眼睛的颜色设置教程
  4. iOS中如何选择delegate、通知、KVO(以及三者的区别)
  5. python 内建类型
  6. oracle 11g 新特性UTL_TCP、UTL_HTTP 和 UTL_SMTP程序包发邮件
  7. macOS 安装 pip
  8. hdu 5241 数学题= =
  9. hdu 4609 FFT
  10. AngularJs angular.bind、angular.bootstrap、angular.copy