среда, 11 апреля 2012 г.

Как работает архитектура в Composite C1 CMS (2)

Вторая часть перевода статьи на StackOverflow, посвященной архитектуре Composite C1:  How does the architecture work? (Ссылки на англоязычные ресурсы в статье сохранены с небольшой коррекцией.)


***

Глобализация и локализация

C1 полностью поддерживает многоязычность в ядре системы. Для управления установленными в систему локалями  - запросы, добавления и удаления - используется Composite.Core.Localization.LocalizationFacade. Локалями может быть какой угодно объект CultureInfo, известный системе.


Для получения символьных строк во время выполнения используется Composite.Core.ResourceSystem.StringResourceSystemFacade, соответствующий объекту CultureInfo, в котором выполняется ваш запрос. Пользуйтесь им вместо жесткого прописывания строк на ваших страницах или в ваших шаблонах.

Почитать о локализации можно здесь: http://docs.composite.net/C1-Localization (англ.)

Глобальные события

О Composite.C1Console.Events.GlobalEventSystemFacade важно знать, если вам нужно отслеживать, когда система завершает работу, чтобы можно было внести   изменения  в последнюю минуту. Так как C1 - довольно многопоточная система, не составит труда написать расширения и модули для C1, которые тоже будут многопоточными, воспользовавшись преимуществами многоядерных систем и параллелизации, поэтому решительно важно завершать работу своих потоков надлежащим образом. Именно в этом вам и поможет GlobalEventSystemFacade.

События, связанные с запуском системы: Если вы пишите плагины, у них может быть определяемая вами фабрика классов. Остальной код может использовать атрибут ApplicationStartupAttribute, благодаря чему этот код будет вызван ядром системы Composite C1 при запуске веб-приложения.

События, связанные с данными: Можно подписаться на события добавления, изменения и удаления данных (до и после), воспользовавшись статическими методами из Composite.Data.DataEvents<T>. Чтобы подключиться к этим событиям при запуске системы, используйте атрибут ApplicationStartupAttribute.

Данные

Composite.Core.Threading.ThreadDataManager - важен, если вы доступаетесь к "Уровню данных" (Data Layer) вне запроса к соответствующей C1-странице. Это может быть ваш собственный обработчик, которому просто нужно "передавать" (feed) самые последние новости в качестве RSS-канала, или может быть, вы пишите консольное приложение. В таких случаях, не забывайте "обернуть" (wrap) ваш код, который доступается к данным, вот так:

using(Composite.Core.Threading.ThreadDataManager.EnsureInitialize())
{
// код который работает с уровнем данных в C1
}

Для доступа к данным и управления ими, НЕ рекомендуется использовать класс DataFacade, а помещать весь код, который считывает, изменяет или удаляет данные, в такой код:

using(var data = new DataConnection())
{
 // работаем с данными
}

Операции ввода/вывода (IO)

При работе с файлами и директориями, важно использовать C1-эквиваленты классов Composite.Core.IO.C1File и Composite.Core.IO.C1Directory, а не .NET-овские File and Directory.
Это связано с тем, что C1 может размещаться на  Azure (англ.), где у вас может не быть такого же доступа к файловой системе, как в случае обычного Windows-сервера. Используя C1-овские классы-оболочки  File and Directory , вы получаете гарантию того, что код, который вы пишите будет также работать и на Azure.

Административная консоль C1

Консоль ("админка") заслуживает отдельного разговора и у нее много своих программных интерфейсов.

Можно создавать свои собственные деревья, используя Composite.C1Console.Trees.TreeFacade или Composite.C1Console.Elements.ElementFacade и реализуя Composite.C1Console.Elements.Plugins.ElementProvider.IElementProvider.

Можно использовать Composite.C1Console.Events.ConsoleMessageQueueFacade, чтобы слать сообщения с сервера клиенту, чтобы тот выполнял такие задачи, как показать окно сообщения, обновить дерево, установить фокус на определенный элемент, открыть новую вкладку и т.д. и т.п.

Для получения экземпляров конкретных "рабочих процессов" (workflows) и взаимодействия с ними используется Composite.C1Console.Workflow.WorkflowFacade. "Рабочие процессы" - очень фундаментальная часть в C1, это способ определения и выполнения много-шаговых операций. Благодаря этому можно сохранять состояние операции, чтобы, например, 10-шаговый мастер сохранялся (persisted), даже если сервер перезапускается или что-то еще неожиданное происходит. "Рабочие процессы" созданы при помощи   технологии Windows Workflow Foundation (англ.), и если вы с ней знакомы, вы будет чувствовать себя как рыба в воде.

Существует целый ряд фасадов и методов, написанных на JavaScript, к которым можно подключиться, когда пишите расширения для консоли. Это выходит за рамки того, что я здесь могу описать, поэтому я воздержусь даже от того, чтобы начинать здесь эту тему.

(окончание следует...)

***

Ссылки по теме на некоторые материалы на русском:

Комментариев нет:

Отправить комментарий