Orchard架構介紹

  在如何使用Orchard搭建敏捷我的的網站(2)中 介紹瞭如何使用Orchard,但對於咱們來講,更重要的是學習Orchard是如何架構的,若是咱們本身編寫一個相似應用該如何作。今天有空再次看看 Orchard的其它內容,本篇介紹一下Orchard的一些架構方面的內容。Orchard內容較多,如今還只是瞭解一些皮毛,還有待進一步學習,放上 來權當隨筆記錄。html

Architecture

Orchard foundations

Orchard構建在已有的一些框架和類庫之上,下面是一些主要內容:web

  • 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的基礎類庫。shell

  • Orchard的啓動
  1. 當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 < ContainerBuilder > registrations) {

    var container
    = CreateHostContainer(registrations);

    return container.Resolve < IOrchardHost > ();

    }

    public static IContainer CreateHostContainer(Action < ContainerBuilder > registrations) {

    ……

    builder.RegisterType
    < DefaultOrchardHost > ().As < IOrchardHost > ().As < IEventHandler > ().SingleInstance();

    }

    }
  2. DefaultOrchardHost負責生成Shell,其中引入了一些類:ShellContextFactoryExtensionManagerShellSettingsManagerCompositionStrategyShellBlueprint,如今就不細說了,由於我尚未怎麼看
View Code
    
    
    
    
public class DefaultOrchardHost : IOrchardHost, IShellSettingsManagerEventHandler, IShellDescriptorManagerEventHandler {

void IOrchardHost.Initialize() {

BuildCurrent();

}

IEnumerable
< ShellContext > BuildCurrent() {

if (_current == null ) {

lock (_syncLock) {

if (_current == null ) {

SetupExtensions();

MonitorExtensions();

_current
= CreateAndActivate().ToArray();

}

}

}

return _current;

}


IEnumerable
< ShellContext > 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 或者其繼承接口。express

對於依賴有三種可能的範圍,具體講解等待後期分析:緩存

          o Request:每次HTTP請求都建立一個新的實例,請求處理有銷燬。這種對象實現IDependency
          o Object:實現ITransientDependency,實例不共享
          o Shell: 實現ISingletonDependency,單例架構

  • ASP.NET MVC

Orchard是構建在ASP.NET MVC 之上的一個框架,可是爲了增長主題、多租戶等額外功能而也挺入了額外的一些層和概念。例如,當須要一個特定視圖時引入LayoutAwareViewEngine。嚴格的說,這不是一個新的視圖引擎,由於它並不關心實際繪製,而只是包含一些查找當前主題下正確視圖的一些邏輯功能,而後委託給實際的視圖引擎去展示。mvc

Types, Parts and Fields

Orchard可以處理任意內容類型(content types),內容類型又是由內容Parts組成,例如一個blog、video均可能有地址、回覆、tag等,爲了重用能夠把回覆做爲一個part存在於一個module中,這樣只須要生成一次就好了。app

Parts自己又有本身的屬性和內容字段。內容字段(Fields)也是一個重用的概念,它比parts更細粒度,它可使用在多個part中。框架

Content Manager

全部的內容經過ContentManager 對象進行訪問,ContentManager有查詢內容存儲、版本內容和管理髮布狀態等功能asp.net

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 文件。

Themes

Orchard有一個基本的設計原則,那就是主題的全部HTML均可以被替換。Orchard是基於shapes來展示的,主題引擎的工做就是發現 當前主題,並未當前每個shape找到最佳的展示方式。每個shape能夠經過模塊的視圖目錄或者經過代碼方式來獲取一個默認的展示方式。

參考:How Orchard Works

推薦:你可能須要的在線電子書 

個人新浪圍脖: http://t.sina.com.cn/openexpressapp

相關文章
相關標籤/搜索