Тип работы:
Предмет:
Язык работы:


Аспектно-ориентированная реализация принципа инверсии зависимости при разработке программного обеспечения

Работа №135150

Тип работы

Магистерская диссертация

Предмет

информационные системы

Объем работы43
Год сдачи2017
Стоимость4985 руб.
ПУБЛИКУЕТСЯ ВПЕРВЫЕ
Просмотрено
52
Не подходит работа?

Узнай цену на написание


1.1. Введение 4
1.2. Задача 4
1.3. Актуальность 5
1.4. Обзор данной работы 6
2.1. Внедрение зависимостей(Dependency Injection) 7
2.2. Пример «HelloDI!!» 8
2.3. Методы внедрения зависимостей 9
2.3.1. Внедрение через конструктор (ConstructorInjection) 9
2.3.2. Внедрение через метод (MethodInjection) 10
2.3.3. Внедрение через свойство(PropertyInjection) 10
2.4.1 IOC-контейнеры 11
2.4.2. Управление жизненным циклом объектов и механизм перехвата 12
2.5 Обзор существующих IOC-контейнеров 14
2.5.1 Unity 15
2.5.2 Spring.NET 16
2.5.3 Краткий обзор остальных продуктов 16
3.1. ASPECT.NET 17
4.1. MSRoslyn 19
4.1.1. SyntaxTree 19
4.2. Элементы SyntaxTree 21
4.2.1SyntaxNode 21
4.2.2 SyntaxToken 21
4.2.3 SyntaxTrivia 22
4.3 Модификация исходного кода 22
4.4 Семантика 23
4.4.1 Compilation 23
4.4.2 Symbol 23
4.4. Semantic model 24
4.5. Workspaces 25
5.1. Реализация. Схема проекта. 25
5.1.1. Вынесение IOC-контейнера в аспекты. 28
5.2 Анализ и рефакторинг посредством MSRoslyn 31
6. Заключение 37
6.1. Результаты данной работы 37
6.2. Направление дальнейших исследований 37
7. Список литературы 38
8. Приложение 40



Паттерн DI (dependencyinjection) иIoC-контейнеры[6]давно стали неотъемлемой частью любых крупных проектов. Благодаря им можно построить так называемый слабосвязанный код. Inversion of Control – это паттерн, поручающий компоненте управление каким-нибудь объектом. АDependency Injection позволяет автоматически получить из контейнера нужные нам зависимости при инициализации. Ими активно пользуются многие программисты. Представителей данных библиотек на данный момент очень много, в проекте рассмотреныIOC-контейнерыNinject[10], Unity[9], Autofac[12], MEF[11]и другие. Все они постоянно развиваются, пытаясь улучшить существующую модель.
1.2. Задача
Задача состоит в реализации принципа инверсии зависимости[6] с использованием ASPECT.NET[5] и вынесении IOC-контейнеров в аспекты. Помимо методологии ручного вынесения контейнеров требуется автоматизация данной теории посредством технологии MSRoslyn[18].
1.3. Актуальность
Использование слабого связывания паттерна DIдаёт ряд преимуществ, таких как: позднее связывание, расширяемость, параллельная разработка, удобство сопровождения, тестируемость[3], которые ценятся всегда.
Позднее связывание делает программу более гибкой и добавляет возможность заменять один сервис другим[6]. Для многих это является самым преобладающим преимуществом, но не стоит взвешивать все достоинства и недостатки, имея ввиду только его.
Возможность расширить, модифицировать программу также является залогом успешного программного обеспечения. Слабое связывание позволяет эффективно перестраивать приложение и вносить в него новые возможности[3].
Отсутствие сильной связанности позволяет использовать концепцию разделения, делающая возможным разработку параллельными командами[6], которая необходима при достижении проекта определённого размера.
Программу, написанную с использование паттерна DI очень легко сопровождать, потому что здесь используется принцип единственной ответственности (singleresponsibilityprinciple)[6], утверждающий, что каждый класс должен обладать только одной ответственностью. Теперь, зная кто за что отвечает, нам легко будет понять, где вести изменения, кого наказать при неисправности и так далее.
С тестированием все очевиднее. Слабое связывание по определению разрешает модульное тестирование.
И не нужно забывать про ASPECT.NET[5], который очень хорошо подходит для решения нашей задачи, так как IOC-контейнеры, являясь сквозной функциональностью, могут быть там очень удобно реализованы, либо вынесены.
1.4. Обзор данной работы
В следующих разделах рассматривается паттерн DI, в том числе программные продукты, реализующие его, и методы, благодаря которым зависимости внедряются в бизнес-логику проекта. Также будет говориться об IOC-контейнерах – библиотеках, отвечающих за инициализацию паттерна, и рассмотрены и сравнены различные существующие контейнеры различных компаний. В главе 3 рассматривается ASPECT.NET разработка кафедры информатики СПбГУ, с помощью которой и проводится «бесшовная» интеграция IOC и бизнес-логики.
В следующих главах рассматривается продукт под названием MSRoslyn, благодаря которому мы можем получить доступ к синтаксическому дереву и разобраться с семантикой любой бизнес-логики, включающей в себя инициализацию паттерна DI. Благодаря этому появляется возможность анализировать этот код, генерировать новый и позволить ASPECT.NETиспользуя эти данные автоматически распознавать искомую информацию об IOC-контейнерах и выносить её в аспекты.


