Тема: Аспектно-ориентированная реализация принципа инверсии зависимости при разработке программного обеспечения
Закажите новую по вашим требованиям
Представленный материал является образцом учебного исследования, примером структуры и содержания учебного исследования по заявленной теме. Размещён исключительно в информационных и ознакомительных целях.
Workspay.ru оказывает информационные услуги по сбору, обработке и структурированию материалов в соответствии с требованиями заказчика.
Размещение материала не означает публикацию произведения впервые и не предполагает передачу исключительных авторских прав третьим лицам.
Материал не предназначен для дословной сдачи в образовательные организации и требует самостоятельной переработки с соблюдением законодательства Российской Федерации об авторском праве и принципов академической добросовестности.
Авторские права на исходные материалы принадлежат их законным правообладателям. В случае возникновения вопросов, связанных с размещённым материалом, просим направить обращение через форму обратной связи.
📋 Содержание
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
📖 Введение
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-контейнеров в целевой программе



