Капелла 4.0

Капелла 4.0

Сегодня я расскажу о недавно вышедшей новой версии Капеллы – 4.0. Техническая версия имеет новое ядро под кодовым названием Aurex. Ключевые отличия нового ядра от старого заключаются в следующем:
  • Ядро написано заново.
  • Поддерживаемая версия Microsoft .NET Framework – 4.0 (в частности, WF 4.0 для написания сценариев).
  • Расширен набор поддерживаемых платформ: теперь поддерживаются WPF и Silverlight.
  • Разработка приложения с использованием нового ядра стала более простой и прямолинейной. Те сложности по созданию проекта, которые я описывал для Капеллы 3.5, больше не нужны – теперь достаточно создать проект приложения, подключить необходимые библиотеки и вызвать метод Run.
  • Ядро использует существующие технологии и практики, такие как Microsoft PrismManaged Extensibility Framework и др. – при разработке на новом ядре можно использовать существующие знания и навыки, а необходимость в конфигурировании (вспомним большое количество конфигурационных файлов в Капелле 3.5) сведена к минимуму.
  • Полностью переработанный интерфейс пользователя, на 100% расширяемый через API ядра с помощью модулей. Внешний вид и функциональность интерфейса идентичны на всех поддерживаемых платформах.
  • Измененный механизм доступа к данным. Доступ к данным осуществляется теперь на стороне сервера посредством сценариев, служб RIA (пока службы RIA поддерживаются только для Silverlight, но в будущем планируется поддержка и для WPF) и WCF, не требуя запуска специальной службы и генерации контекстных сборок.
  • Проверка подлинности пользователя (вход в систему) может использовать авторизацию ASP.NET, что позволяет использовать стандартные средства ограничения доступа на стороне сервера.

Демонстрация

Продемонстрирую более подробно Silverlight – версию демо-проекта (кодовое имя демо-проекта – Aurum). Для начала см. скриншот приложения (Silverlight в режиме вне браузера). Из скриншота видно, что интерфейс приложения состоит из трех основных частей:
1. Лента (ribbon), расположенная  в верхней части окна. Доступные вкладки и содержимое ленты могут добавляться с помощью внешних модулей.
2. Рабочие области, расположенные в основной части окна. Рабочие области имеют двухуровневый переключатель. Первый уровень называется «книга» (Workbook), второй – «лист» (Worksheet). Каждая книга является группой листов, которые могут быть закрыты одновременно (при закрытии книги). Некоторые листы также могут закрываться индивидуально, не требуя закрытия книги. Обычно в приложениях одна книга доступна при открытии приложения, а каждая новая книга создается при запуске сценария и закрывается при его завершении.
3. Перекрывающие закладки (Overlay) – это группа кнопок в нижней части окна (Информация, Календарь и т.д.). При нажатии на перекрывающую закладку ее содержимое отображается поверх содержимого книги (к книге можно вернуться, щелкнув ее заголовок). В перекрывающих закладках обычно размещаются справочники и другая информация, которая должна быть доступна всегда. Например, в одной из таких закладок может отображаться интерфейс модуля CRM, позволяющего открывать карточки объектов в виде листов в активной книге. С точки зрения программистов, перекрывающие закладки – это третий (самый верхний) уровень переключателя рабочих областей (невидимая первая закладка как раз соответствует изображенной на скриншоте ситуации, когда отображаются книги и листы).



Создание приложения

Расскажу вкратце о том, как пишутся приложения под новое ядро. Для начала создаем обычное Silverlight- или Wpf-приложение и добавляем ссылку на Aurex.Shell.dll. В процессе разработки могут потребоваться и ссылки на другие сборки. Например, большинство интерфейсов ядра находятся в сборке Aurex.ClientModel.dll.
Чтобы запустить приложение с использованием ядра Aurex, метод Application_Startup нужно реализовать следующим образом:
private void Application_Startup(object sender, StartupEventArgs e)
{
    Aurex.Shell.ShellApplication.Run();
}
Данный код выполняет новое ядро, создавая MEF-контейнер, содержащий сборку приложения. Все типы, помеченные атрибутом System.ComponentModel.Composition.ExportAttribute, будут проэкспортированы и автоматически использованы ядром. Кроме того, будет прочитан файл ModulesCatalog.xml, входящий в состав приложения. В файле ModulesCatalog.xml могут быть описаны модули Prism, которые требуется загрузить и проинициализировать. Для более подробной информации см. документацию по Prism.

Простой Export

