Orchard架构的简单介绍

这篇文章主要讲解了“Orchard架构的简单介绍”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Orchard架构的简单介绍”吧!

  对于我们来说,更重要的是学习Orchard是如何架构的,如果我们自己编写一个类似应用该如何做。今天有空再次看看
Orchard的其它内容,本篇介绍一下Orchard的一些架构方面的内容。Orchard内容较多,现在还只是了解一些皮毛,还有待进一步学习,放上
来权当随笔记录。

  Architecture

  Orchard foundations

  Orchard构建在已有的一些框架和类库之上,下面是一些主要内容:

  ASP.NET MVC:这是微软开源的基于MVC的Web开发框架

  NHibernate:NHibernate 是一个ORM工具,从Hibernate演化而来

  Autofac: 一个IoC container。Orchard大量使用依赖注入

  Castle Dynamic Proxy: Castle 是.Net中很早就出现的一个开源项目,Castle Dynamic
Proxy是一个生产动态代理的东东

  Orchard Framework

  Orchard framework处于Orchard的最底层,你可以把它看成是Orchard的基础类库。

  Orchard的启动

  当Orchard web应用启动后,生成一个应用域级别的单例的Orchard Host(DefaultOrchardHost)

  View Code

  public class MvcApplication : HttpApplication {protected void
Application_Start() {_host =
OrchardStarter.CreateHost(MvcSingletons);_host.Initialize();}public static class
OrchardStarter {public static IOrchardHost CreateHost(Action registrations) {var
container = CreateHostContainer(registrations);return
container.Resolve();}public static IContainer CreateHostContainer(Action
registrations) {……builder.RegisterType().As().As().SingleInstance();}}

  DefaultOrchardHost负责生成Shell,其中引入了一些类:ShellContextFactory、ExtensionManager、ShellSettingsManager、CompositionStrategy、ShellBlueprint,现在就不细说了,因为我还没有怎么看

  V  public class DefaultOrchardHost : IOrchardHost,
IShellSettingsManagerEventHandler, IShellDescriptorManagerEventHandler {void
IOrchardHost.Initialize() {BuildCurrent();}IEnumerable BuildCurrent() {if
(_current == null) {lock (_syncLock) {if (_current == null)
{SetupExtensions();MonitorExtensions();_current =
CreateAndActivate().ToArray();}}}return _current;}IEnumerable
CreateAndActivate() {var allSettings = _shellSettingsManager.LoadSettings();if
(allSettings.Any()) {return allSettings.Select(settings => {var context =
CreateShellContext(settings);ActivateShell(context);return
context;});}……}ShellContext CreateShellContext(ShellSettings settings) {if
(settings.State.CurrentState == TenantState.State.Uninitialized)
{Logger.Debug("Creating shell context for tenant {0} setup",
settings.Name);return
_shellContextFactory.CreateSetupContext(settings);}Logger.Debug("Creating shell
context for tenant {0}", settings.Name);return
_shellContextFactory.CreateShellContext(settings);}}

  Dependency injection

  在Orchard中生成依赖项的标准方法是实现IDependency 或者其继承接口。

  对于依赖有三种可能的范围,具体讲解等待后期分析:

  o Request:每次HTTP请求都创建一个新的实例,请求处理有销毁。这种对象实现IDependency

  o Object:实现ITransientDependency,实例不共享

  o Shell: 实现ISingletonDependency,单例

  ASP.NET MVC

  Orchard是构建在ASP.NET MVC
之上的一个框架,但是为了增加主题、多租户等额外功能而也挺入了额外的一些层和概念。例如,当需要一个特定视图时引入LayoutAwareViewEngine。严格的说,这不是一个新的视图引擎,因为它并不关心实际绘制,而只是包含一些查找当前主题下正确视图的一些逻辑功能,然后委托给实际的视图引擎去展现。

  Types, Parts and Fields

  Orchard能够处理任意内容类型(content
types),内容类型又是由内容Parts组成,例如一个blog、video都可能有地址、回复、tag等,为了重用可以把回复作为一个part存在于一个module中,这样只需要生成一次就行了。

  Parts本身又有自己的属性和内容字段。内容字段(Fields)也是一个重用的概念,它比parts更细粒度,它可以使用在多个part中。

  Content Manager

  所有的内容通过ContentManager 对象进行访问,ContentManager有查询内容存储、版本内容和管理发布状态等功能

  Transactions 

  Orchard自动为每次HTTP请求生成一个事务

  Event bus

  Commands

  很多在Orchard中可以执行的动作都可以通过命令行形式执行,这些Command都需要实现,命令方法使用CommandName 属性标识

  Search and indexing

  默认使用Lucene 进行索引和查询

  Caching

  基于ASP.NET cache之上的缓存,Orchard缓存API主要好处是对每个租户的透明性

  File systems

  Orchard的文件系统是抽象概念的,可以是直接的物理文件,也可以是部署在云端的blob storage

  Orchard core

  Orchard.Core 程序集包含Orchard必须使用到的一些模块,例如feeds、navigation和routable

  Modules

  Orchard默认发布一些内建的模块,例如blog等。一个模块只是一个包含manifest.txt 文件的一个ASP.NET MVC area
文件。

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注