Прошло всего три года с тот момента, как корпорация Майкрософт выпустила в свет платформу Silverlight. Первая версия платформы Silverlight, новой многофункциональной платформы веб-приложений Майкрософт, была продемонстрирована на конференции Mix07 в Лас-Вегасе. Сегодня Silverlight стала надежной платформой, пригодной для создания и обслуживания бизнес-приложений.
Silverlight 1.0 имеет модель программирования на основе XAML и JavaScript. JavaScript не идеально подходит для создания корпоративных приложений. Следовательно, первая версия использовалась в основном в сценариях с мультимедиа. После выпуска Silverlight 2 эта платформа стала отличным кандидатом для разработки бизнес-приложений. Наиболее важным изменением являлось возможность создания кода в .NET (C# или VB.NET), а не в JavaScript.
Для «тестирования возможностей» Silverlight и пригодности для создания бизнес-приложений мы составили небольшой список покупок типичных требований бизнес-приложений. Мы увидим, удовлетворяет ли Silverlight этим требованиям.
Данные, данные, данные
Что приходит в голову при рассмотрении бизнес-приложений? На первом месте стоят данные. Приложения Silverlight выполняются на стороне клиента в обозревателе. Однако данные находятся в базе данных на стороне сервера. Если посмотреть на пространства имен и сборки Silverlight, в них отсутствует поддержка ADO.NET, поэтому платформа не поддерживает такие хорошо известные функции, как DataReaders или LINQ-To-SQL.
Кроме того, в Silverlight отсутствует база данных на стороне клиента. Во многих случаях это не решило бы проблему. Вы, конечно же, не захотите случайно сохранить временную копию базы данных с конфиденциальной информацией на клиентском компьютере.
Решение просто: добавление к базе данных уровня службы. Этот уровень службы можно использовать для подключения к базе данных, желательно через бизнес-уровень. На стороне клиенте Silverlight может подключаться к этим службам и получать доступ к данным (см. рис. 1).
Рис. 1 Silverlight может подключаться к службам на стороне клиента.
Silverlight поддерживает типы служб ASMX, WCF и REST. Также можно использовать Silverlight для использования более экзотических служб, таких как сокеты и net.tcp. Это хорошая новость, если вы добавляете Silverlight к существующим технологиям предприятия. Службы, от которых Silverlight может получать данные, – это те же самые службы, которые можно использовать для других типов приложений.
Работа со службами ASMX и WCF аналогична с точки зрения Silverlight. При реализации службы выбором по умолчанию должна быть WCF. Рассмотрим простой пример подключения к службе WCF. Во-первых, нужно определить, что выполняет служба. Эта служба возвращает список продуктов:
[ServiceContract(Namespace = "")]
publicclassOrderService
{
[OperationContract]
publicList<Product> GetAllProducts()
{
...
}
}
После готовности службы можно выполнить подключение к Silverlight. Для этого в Visual Studio добавим ссылку на службу (см. рис. 2).
Рис. 2 Использование Visual Studio для добавления ссылки на службу к Silverlight.
После этого Visual Studio создаст класс прокси. Класс прокси можно рассматривать как клиентскую копию класса службы, где реализации заменены вызовом метода службы. Вся связь со службой в Silverlight выполняется асинхронно. В примере кода ниже мы используем этот прокси для получения списка продуктов:
privatevoid button1_Click(object sender, RoutedEventArgs e)
{
OrderService.OrderServiceClient proxy = new OrderService.OrderServiceClient();
proxy.GetAllProductsCompleted += newEventHandler<OrderService.GetAllProductsCompletedEventArgs>(proxy_GetAllProductsCompleted);
proxy.GetAllProductsAsync();
}
void proxy_GetAllProductsCompleted(object sender, OrderService.GetAllProductsCompletedEventArgs e)
{
ProductGrid.ItemsSource = e.Result;
}
Протокол REST сейчас пользуется популярностью из-за широкого использования API Web 2.0, таких как Facebook и Twitter. Silverlight также полностью поддерживает их. Silverlight также имеет специальную платформу служб, разработанную с учетном n-ярусных приложений Silverlight: Службы RIA WCF.
Введите n-ярус
При создании приложения Silverlight обычно данные получаются через уровень службы. Однако нет простого способа просто создания кода для объектов и классов передачи данных, включая проверку, проверку подлинности/авторизацию. Приложения Silverlight созданы на основе ограниченной версии Microsoft .NET Framework 4. Поэтому в приложении Silverlight нельзя сослаться на сборку (например, содержащую классы/логику проверки) из полной версии .NET Framework 4.
Здесь приходят на помощь службы RIA WCF. Они созданы с целью упрощения разработки RIA для бизнеса. Они устраняют сложность создания n-ярусных приложений, предоставляя платформу, средства управления и службы на стороне сервера и клиента.
Они позволяют создавать службы, привязанные к хранилищу данных на стороне сервера. Это может быть база данных SQL Server, собственные классы POCO или сущностная модель. Потом на клиенте снова создаются эти сущности. После этого создается необходимое содержимое, методы и операции на стороне клиента для упрощения связи с службами.
Если вы знакомы с Entity Framework, то должны чувствовать себя как дома. Вы можете создать код подобным образом. Например, может быть DomainContext на стороне клиента, отслеживающий наборы изменений, содержащий список сущностей и позволяющий передавать эти изменения. Это «скрывает» тот факт, что вы работаете с уровнем службы.
Службы RIA WCF, по существу, – это серверная технология, передающая код клиенту. Она также упрощает добавление проверки и проверки подлинности/авторизации к службам и сущностям. Она значительно уменьшает время разработки, необходимое для создания бизнес-приложений Silverlight.
Вопросы управления
Silverlight включает в себя расширенный набор элементов управления, содержащий простые элементы управления, такие как Button, TextBox и ComboBox. Также в пакете установки по умолчанию есть множество улучшенных элементов управления, таких как DataGrid, RichTextBox и MediaElement. Во всех новых версиях корпорация Майкрософт добавляет новые элементы управления.
Корпорация Майкрософт также создала набор элементов управления Silverlight. Это набор дополнительных элементов управления с открытым исходным кодом, бесплатно доступных на веб-сайте CodePlex.com. Этот пакет довольно регулярно обновляется, а внеочередные выпуски появляются вместе с новыми выпусками Silverlight.
В него входят множество элементов управления, значительно упрощающих жизнь разработчика корпоративных приложений Silverlight. Также включены средства создания диаграмм, которые могут пригодиться для следующего требования: отчеты.
Возможности печати
Печать по-прежнему часто является необходимым требованием бизнеса. Теперь благодаря Silverlight 4 можно выполнять печать непосредственно из Silverlight. API позволяет указывать содержимое для печати, весь экран или динамически созданное содержимое, например отчет. Поэтому в Silverlight 4 можно просто создать решение составления отчетов в сочетании с элементами управления, доступными в наборе, например многофункциональные диаграммы.
Шаблоны и практические рекомендации
При работе с приложениями на основе Silverlight или XAML необходимо учитывать, что способ создания кода отличается от способа, использовавшегося в старых технологиях, таких как ASP.NET и Windows Forms. Можно создавать код подобным образом, но делать этого не стоит. В этом случае не получится использовать все возможности технологии.
Приложения Silverlight должны сильно зависеть от шаблонов DataContext, Data Binding и Observer. Для назначения значений TextBox объектам или наоборот не должен использоваться повторяющийся код. Чем больше приходится писать подобного кода, тем больше вероятность вставки в код ошибки. Объект привязывается к элементам пользовательского интерфейса, а верные значения автоматически становятся доступными через объект в коде. В действительности, непосредственный доступ к элементам пользовательского интерфейса не должен осуществляться.
Здесь может пригодиться шаблон проектирования «модель-представление-модель представления» (MVVM). Он часто используется для разделения концепций (вспомогательный код содержит немного кода, или код вообще отсутствует). Он позволяет работать с пользовательским интерфейсом приложения отдельно от разработчика. Он также улучшает возможность тестирования кода.
Однако самое важно преимущество заключается в том, что разработчики могут использовать возможности DataContext и технологии привязки данных. Ваше представление имеет модель представления в качестве DataContext, содержащей все свойства данных.
Эти свойства привязаны к элементам пользовательского интерфейса в представлении через привязку данных. Модель представления, в сущности, преобразует данные, полученные от модели (объектное представление данных), в данные, которые может использовать представление. Модель представления можно считать «преобразователем на стероидах».
После внедрения потребуется способ отправки событий (такой как Button Click) модели представления вместо вспомогательного кода представлений. Это выполняется с помощью системы команд. Silverlight предоставляет интерфейс ICommand, позволяющий привязать элементы пользовательского интерфейса, наследующие button base, к командам. Эти команды определены в модели представления.
Далее необходим способ обмена информацией между различными моделями представлений без установки ссылок друг на друга. Это можно выполнить с помощью принципа передача/прослушивание. Подписчики модели представления получают определенный тип сообщения, а другая модель представления отправляет другое сообщение. После получения сообщения можно выполнить необходимые действия.
И последнее: необходимо убедиться, что представлению известно значение DataContext. Существуют различные подходы, подход первоначального представления (экземпляр представления создается приложением, и он ответственен за создание необходимой модели представления) или подход первоначальной модели представления (другой способ). Эти способы часто используют контейнер IoC инфраструктуры Managed Extensibility Framework (MEF) для воспроизведения задач.
Существует достаточно много различных реализаций MVVM. Можно написать собственную реализацию, но в сообществе разработчиков программ с открытым исходным кодом уже существуют отличные реализации, такие как MVVM Light Toolkit, Caliburn и Prism.
Как можно видеть, платформа Silverlight отлично подходит для создания корпоративных приложений. Фактически, все мы выполняем это ежедневно.