Возникли сложности?

Нужна помощь преподавателя?

Помощь в написании работ!


В ходе выполнения данной работы были получены перечисленные ниже результаты:
• Изучена предметная область – принцип внедрения зависимостей, IOC-контейнеры и их реализации, MSRoslyn.
• Был произведен анализ контейнеров Unityи Ninject.
• Используя технологию Aspect.NET, IOC-контейнеры были вынесены в аспекты, тем самым целевой код полностью был избавлен от швов, причем результаты сборки не изменились.
• Используя MSRoslyn,была проведена работа по анализу кода и автоматическому поиску IOC-контейнеров в целевой программе



[1] Гамма Э., Хелм Р., Джонсон Р., Влиссидс Д. Приёмы объектно-ориентированного проектирования. Паттерны проектирования. Издательство «Питер». 1994
[2]Зотов М. Реализация надстройки MS VS 2012 для поддержки системы аспектно-ориентированного программирования Aspect.NET. СПИСОК-2014. Материалы Всероссийской научной конференции по проблемам информатики. Санкт-Петербург, 2014.
[3]Ларман К. Применение UMLи шаблонов проектирования. Второе издание. Издательский дом «Вильямс».2004
[4] Cафонов В. О. Аспектно-ориентированное программирование. Издательский дом Санкт-Петербургского государственного университета. 2011
[5] СафоновВ.О. Aspect.NET — a new approach to aspect-oriented programming // .NET Developers Journal. 2003.
[6]Симан М.Внедрение зависимостей в .NET. Издательство «Питер». 2013
[7]Laddad R. AspectJ in action. Practical aspect-oriented programming. Manning, 2003.
[8] Документация Microsoft: https://msdn.microsoft.com/library//Проверено 20.05.2017
[9] Сайт разработчиков Unity:https://msdn.microsoft.com/en-us/library/ff647202.aspx//Проверено 20.05.2017
[10] Сайт разработчиков Ninject:www.ninject.org///Проверено 20.05.2017
[11] Сайт разработчиков MEF:https://msdn.microsoft.com/en-us/magazine/gg650670.aspx//Проверено 20.05.2017
[12] Форум с обсуждениями контейнера Autofac:http://www.codeproject.com/Articles/25380/Dependency-Injection-with-Autofac//Проверено 20.05.2017
[13]Форум, посвященный DI-паттерну: http://www.palmmedia.de/blog/2011/8/30/ioc-container-benchmark-performance-comparison//Проверено 20.05.2017
[14] Форум, посвященный Spring.NET: http://www.springframework.net/doc-latest/reference/html/objects.html//Проверено 20.05.2017
[15] Мурадов М.: Личный блог: http://blog.muradovm.com/2012/01/blog-post.html//Проверено 20.05.2017
[16]Полухович А. Личный блог: http://sonyks2007.blogspot.ru//Проверено 20.05.2017
[17]Тепляков С. Личный блог: http://sergeyteplyakov.blogspot.ru//Проверено 20.05.2017
[18] Karen Ng.,Warren,MS., Peter Golde., Anders Hejlsberg. The Roslyn Project Exposing the C# and VB compiler’s code analysis. Microsoft Corporation. 2012
[19] Тепляков С. A simple analyzer using Roslyn. Личный блог: http://sergeyteplyakov.blogspot.ru//Проверено 20.05.2017


Работу высылаем на протяжении 30 минут после оплаты.




©2025 Cервис помощи студентам в выполнении работ