Для начала сделаем что-нибудь простое, а именно укажем, что выводить в заголовке приложения. В демо-проекте Aurum нужно, чтобы в заголовке выводилось название «Aurum».
Ядро содержит множество интерфейсов. Некоторые из этих интерфейсов реализуются ядром и могут быть использованы в модулях посредством атрибута System.ComponentModel.Composition.ImportAttribue. Некоторые интерфейсы предназначены для реализации в приложении и его модулях. Для более подробной информации о таких интерфейсах нужно ознакомиться с документацией по ядру, которая будет доступна позже.
Чтобы указать название приложения, требуется реализовать интерфейс IApplicationBranding из пространства имен Aurex.ClientModel.Branding (опеределен в Aurex.ClientModel.dll). Этот интерфейс содержит всего одно свойство – string Name { get; }. Создадим в приложении файл ApplicationBranding.cs, содержимое которого должно быть следующим:
namespace Aurum.Application
{
    using System;
    using System.ComponentModel.Composition;
    using Aurex.ClientModel.Branding;

    [Export(typeof(IApplicationBranding))]
    public class ApplicationBranding : IApplicationBranding
    {
        string IApplicationBranding.Name
        {
            get { return "Aurum"; }
        }
    }
}

В этом коде мы создали очень простую реализацию интерфейса IApplicationBranding и сообщили о ней ядру через атрибут Export. Указанное имя приложения будет использовано ядром для отображения в заголовке приложения и других подходящих местах.

Использование модулей

Создадим теперь простой модуль, выводящий новую закладку в overlay-области.
Overlay-область представляется ядром клиентскому приложению в качестве области (region) в терминологии Prism. Имя области является константой OverlayRegion, хранящейся в классе Aurex.ClientModel.RegionNames. Для управления областями Prism предоставляет нам интерфейс Microsoft.Practices.Prism.Regions.IRegionManager, который можно использовать при инициализации модуля для добавления в область нового представления. Подробнее о Prism можно посмотреть в документации, а также ознакомиться с примерами, находящимися на сайте Codeplex.
Мы сейчас расмотрим максимально простой модуль. Ввиду его простоты класс, реализующий модуль, можно разместить непосредственно в приложении – Prism умеет инициализировать такие модули автоматически. При необходимости модули можно выносить в отдельные сборки и размещать описание модулей в файле ModulesCatalog.xml (для Silverlight-приложений этот файл поддерживается при условии, что для него указано действие при построении Resource).
Создадим в приложении файл Overlay.cs и напишем в нем такой код:

namespace Aurum.Application.SampleData
{
    using System;
    using System.ComponentModel.Composition;
    using System.Windows.Controls;
    using Aurex.ClientModel;
    using Aurex.ClientModel.Overlay;
    using Microsoft.Practices.Prism.MefExtensions.Modularity;
    using Microsoft.Practices.Prism.Modularity;
    using Microsoft.Practices.Prism.Regions;

    [ModuleExport("Aurum.Overlay", typeof(Overlay))]
    public class Overlay : IModule
    {
        [Import]
        public IRegionManager RegionManager;

        public void Initialize()
        {
            RegionManager.RegisterViewWithRegion(
                RegionNames.OverlayRegion,
                () => new OverlayItem { Header = "Информация", Content = new Button { Content = "Кнопка для вызова информации" } }
                );

            RegionManager.RegisterViewWithRegion(
                RegionNames.OverlayRegion,
                () => new OverlayItem { Header = "Календарь", Content = new Button { Content = "Кнопка для вызова календаря" } }
                );

            RegionManager.RegisterViewWithRegion(
                RegionNames.OverlayRegion,
                () => new OverlayItem { Header = "Аналитика", Content = new Button { Content = "Кнопка для вызова аналитиков" } }
                );
        }
    }
}

В качестве представлений закладок мы использовали класс OverlayItem из пространства имен Aurex.ClientModel.Overlay. Использование класса OverlayItem позволяет указать заголовок элемента, а внешний вид закладки предоставляется ядром; можно также использовать стандартное представление TabItem, но при этом внешним видом потребуется управлять самостоятельно. При наследовании от класса OverlayItem можно узнать, когда представление активировалось и деактивировалось, переопределяя методы OnActivated() и OnDeactivated(). OverlayItem можно активировать и деактивировать программно, меняя значение свойства IsActive.

Заключение

Итак, вышла новая версия Капеллы и мы получили первое внешнее представление о ней.
Посмотрим еще раз приведенные примеры. Из примеров видно, что код приложения является очень простым и максимально использует существующие технологии, такие как MEF и Prism, хотя работа идет при этом зачастую со специфичными для ядра интерфейсами и классами.
В примерах показаны далеко не все случаи использования ядра (их даже недостаточно для нормального запуска приложения, т.к. мы не рассмотрели пока, например, авторизацию). Примеры пока лишь демонстрируют стиль программирования под новое ядро. О том, что необходимо реализовать для запуска приложения, а также о некоторых тонкостях поговорим в следующих статьях.
Страницы: 1  2  
Страницы: 1  2  

Поделитесь информацией