八、开发者工具和指南(三) Source code organization
Modules
是一个VS目录,包含Orchard模块,所有Orchard模块都是ASP.NET MVC WEB程序项目.
Modules\Lucene
Lucene模块能使用Lucene.NET索引网站,这个模块使用搜索模块产生索引,为网站提供一个集成的全文本搜索体验.
Modules\Orchard.ArchiveLater
这个模块支持计划存档功能.
Modules\Orchard.Blogs
这个模块是博客模块.
Modules\Orchard.CodeGeneration
是创建Orchard组件的工具,能从命令行启动这个工具.
Modules\Orchard.Comments
评论模块在内容中管理和呈现评论.
Modules\Orchard.ContentTypes
这个模块能通过Orchard管理面板管理内容类型的创建和交替.
Modules\Orchard.DesignerTools
这个模块包含开发主题的工具,这个工具显示所有显示的shape和信息并定制它们.
Modules\Orchard.Email
提供发关送Email的功能.
Modules\Orchard.Experimental
实现模块提供了下面几种类型的调试工具:
- Profiling. 帮助profile Orchard程序.
- WebCommandLine. 使管理员使用一个WEb接口执行Orchard.exe命令
- TestingLists. 测试列表.
Modules\Orchard.ImportExport
提供导入和导出内容数据的功能.
Modules\Orchard.Indexing
使网站能被索引.
Modules\Orchard.jQuery
包含JQuery和相关的脚本库.
Modules\Orchard.Lists
这个模块提供一个预配置的容器内容类型.
Modules\Orchard.Localization
使contnet items本地化.
Modules\Orchard.Media
负责管理和呈现media,当前仅支持images文件,Orhcard 文件系统上存储的文件能是服务器上的物理文件或Azure上的存储.
Modules\Orchard.MediaPicker
是浏览\上传\选择media的html编辑器.
Modules\Orchard.Messaging
这个模块包含支持传递消息的设置
Modules\Orchard.Migrations
这个模块为更新数据库架构提供数据迁移命令,根据代码中定义的Record类.
Modules\Orchard.Modules
使管理员能管理和激活模块.
Modules\Orchard.MultiTenancy
使多个Orchard网站隔离运行在一个web程序上,提高了一个服务器或托管账户的网站密度.
Modules\Orchard.Packaging
为发行提供了包装功能.
Modules\Orchard.Pages
负责管理和呈现CMS页面,包含一个预配置Page内容类型.
Modules\Orchard.PublishLater
支持创建草稿和计划发布.
Modules\Orchard.Recipes
使用recipe自动配置网站
Modules\Orchard.Roles
为用户指定角色并添加权限,提供了一组其它模块能定义权限的默认角色.
Modules\Orchard.Scripting
这个模块使用一个简单脚本语言创建的脚本的执行.
Modules\Orchard.Scripting.Dlr
使用DLR的脚本的执行.
Modules\Orchard.Search
这个模块提供搜索索引的管理,为Orchard内置的搜索提供用户接口.
Modules\Orchard.Setup
负责初始化程序的安装,这个功能在安装完成后自动禁止.
Modules\Orchard.Tags
负责管理和呈现content items的tags.
Modules\Orchard.Themes
能定制网站的外观.
Modules\Orchard.Users
负责管理用户.
Modules\Orchard.Warmup
这个模块提供在程序初始化中生成静态版本的页面的机制.
Modules\Orchard.Widgets
支持Orchard widgets,使可重用的UI在网站页面上使用.
Modules\TinyMce
富文本编辑器.
Specs
Specs文件夹包含下面的项目:
- Orchard.Profile. 提供创造Orchard的分析图像。
- Orchard.Specs. 包含了使用SpecFlow样式的集成测试,Feature-specific信息在*.feature文件中.
Tests
Tests目录包含了下面的项目:
- Orchard.Core. Orchard.Core项目的测试项目.
- Orchard.Framework. Orchard.Framework项目的测试项目.
- Orchard.Tests.Orchard模块的测试项目. 包含了不同模块的子目录.
- Orchard.Web.Tests Orchard.Web项目的测试项目.
Tools
Tools目录包含了工具的源码,用于构建Orchard解决方案.也包含了Orchard项目建立的Orchard.exe命令行工具,你能用它来执行Orhcard网站定义的命令,为了自动化管理的任务.
Orchard.Core
Core项目包含了一组核心模块和内容类型,如feeds,theming,navigation,common,routable,body content parts.
Orchard.Framework Project
Orchard.Framework是Orchard CMS框架的类库项目.
Orchard.Web Project
Orchard.Web是MVC web程序项目,这个你实际运行的程序,这是应用程序的启动项目,它包含Orchard CMS核心平台二进制文件,因此是Orhcard CMS托管的程序.
Other Notes
- Orchard.Web 项目是解决方案的启动项目,(当你使用VS debugging时),Orchard.Web 动态地装载所有Orchard 模块和发现模块扩展点(MVC routes,admin pages,and so on ).
- Modules目录中的项目是在Ochard.Web\Modules文件夹下的物理位置,允许模块包含ASP.NET views(aspx,ascx and other files)和静态内容,不用在项目和能运行的项目之间复制文件.
- Orchard.Web 项目有引用模块的项目,自动复制l输出的程序集到Orchard.Web项目的bin目录中,Orchard.Web没有依赖模块程序集中的类型,因为Orchard.Web项目没有哪个模块在运行时加载的 编译时知识.(这不是当前Orchard开发策略的全部事实.)
- Modules文件夹中的项目有一个到Orhcard项目的引用,这允许模块可以访问基础的Orchard服务.
About Core Modules
这节讨论建立核心模块的一些设计决策.第一个问题是:为什么核心模块是模块?因为在Orchard设计阶段,它决定扩展点,如需要的模块的,这一切构成了核心框架.
例如:Common模块采用BodyAspect,它的核心理念是通用于许多内容类型,如blog post or pages.它能做为Orchard 框架DLLs的一部分实现,应该有模块依赖它.可以作为模块它没有什么好处,如:能hook up handler,drivers,views,routes,and so on.这也关联MVC和areas,属于一个area的所有东西在同样的目录下.
确定正确的入口是获得某个框架DLL之外的核心理念进一个单独(做为模块)的dll中,这类似于不是宏大的操作系统核心功能的一部分是在内核之外作为模块实现的,作为更高层模块使用同样的接口与内核交互.
核心模块的第二个设计问题是:为什么核心模块是"核心模块"?确定核心理念后将做为模块实现,把它们放入Modules目录除了一些Orchard modules,可能是有道理的,如comments模块.
那种方式的问题是依赖.Orchard中,模块是在Modules目录中,能禁用,卸载,或其它破坏性的更新,Orchard应该尽可能不依赖其它模块,那是内容类型架构下的一部分dynamism,Pages和Blog posts属于Pages和Blog模块,不引用 Comments或Tags模块,但它可能附加comments或tags到pages和blog posts.This decoupled behavior is ensured by the underlying content-type architecture and not by direct reference from another module.
不管怎样,核心模块是Orchard框架的一部分,它被认为依赖它们是可接受的.Orchard模块由Orchard开发小组发布的,为所有实际的目录,是Orchard 框架的一部分,模块能依赖它们并直接访问它们的公共接口.