Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Разработка интегрированных приложений Часть 2, Smart Client Software Factory 
:(
    Опции темы
Medved
Дата 24.5.2007, 00:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 7209
Регистрация: 15.9.2002
Где: Kazakhstan, Astan a

Репутация: 3
Всего: 154




Новые средства и документация для создания интегрированных настольных приложений
Composite UI Application Block (CAB)+ Smart Client Software Factory


Часть 1.

Часть 2


Введение В Smart Client Software Factory (SCSF)

Помимо базовых сервисов CAB существует еще один класс фундаментальных сервисов, которые понадобятся вам при создании реального корпоративного приложения. Эти сервисы включают средства, помогающие управлять интегрированным настольным приложением (Integrated Desktop) в таких областях, как развертывание, защита и инициализация. Вам также могут потребоваться сервисы для ведения журналов, контроля производительности, настройки и кэширования, что позволит гарантировать корректную работу всех модулей в среде со слабым сопряжением.

Здесь вам поможет Smart Client Software Factory. Будучи не просто набором инструментов, Smart Client Software Factory содержит начальный комплект базовых сервисов смарт-клиента, упрощающих создание корпоративных интегрированных настольных приложений.

Все сервисы можно считать необязательными (опциональными) и в то же время расширяемыми. Smart Client Software Factory опирается на CAB и Enterprise Library и использует преимущества существующих блоков приложений. На рис. 1 показана архитектура сервисов смарт-клиента, основанная на Smart Client Software Factory.

user posted image

оскольку большинству компаний нужны сервисы общего применения, Microsoft встроила в Smart Client Software Factory соответствующий набор. Важное место в нем занимают две эталонные реализации, демонстрирующие типичное применение сервисов, содержащихся в Smart Client Software Factory. Первая реализация имитирует настольное приложение для эксперта по займам и содержит средства для работы в автономном режиме, уведомления конечного пользователя и подобные им функции. Вторая реализация имитирует настольное приложение для менеджера банка (многомодульная версия примера Bank Teller), демонстрируя применение сервисов защиты, развертывания и поддержки тем.

Комплекты руководств также оказывают ощутимую помощь при создании корпоративных приложений. Они включают относительно новый пакет Guidance Automation Toolkit (GAT) — расширение для Visual Studio 2005. С помощью GAT разработчики в группе могут создавать начальные наборы (или SDK), чтобы другие разработчики впоследствии могли добавлять в них модули и прочие элементы интегрированного настольного приложения. В Smart Client Software Factory входит Visual Studio Guidance Package for Smart Client Development. Это интегрированный набор инструментов, шаблонов, исходного кода и подробных инструкций, помогающих разработчикам интегрированного настольного приложения. Узнать более подробную информацию о GAT и скачать его можно по ссылке msdn.microsoft.com/vstudio/teamsystem/Workshop/gat/default.aspx (EN).


Основные сервисы смарт-клиента

Integrated Desktop опирается на Smart Client Software Factory и CAB. Он может принимать форму универсального набора CAB-расширений, реализаций Smart Client Software Factory, базовых сервисов общего применения и библиотек, которые могут быть целиком или частично включены в любое приложение с составным UI.

Сервисы контекста — Один из важнейших элементов в создании интегрированного настольного приложения. И, по-видимому, один из зачастую неверно трактуемых. При работе с CAB-приложениями, содержащими несколько модулей, вы обычно сталкиваетесь с какой-либо формой совместного использования информации. Например, ваше приложение может содержать оболочку, модуль для вывода на экран информации о заказчиках, модуль для отображения строки сводных данных, модуль для поиска и другие специализированные модули. Каждый из этих модулей можно разрабатывать, внедрять и поддерживать независимо от других. CAB предоставляет инфраструктуру для этого, т. е. отвечает на вопрос «как». Но еще остается вопрос «что», т. е. информация, которая будет совместно использоваться этими модулями. Это может быть просто идентификатор заказчика. Event Broker уведомляет всех, что этот контекст изменился, благодаря чему все модули отображают надлежащую информацию в надлежащее время. Широковещательная рассылка идентификатора заказчика означает, что это совместно используемая информация, а значит, идентификатор заказчика относится к «контексту».

Сервисы контекста применяются исключительно для широковещательной рассылки и получения общей информации по аналогии с правилами системной политики, определенными для корпоративного настольного приложения. Вы должны установить базовый набор типов контекста и соответствующие контракты схем до включения какого-либо иного сервиса в свое интегрированное настольное приложение. То есть действовать так, как принято при проектировании в рамках архитектуры SOA: первым делом — контракт. Но вместо контрактов, определяемых в конечных точках Web-сервисов, вы определяете те же контракты между частями приложения Integrated Desktop. Фактически вы решаете такие же задачи, как и в проекте EAI или SOA.

Сервисы развертывания — Поддерживают разделение приложения Integrated Desktop на части, гарантируя, что отдельные модули можно будет загружать в период выполнения. Как вариант, сервисы развертывания можно создать на базе ClickOnce API. Эти сервисы должны обеспечивать на серверной стороне контроль за дополнительными модулями, которые предназначены для загрузки в приложение Integrated Desktop. Когда оболочка загружается, сервисы аутентификации подтверждают сервисам развертывания, что данные модули доступны для данного пользователя и потому должны быть загружены в приложение, если их там еще нет. Модули скачиваются, загружаются загрузчиком модулей и отображаются пользователю по мере необходимости. CAB позволяет добавлять роли пользователя в каталог профиля и вызывает загрузчик только для модулей, которые авторизованы на запуск с ролями, назначенными в текущий момент данному участнику системы безопасности (principal).

Сервисы защиты — В отличие от сервисов контекста сервисы защиты довольно просты для понимания. Их можно надстраивать над сервисами аутентификации, которые уже есть в CAB. Это создает отправную точку для применения пользовательских сервисов аутентификации и позволяет единообразно реализовать логику авторизации в приложении Integrated Desktop. С помощью сервисов и руководств из состава CAB и Smart Client Software Factory вы можете добавлять роли в отдельные модули, указывая тем самым, что эти модули связаны с определенными ролями. То есть вы можете задавать, какие модули загружать в зависимости от роли пользователя, вошедшего в систему, а также получаете ряд других средств контроля за тем, какие модули в данный момент загружены в приложение Integrated Desktop.

Сервисы интеграции — Развертывание единого корпоративного приложения Integrated Desktop было бы не очень продуктивным, если бы управляемые приложения Windows Forms оставались единственными кандидатами на интеграцию в смарт-клиенте. Обычно в организации есть какое-то количество ранее созданных (устаревших) приложений, которые надо интегрировать так, чтобы они могли оставаться автономными и вместе с тем участвовать в задачах, выполняемых приложением Integrated Desktop. Сюда входят Web-приложения, созданные без применения .NET, Web-сервисы ASP.NET, COM- и даже консольные приложения.

Сервисы интеграции в Smart Client Software Factory помогают решать некоторые из этих задач в вашем интегрированном настольном приложении. В статье рассматривается интеграция одного типа устаревших приложений — Web-приложений. Мы покажем, как CAB и Smart Client Software Factory (вместе с соответствующими комплектами руководств) помогают с минимальными усилиями создать Web-модуль для хостинга любого Web-приложения.

Функциональные уровни Integrated Desktop
Integrated Desktop состоит из трех уровней: базисного, платформы и прикладного. Важно понимать эти уровни и то, как они соотносятся с архитектурой интегрированного настольного приложения при его разработке. На рис. 2 показана связь этих уровней с различными уровнями архитектуры Integrated Desktop.

user posted image

Базисный уровень — Здесь содержатся все базовые клиентские сервисы CAB, а также сервисы, подобные сервисам защиты и развертывания, которые могут быть дополнены любым модулем или элементом Smart Part. Здесь же представлены объединенные горизонтальными связями компоненты интегрированного настольного приложения. CAB и Smart Client Software Factory занимают значительную часть базисного уровня. Этот уровень и соответствующие ему клиентские сервисы необходимы в первую очередь при создании инфраструктуры интегрированного настольного приложения.

Уровень платформы — На этом уровне размещаются сервисы, предоставляющие элементы, специфичные для платформ или технологий, например сервисы для поддержки устаревших приложений. Данный уровень состоит из компонентов, которые разработчик модулей или элементов Smart Part может использовать, чтобы включать в приложение элементы, зависимые от соответствующей платформы. Если у вас несколько Web-приложений, которые нужно интегрировать в приложение Integrated Desktop, их хостинг упростят универсальные сервисы поддержки клиентских Web-приложений, которые являются одним из компонентов вашей IDF. Например, вы хотите воспользоваться имеющимся у вас приложением, которое управляет корзиной покупателя и уже находится в эксплуатации. Сервисы уровня платформы помогут хостингу этого приложения в вашем интегрированном решении так, что это приложение будет работать подобно любому другому управляемому модулю. Smart Client Software Factory обеспечивает набор сервисов этого уровня для поддержки устаревших приложений.

Прикладной уровень — Включает только приложения и повторно используемые клиентские бизнес-функции. Предоставляет клиентские сервисы, специфичные для бизнеса. Состоит из модулей, с которыми вы обычно взаимодействуете, — для поиска, получения информации о заказчике, поддержки корзины покупателя.


Интеграция устаревших Web-приложений

Хостинг в CAB-приложении существующего Web-приложения требует нечто большего, чем просто добавления в Smart Part элемента управления, представляющего браузер. Смысл интеграции на клиентской стороне в том, чтобы все приложения (или модули) были полностью интегрированы. Иначе говоря, они должны взаимодействовать и обмениваться информацией в обоих направлениях. Это было возможно и до появления CAB, но решения получались громоздкими и не универсальными.

Как уже говорилось, теперь можно создать Web-модуль и использовать его для хостинга любого Web-приложения. Это никак не отразится на работе других модулей. Сейчас мы пошагово разберем процесс построения простого Web-модуля (подобного показанному на рис. 3), опираясь на руководство, предложенное командой разработчиков Smart Client Software Factory. Мы воспользуемся сервисами CAB и новыми пакетами Guidance из состава Smart Client Software Factory.

user posted image\

Первое, что надо сделать, — создать новое Web-приложение или расширить существующее. В этом примере описываются этапы создания нового Web-приложения ASP.NET. Вы можете взять его за образец и при модификации существующих Web-приложений. Описанный процесс несколько трудоемок: вы должны добавить в приложение JScript и использовать его объектную модель для взаимодействия с Web-приложением.

Создав пример Web-страницы, которая будет вести себя как типичное Web-приложение, мы займемся построением Web-модуля. Но сначала вы должны скачать следующие ресурсы:
  • Guidance Automation Extensions (GAX);
  • пакет руководств Composite UI Application (убедитесь, что это свежая версия);
  • Composite UI Application Block;
  • простое приложение-оболочку с надлежащими ссылками на библиотеку CAB и Smart Client Software Factory;
  • библиотечный проект со всем общим кодом, который можно использовать в других модулях и библиотеках приложений.
Будучи частью Smart Client Software Factory, классы вроде Microsoft.Practices.SmartClient.Web.WebPresenter и Microsoft.Practices.SmartClient.Web.WebView предоставляют базовые средства для автоматической диспетчеризации с помощью Event Broker из состава CAB тех событий, которые генерируются вашей Web-страницей. Это позволяет оснастить любой Web-модуль встроенным в CAB механизмом коммуникаций по умолчанию, через который будут автоматически передаваться в обе стороны все события Web-страницы. Класс Microsoft.Practices.SmartClient.Web.WebView наследует от элемента управления «браузер» и может повторно использоваться в вашем Web-модуле.

Заметьте, что пакет руководств не обязателен, он лишь добавляет в ваш проект несколько шаблонов кода, например сервисы, предоставляемые Smart Client Software Factory. В качестве альтернативы можете скачать примеры Web-страницы и Web-модуля, прилагаемые к этой статье.

Этап 1: создание Web-страницы

Начнем с создания Web-страницы, которая будет работать в качестве устаревшего Web-приложения.

1. Создайте новый Web-проект или добавьте новую страницу в существующий Web-проект.

2. При желании можете добавить ссылку на любую библиотеку общего назначения, содержащую, например, какие-нибудь константы, которые будут использоваться Web-приложением.

3. Добавьте HTML-кнопку, свойству Text которой присвойте значение «Fire Context Changed Event (from JavaScript)».

4. Добавьте ASP.NET-кнопку, свойству Text которой присвойте значение «Fire Context Changed Event (from ASP.NET server)».

5. Добавьте текстовое поле HTML с идентификатором «txtCustomerName».

6. Добавьте следующий код в метод Page_Load этой страницы (необходим только при использовании серверных элементов управления ASP.NET):
Код

ClientScript.RegisterOnSubmitStatement(cstype,
    Common.Events.ContextChanged,
    BuildRaiseEvent(Common.Events.ContextChanged));


7. Добавьте следующий закрытый метод (он тоже нужен лишь при использовании серверных элементов управления ASP.NET):
Код

private string BuildRaiseEvent(string topic)
{
    StringBuilder sb = new StringBuilder();
    sb.Append("window.external.FireEvent(\"");
    sb.Append(topic);
    sb.Append("\",0);");
    return sb.ToString();
}


8. Дважды щелкните первую кнопку и добавьте код для события onclick:
Код

window.external.FireEvent("ContextChangedEvent","Param1");


Этот код отправляет событие Web-страницы посредством Smart Client Software Factory в код Web-браузера и в смарт-клиент, использующий Event Broker.

9. Добавьте следующий код после обработчика события onclick из предыдущего пункта:
Код

function EventBroker_Subscribe()
{
    window.external.SubscribeEvent("ContextChangedEvent");
    window.external.SubscribeEvent(
        "CustomerContextChangedEvent");
}

function EventBroker_ContextChangedEvent()
{
    window.alert("Context changed event: Hello from Web App");
}


Обработчик события Subscribe позволяет смарт-клиенту сообщить Web-странице, когда она должна подписаться на получение событий (обычно после того, как Web-страница загрузится в элемент управления «браузер»). Web-страница в свою очередь посылает ответ хосту и вызывает SubscribeEvent (событие, на которое подписывается web-страница). Это позволяет передавать все глобальные события CAB по мере их поступления от смарт-клиента в Web-страницу. А их перехват осуществляется обработчиками событий EventBroker_XXX в JScript.

10. Добавьте следующую JScript-функцию:
Код

function EventBroker_CustomerContextChangedEvent(eventData)
{
    document.getElementById('txtCustomerName').value =
        eventData.Name;
}


Здесь показано, как передать данные события от смарт-клиента в Web-страницу и использовать в ней эти данные.

Этап 2: создание Web-модуля

Чтобы создать Web-модуль, сначала щелкните правой кнопкой мыши свое решение и выберите Add | CompositeUI | Module. В диалоговом окне Add New Project задайте имя своего модуля. Нажмите OK, выберите проект Shell и нажмите Finish.

Вы увидите, что появилось несколько новых элементов. В решение добавлен новый проект Web-модуля. Также добавлены необходимые ссылки, включая ссылки на библиотеки CAB и Smart Client Software Factory. Внутри иерархии каталогов нового проекта создана папка WorkItems, а в проекте созданы файл ModuleInit.cs и соответствующий класс.

Этап 3: создание нового рабочего элемента

Создать новый рабочий элемент так же легко. Щелкните правой кнопкой мыши папку WorkItems в модуле, который вы только что создали, и выберите Add | CompositeUI | WorkItem. Измените имя на WebWorkItem.cs. Выберите проект Shell и нажмите кнопку Finish.

После этого вы обнаружите, что создан файлы WebWorkItem.cs и соответствующий класс. Кроме того, для CAB и Smart Client Software Factory добавлены директивы using и необходимые ссылки.

В метод Load класса ModuleInit добавьте такой код:
Код

WorkItemCatalog.RegisterWorkItem<WebWorkItem>();


В начало файла ModuleInit.cs вставьте директиву using:
Код

using WebModule.WorkItems.WebWorkItem;


Этап 4: создание нового представления View

Этот этап касается обмена данными между Web-страницей и смарт-клиентом (в данном случае — Web-модулем).

1. Щелкните правой кнопкой мыши папку WebWorkItem.

2. Выберите Add | CompositeUI | View.

3. Измените имя на WebView и нажмите кнопку Finish. Тем самым вы создаете интерфейс IWebView, класс WebPresenter и пользовательский элемент управления WebView. Здесь реализуется типичный шаблон MVP, применяемый в Smart Client Software Factory.

4. Перейдите к классу WebWorkItem и добавьте код:
Код

public void ShowInView(IShellView view)
{
    WebView webView = this.Items.AddNew<WebView>();
    view.MainWorkspace.Show(webView);
}


Тем самым вы добавляете WebView (элемент Smart Part) в набор элементов из набора рабочих элементов Smart Part и отображаете его, когда запускается рабочий элемент.

5. В режиме дизайнера откройте WebView UserControl.

6. Добавьте элемент управления Microsoft.Practices.SmartClient.Web.WebView из Smart Client Software Factory.

7. Установите свойство Url элемента управления Microsoft.Practices.SmartClient.Web.WebView так, чтобы оно указывало на только что созданную тестовую Web-страницу.

8. Перейдите к файлу WebWorkItem.cs и добавьте директиву using:
Код

using Microsoft.Practices.SmartClient.UI.Themes;


9. Откройте класс WebPresenter и введите код:
Код

[EventSubscription(Common.Events.ContextChanged,
                   Thread=ThreadOption.UserInterface)]
public void OnContextChange(object sender, EventArgs e)
{
    System.Windows.Forms.MessageBox.Show( _
        "Context changed: Hello from Rich UI component");
}


Это событие генерируется Web-страницей при посредстве CAB Event Broker и направляется в ваш код WebView.

10. Добавьте директиву using:
Код

using Microsoft.Practices.CompositeUI.EventBroker;


11. Откройте интерфейс IWebView и добавьте следующий код:
Код

event WebBrowserDocumentCompletedEventHandler
    DocumentCompleted;


12. Откройте класс WebPresenter и добавьте код, показанный в листинге 1. Это позволяет Smart Client Software Factory реализовать подписку в ответ на загрузку Web-страницы. Когда Web-страница загружена, генерируется событие CustomerContextChangedForWebPage. С помощью Event Broker оно отправляется Web-странице в виде CustomerContextChanged (в JavaScript). В этом заключается передача контекста или информации от смарт-клиента в Web-страницу при загрузке Web-модуля из смарт-клиента, и это позволяет любому Web-приложению отображать информацию от смарт-клиента в ответ на свою загрузку. Заметьте, что у процесса-отправителя нет нужды в перегрузке функций — требуется лишь установить определенное событие при его загрузке.
Листинг 1. Реализация подписки
Код

[EventPublication(Common.Events.CustomerContextChanged,
    PublicationScope.Global)]
public event EventHandler<DataEventArgs<IIdentity>>
    CustomerContextChangedForWebPage;

protected override void OnViewAdded()
{
    this.View.DocumentCompleted +=
        new WebBrowserDocumentCompletedEventHandler(
            OnDocumentCompleted);
}

protected override void OnViewRemoved()
{
    this.View.DocumentCompleted -=
        new WebBrowserDocumentCompletedEventHandler(
            OnDocumentCompleted);
}

private void OnDocumentCompleted(
    object sender, WebBrowserDocumentCompletedEventArgs args)
{
    if (CustomerContextChangedForWebPage != null)
    {
        CustomerContextChangedForWebPage(this,
            new DataEventArgs<IIdentity>(
                Thread.CurrentPrincipal.Identity));
    }
}


13. Добавьте следующие директивы using:
Код

using System.Threading;
using System.Security.Principal;
using Microsoft.Practices.CompositeUI.Utility;


14. В класс WebView (реализация интерфейса IWebView) введите код:
Код

public event WebBrowserDocumentCompletedEventHandler
DocumentCompleted
{
    add { this.webView1.DocumentCompleted += value; }
    remove { this.webView1.DocumentCompleted -= value; }
}


Этап 5: компиляция и тестирование решения

Разместите WebModule.dll в одном каталоге с приложением оболочки и добавьте модуль в ProfileCatalog.xml, чтобы его мог загружать сервис загрузчика модулей CAB.

Наконец, воспользуйтесь тем же шаблоном, по которому вы передаете сообщения другим модулям через Event Broker. Запустите этот Web-модуль так же, как и любой другой Web-модуль. Теперь все глобальные события будут передаваться от смарт-клиента в этот Web-модуль и обратно.


Взгляд в будущее

В моем примере маленький блок JavaScript-кода взаимодействовал с хост-приложением через Document Object Model (DOM). Этот способ применяется в InfoPath, чтобы Action Pane, основанный на HTML, мог получить доступ к DOM для XML-документа.

Для существующих приложений, базирующихся на Web-технологиях, это относительно грубый подход. Он требует внесения изменений в Web-приложение, его перекомпиляции и новой установки. Мы представляем менее грубый способ, который позволяет любому элементу Smart Part внедрять весь необходимый интегрирующий код в модель DOM HTML-страницы в период выполнения, а не при компиляции. Конечно, при этом нужно уделять должное внимание безопасности. А функциональность Event Broker из состава Smart Client Software Factory следует расширить методами связывания контекста смарт-клиента с элементами HTML-страницы.

У модулей для корпоративного применения захватывающие перспективы. Представьте себе основанный на Windows Workflow Foundation модуль рабочего процесса, который обеспечивает полностью хостинговую архитектуру в настольном приложении. Рабочий процесс интегрируется непосредственно в существующие приложения, размещаемые в Integrated Desktop, облегчая работу сотрудникам информационных отделов. И нельзя ли все программные решения перенести в островки сервисов, связанных между собой набором модулей рабочих процессов?

Данная архитектура развивается, и в ней будут непрерывно отражаться новые возможности платформы. Долгожительство послужит одной из лучших оценок этой архитектуры корпоративного уровня. Открываемый Windows Vista вал новых возможностей, несомненно, повлияет на наши подходы к принятию решений, и у Integrated Desktop есть все шансы оказаться на гребне волны.

Ссылки
Software Factories
Mobile Client Software Factory – Community Technical Preview Release
Smart Client Software Factory
Web Client Software Factory
Web Service Software Factory

Дополнительно
Composite UI Application Block и Smart Client Software Factory. Ветка на форуме SQL.RU
M-V-P в Composite Application Blocks
Model-View-Controller в .Net. Model-View-Presenter и сопутствующие паттерны


--------------------
http://extreme.sport-express.ru/
...и неважно сколько падал, важно сколько ты вставал...
PM MAIL WWW ICQ Skype GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0620 ]   [ Использовано запросов: 23 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.