Осенью прошёл курс и получил ключ. Но т.к. уже имел действующую подписку, то ключом не воспользовался. Сейчас захожу сюда, а про DreamSpark вообще ни слова. Где же мой ключ? |
Использование аспектно-ориентированного программирования (АОП) в среде Visual Studio 2013
17.7. Второй пример применения АОП для новой версии Azure
Рассмотрим теперь "Hands-on Lab 6: Implementing Throttling Behavior", где иллюстрируется ограничение функциональности под нагрузкой с использованием сервисов функционального блока Autoscaling Application Block. Отдельный компонент Autoscaler занимается мониторингом диагностической информации и, в зависимости от текущей нагрузки на облако, устанавливает свойство ThrottlingMode в файле конфигурации исходного проекта. В зависимости от значения этого свойства какие-то из методов класса веб-страницы могут изменять свое поведение (листинг 17.3).
//Веб-роль, на странице которой тестируется Autoscaling Application Block public partial class Default : System.Web.UI.Page { protected override void OnPreRenderComplete(EventArgs e) { base.OnPreRenderComplete(e); string throttlingMode = RoleEnvironment.GetConfigurationSettingValue("ThrottlingMode"); switch (throttlingMode) { case "HighActivity": this.ThrottlingLabel.Text = "Работа при высокой активности…"; break; default: this.ThrottlingLabel.Text = "Работа при обычной активности…"; this.DoSomeUsualWork(); break; } } private void DoSomeUsualWork() {/*…*/} }Листинг 17.3.
Данный метод можно перенести в аспект и тогда целевой класс будет сконцентрирован только на решении своей задачи, в то время как компонент Autoscaler и бесшовная интеграция с аспектом обеспечит реакцию на повышенную нагрузку. Задачу можно было бы решить аналогично предыдущему примеру, но здесь есть препятствие в виде вызова закрытого в целевом классе метода DoSomeUsualWork(). Для того, чтобы он стал доступным замещающему наследнику, компоновщик аспектов мог бы принудительно сделать этот метод защищенным. Однако это нарушит инкапсуляцию целевого класса, и единственный способ сохранить ее - использовать рефлексию .NET. Закрытые члены целевого класса становятся полями его аспектного наследника, которые инициализируются в конструкторе. Также предположим, что в замещающем наследнике целевого класса нам понадобится вызвать метод OnPreRenderComplete следующего по иерархии базового класса System.Web.UI.Page. Защищенные и открытые методы целевого класса используются в его замещающем аспектном наследнике без ограничений. Итоговый аспект представлен в листинге 17.4.
using System.Reflection; [AspectDotNet.ReplaceBaseClass] public class AspectClass : _Default { MethodInfo DoSomeUsualWork; public AspectClass() { Type BaseType = this.GetType().BaseType; //Получение ссылки на закрытый метод целевого класса _Default DoSomeUsualWork = BaseType.GetMethod("DoSomeUsualWork", BindingFlags.NonPublic | BindingFlags.Instance); //Ссылка на метод базового класса System.Web.UI.Page PageOnPreRenderComplete = base.GetType().BaseType. GetMethod("OnPreRenderComplete", BindingFlags.NonPublic | BindingFlags.Instance); } protected override void OnPreRenderComplete(EventArgs e) { //Вызываем метод базового класса System.Web.UI.Page PageOnPreRenderComplete.Invoke(this, new object[] { e }); string throttlingMode = RoleEnvironment.GetConfigurationSettingValue("ThrottlingMode"); switch (throttlingMode) { case "HighActivity": //Использование в аспекте члена целевого класса _Default this.ThrottlingLabel.Text = "Работа при высокой активности…"; break; default: this.ThrottlingLabel.Text = "Работа при обычной активности…"; //Вызов закрытого члена целевого класса _Default DoSomeUsualWork.Invoke(this, null); break; } } }Листинг 17.4.
17.8. Использование компоновщика аспектов для подмены целевой сборки на сборку с внедренными аспектами перед публикацией в облаке
Новая версия системы Aspect.NET, совместимая с новейшей интегрированной средой MS Vusial Studio 2013, доступна в настоящее время в виде компоновщика аспектов (который реализован как консольное приложение) и набора скриптов для управления процессом сборки решений, таким образом, чтобы обеспечить подмену исходной бинарной сборки на ее новую версию с внедненными аспектами перед публикацией в облаке. В настоящее время версия Aspect.NET Framework для VS 2013 (т.е. графический пользовательский интерфейс) находится в процессе разработки.
Вызов компоновщика в консольном варианте имеет вид:
weaver -aspects MyAspect.dll -in HelloWorld.exe -out AspectHelloWorld.exe
Рассмотрим алгоритм разработки и бесшовной интеграции аспектов в MS VS 2012 с помощью Aspect.NET:
Вход: Проект с исходными текстами целевого приложения, к которому нужно применить аспекты.
- Создаем отдельный проект для аспекта (типа Class Library) и объединяем его с целевым проектом в рамках общего решения (solution).
- Чтобы обеспечить интеграцию аспекта с целевой сборкой, в свойствах его проекта на вкладке Build Events добавляем соответствующий скрипт
:: Укажем папку со сборкой целевого проекта set TargetAssemblyDir=C:\HelloWorld\HelloWorld\bin\Debug\ :: Название его сборки set TargetAssembly=HelloWorld :: Ее расширение set TargetAssemblyExt=.exe :: Для каждого нового аспекта или целевого проекта необходимо менять лишь :: вышеуказанные переменные :: Зададим путь к директории Aspect.NET set AspectDotNetDir=C:\AspectDotNet set TargetAssemblyPath=%TargetAssemblyDir%%TargetAssembly%%TargetAssemblyExt% set TargetAssemblyName=%TargetAssembly%%TargetAssemblyExt% cd %AspectDotNetDir% weaver -aspects $(TargetPath) -in %TargetAssemblyPath% -out %TargetAssemblyName% :: Подмена сборки в целевом проекте результирующей move /Y %TargetAssemblyName% %TargetAssemblyPath%
17.9. Резюме
Аспектно-ориентированное программирование и система Aspect.NET успешно применимы для платформы Microsoft Azure с использованием среды Visual Studio 2013, что показано на содержательных примерах использования АОП для определения и внедрения в облачные приложения в виде аспектов протоколирующих действий, реализованных с помощью библиотеки Microsoft Enterprise Library Integration Pack for Microsoft Azure. Применение Aspect.NET позволяет гибко управлять функциональностью ASP.NET - страниц, добавляя вызовы необходимых действий (кода) при выполнении типовых действий над страницами.
В настоящее время в группе проекта Aspect.NET под моим научным руководством разработана библиотека аспектов AspectCloud для облачных вычислений в системе Azure.
Ключевые термины
Краткие итоги
Аспектно-ориентированное программирование и система Aspect.NET успешно применимы для платформы Microsoft Azure с использованием среды Visual Studio 2013, что показано на содержательных примерах использования АОП для определения и внедрения в облачные приложения в виде аспектов протоколирующих действий, реализованных с помощью библиотеки Microsoft Enterprise Library Integration Pack for Windows Azure. Применение Aspect.NET позволяет гибко управлять функциональностью ASP.NET - страниц, добавляя вызовы необходимых действий (кода) при выполнении типовых действий над страницами.
Набор для практики
Вопросы
- Что такое АОП?
- Что такое Aspect.NET?
- Каковы методы применения АОП и Aspect.NET для облачных вычислений?
- Что такое Microsoft Enterprise Library Integration Pack for Microsoft Azure?
Упражнения
- Разработайте и опубликуйте с использованием Visual Studio свое облачное Web-приложение.Затем, применив систему Aspect.NET (http://www.aspectdotnet.org), разработайте аспект, модифицирующий поведение приложений при загрузке страницы в браузер и других типовых действиях. Опубликуйте в облаке модифицированное приложение и проверьте его в работе.
- Изучите библиотеку Microsoft Enterprise Library Integration Pack for Microsoft Azure и попробуйте применить новую версию Aspect.NET для пропуска примеров, описанных в лекции.
Темы для курсовых работ, рефератов, эссе
- Применение АОП для облачных вычислений (реферат).
- Библиотека Microsoft Enterprise Library Integration Pack for Microsoft Azure (реферат).
Дополнительные материалы, презентации
Презентация к данной лекции: VS_2013_Course_17.pptx.