SlideShare uma empresa Scribd logo
1 de 26
Dependency Injection на примере Unity и nInject Калита Роман TaskManagementSoft
План Что такое Dependency Injection? Как проблемы решает и какие преимущества дает при проектировании Какие есть формы DI DI контейнеры в .NET
Качественный код/система Код
Некоторые проблемы при проектировании приложений По версии GoF
Сильносвязанные системы
Сильносвязанные системы сложно О каких качествах кода может идти речь?
Уменьшаем связанность
Фабрика, Локатор, Метод Запрашивает IMyInterface Клиент Фабрика, Локатор, Метод Создает MyClass MyClass IMyInterface Реализует IMyInterface
Dependency Injection Обявляет зависимости запрашивает Клиент DI контейнер внедряет создает/возвращает читает MyClass : IMyInterface MyClass : IMyInterface Конфигурация
Что такое Dependency Injection? Инверсия зависимостей == Обращение контроля == Внедрение зависимостей == Dependency injection Это принцип в объектно ориентированом программировании, который означает: ,[object Object]
Абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций.Цель: ,[object Object],[object Object]
Пример связанного приложения publicclassOrderManager { publicvoid ProcessOrders()         { var ordersQueue = newOrdersQueue(); IList<Order> orders = ordersQueue.GetPendingOrders();   if (orders.Count == 0) thrownewEmptyOrdersQueueException();   var ordersProcessor = newManualOrdersProcessor(); foreach (Order order in orders)             {                 ordersProcessor.ProcessOrder(order);             }         } }
Пример связанного приложения publicclassOrderManager     { publicvoid ProcessOrders()         { var ordersQueue = newOrdersQueue(); IList<Order> orders = ordersQueue.GetPendingOrders();   if (orders.Count == 0) thrownewNoOrdersException();   var ordersProcessor = newManualOrdersProcessor(); foreach (Order order in orders)             {                 ordersProcessor.ProcessOrder(order);             }         }     }
Проблемы в примере ,[object Object],[TestClass] publicclassOrderManagerTests     {         [TestMethod] publicvoidshould_process_orders()         { varorderManager = newOrderManager(); orderManager.ProcessOrders();         }     } ,[object Object],[object Object],[object Object]
Применяем используя контейнер publicclassOrderManager {         [Inject] publicIOrdersQueueordersQueue { get; set; }         [Inject] publicIOrdersProcessorordersProcessor { get; set; } publicvoidProcessOrders()         {             IList<Order> orders = ordersQueue.GetPendingOrders(); if (orders.Count == 0) thrownewNoOrdersException(); foreach (Orderorderin orders)             { ordersProcessor.Process(order);             }         } }
Ручное DI vsКонтейнер ,[object Object]
Если вручную, выполнение лишней работы по созданию и наполнению зависимостями
Если используюя контейнер досутпны возможности по «автоматическому» или «условному» наполнению зависимостями, не требующие никаких усилий
Время жизни объектов также должно гибко контролироватся, вручную – «лишняя работа»,[object Object]
Dependecy Injectionконтейнеры ,[object Object],http://structuremap.sourceforge.net/Default.htm ,[object Object],http://www.castleproject.org/container/index.html ,[object Object],http://www.codeplex.com/unity ,[object Object],http://ninject.org ,[object Object],[object Object]
Dependecy Injection используя Unity ,[object Object],varunityContainer = newUnityContainer()                .RegisterType<IOrdersProcessor, ManualOrdersProcessor>()                .RegisterType<IOrdersQueue, OrdersQueue>(); OrdersManager manager = unityContainer.Resolve<OrdersManager>(); manager.ProcessOrders(); ,[object Object],[Dependency] publicIOrdersQueueordersQueue { get; set; }
“Продвинутая” конфигурация ,[object Object],Bind<IOrdersProcessor>().To<ManualOrdersProcessor>().WhenTargetHas<MyAttribute>(); Bind<IOrdersProcessor>().To<ManualOrdersProcessor>() .Only(When.Context.Target.Name.BeginsWith("Manual"));      var container = newUnityContainer() .RegisterType<IOrdersQueue, OrdersQueue>() .RegisterType<IOrdersProcessor, ManualOrdersProcessor>(newInjectionConstructor(10));  ,[object Object],Bind<IOrdersProcessor>().To<ManualOrdersProcessor>().InSingletonScope(); Bind<IOrdersProcessor>().To<ManualOrdersProcessor>().InThreadScope(); var container = newUnityContainer()  .RegisterType<IOrdersProcessor, ManualOrdersProcessor>(newContainerControlledLifetimeManager())
Преимущества от использования Dependecy Injection ,[object Object]
Уменьшается связываниеАбстрактные интерфейсы не меняются Конкретные объекты реализуют эти интерфейсы Конкретные объекты проще заменить ,[object Object]
Улучшение изоляции объектовУменьшается связность Увеличивается тестируемость Увеличивается удобство в поддержке
Ссылки ,[object Object]

Mais conteúdo relacionado

Mais procurados

Java весна 2013 лекция 9
Java весна 2013 лекция 9Java весна 2013 лекция 9
Java весна 2013 лекция 9
Technopark
 
Виктор Брыкcин — Как всё починить и ничего не сломать: работа со сложным кодо...
Виктор Брыкcин — Как всё починить и ничего не сломать: работа со сложным кодо...Виктор Брыкcин — Как всё починить и ничего не сломать: работа со сложным кодо...
Виктор Брыкcин — Как всё починить и ничего не сломать: работа со сложным кодо...
CocoaHeads
 
Глава 2: Среда разработки NetBeans
Глава 2: Среда разработки NetBeansГлава 2: Среда разработки NetBeans
Глава 2: Среда разработки NetBeans
metaform
 
Mikhail Valkov_Antipatterns
Mikhail Valkov_AntipatternsMikhail Valkov_Antipatterns
Mikhail Valkov_Antipatterns
Ciklum
 
Использование Mock объектов в модульном тестировании
Использование Mock объектов в модульном тестированииИспользование Mock объектов в модульном тестировании
Использование Mock объектов в модульном тестировании
GetDev.NET
 
Java осень 2012 лекция 9
Java осень 2012 лекция 9Java осень 2012 лекция 9
Java осень 2012 лекция 9
Technopark
 

Mais procurados (20)

Java весна 2013 лекция 9
Java весна 2013 лекция 9Java весна 2013 лекция 9
Java весна 2013 лекция 9
 
Модульная структура
Модульная структураМодульная структура
Модульная структура
 
Виктор Брыкcин — Как всё починить и ничего не сломать: работа со сложным кодо...
Виктор Брыкcин — Как всё починить и ничего не сломать: работа со сложным кодо...Виктор Брыкcин — Как всё починить и ничего не сломать: работа со сложным кодо...
Виктор Брыкcин — Как всё починить и ничего не сломать: работа со сложным кодо...
 
Разработка WPF приложений в стиле ViewModel First
Разработка WPF приложений в стиле ViewModel FirstРазработка WPF приложений в стиле ViewModel First
Разработка WPF приложений в стиле ViewModel First
 
Создание графического интерфейса пользователя мобильных Android приложений (ч...
Создание графического интерфейса пользователя мобильных Android приложений (ч...Создание графического интерфейса пользователя мобильных Android приложений (ч...
Создание графического интерфейса пользователя мобильных Android приложений (ч...
 
Moxy – реализация MVP под Android. С щепоткой магии
Moxy – реализация MVP под Android. С щепоткой магииMoxy – реализация MVP под Android. С щепоткой магии
Moxy – реализация MVP под Android. С щепоткой магии
 
Unit tests final
Unit tests finalUnit tests final
Unit tests final
 
Глава 2: Среда разработки NetBeans
Глава 2: Среда разработки NetBeansГлава 2: Среда разработки NetBeans
Глава 2: Среда разработки NetBeans
 
Как приручить реактивное программирование в XAML приложениях
Как приручить реактивное программирование в XAML приложенияхКак приручить реактивное программирование в XAML приложениях
Как приручить реактивное программирование в XAML приложениях
 
Mikhail Valkov_Antipatterns
Mikhail Valkov_AntipatternsMikhail Valkov_Antipatterns
Mikhail Valkov_Antipatterns
 
Как приручить реактивное программирование
Как приручить реактивное программированиеКак приручить реактивное программирование
Как приручить реактивное программирование
 
JRebel
JRebelJRebel
JRebel
 
Rambler.iOS #3: Test-Driven Development в iOS
Rambler.iOS #3: Test-Driven Development в iOSRambler.iOS #3: Test-Driven Development в iOS
Rambler.iOS #3: Test-Driven Development в iOS
 
Объять необъятное, или как использовать несколько MVVM фреймворков в одном XA...
Объять необъятное, или как использовать несколько MVVM фреймворков в одном XA...Объять необъятное, или как использовать несколько MVVM фреймворков в одном XA...
Объять необъятное, или как использовать несколько MVVM фреймворков в одном XA...
 
Лекция Android. БД SQLite, ContentProvider, Loader
Лекция Android. БД SQLite, ContentProvider, LoaderЛекция Android. БД SQLite, ContentProvider, Loader
Лекция Android. БД SQLite, ContentProvider, Loader
 
MVVM в WinForms – DevExpress Way (теория и практика)
MVVM в WinForms – DevExpress Way (теория и практика)MVVM в WinForms – DevExpress Way (теория и практика)
MVVM в WinForms – DevExpress Way (теория и практика)
 
Unit тесты java
Unit тесты javaUnit тесты java
Unit тесты java
 
Евгений Сафронов "Тестирование. точка зрения разработчика"
Евгений Сафронов "Тестирование. точка зрения разработчика"Евгений Сафронов "Тестирование. точка зрения разработчика"
Евгений Сафронов "Тестирование. точка зрения разработчика"
 
Использование Mock объектов в модульном тестировании
Использование Mock объектов в модульном тестированииИспользование Mock объектов в модульном тестировании
Использование Mock объектов в модульном тестировании
 
Java осень 2012 лекция 9
Java осень 2012 лекция 9Java осень 2012 лекция 9
Java осень 2012 лекция 9
 

Semelhante a Dependency Injection на примере Unity и NInject

Паттерны быстрой разработки WPF MVVM бизнес-приложений
Паттерны быстрой разработки WPF MVVM бизнес-приложенийПаттерны быстрой разработки WPF MVVM бизнес-приложений
Паттерны быстрой разработки WPF MVVM бизнес-приложений
GoSharp
 
Референсная архитектура приложения на ASP.NET MVC
Референсная архитектура приложения на ASP.NET MVCРеференсная архитектура приложения на ASP.NET MVC
Референсная архитектура приложения на ASP.NET MVC
Andrew Mayorov
 
Code Contracts ABC 16.04.2011
Code Contracts ABC 16.04.2011Code Contracts ABC 16.04.2011
Code Contracts ABC 16.04.2011
Dmytro Mindra
 
Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012
Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012
Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012
Dmytro Mindra
 

Semelhante a Dependency Injection на примере Unity и NInject (20)

Dependency injection
Dependency injectionDependency injection
Dependency injection
 
MWWM
MWWMMWWM
MWWM
 
АРК-ПЗ-1.pptx
АРК-ПЗ-1.pptxАРК-ПЗ-1.pptx
АРК-ПЗ-1.pptx
 
Unit testing iOS Applications
Unit testing iOS ApplicationsUnit testing iOS Applications
Unit testing iOS Applications
 
Как навести порядок в коде вашего web-приложения, Андрей Чебукин
Как навести порядок в коде вашего web-приложения, Андрей Чебукин Как навести порядок в коде вашего web-приложения, Андрей Чебукин
Как навести порядок в коде вашего web-приложения, Андрей Чебукин
 
Диагностика проблем в рабочей среде при помощи IntelliTrace и Visual Studio 2...
Диагностика проблем в рабочей среде при помощи IntelliTrace и Visual Studio 2...Диагностика проблем в рабочей среде при помощи IntelliTrace и Visual Studio 2...
Диагностика проблем в рабочей среде при помощи IntelliTrace и Visual Studio 2...
 
RoboGuice
RoboGuiceRoboGuice
RoboGuice
 
Шаблоны проектирования в Magento
Шаблоны проектирования в MagentoШаблоны проектирования в Magento
Шаблоны проектирования в Magento
 
Илья Ефимов «IoC/DI на примере Autofac»
Илья Ефимов «IoC/DI на примере Autofac»Илья Ефимов «IoC/DI на примере Autofac»
Илья Ефимов «IoC/DI на примере Autofac»
 
Илья Ефимов «IoC/DI на примере Autofac»
Илья Ефимов «IoC/DI на примере Autofac»Илья Ефимов «IoC/DI на примере Autofac»
Илья Ефимов «IoC/DI на примере Autofac»
 
Чуть сложнее чем Singleton: аннотации, IOC, АОП
Чуть сложнее чем Singleton: аннотации, IOC, АОПЧуть сложнее чем Singleton: аннотации, IOC, АОП
Чуть сложнее чем Singleton: аннотации, IOC, АОП
 
Паттерны быстрой разработки WPF MVVM бизнес-приложений
Паттерны быстрой разработки WPF MVVM бизнес-приложенийПаттерны быстрой разработки WPF MVVM бизнес-приложений
Паттерны быстрой разработки WPF MVVM бизнес-приложений
 
Модульная структура. Цветцих Денис D2D Just.NET
Модульная структура. Цветцих Денис D2D Just.NETМодульная структура. Цветцих Денис D2D Just.NET
Модульная структура. Цветцих Денис D2D Just.NET
 
Контейнер сервисов
Контейнер сервисовКонтейнер сервисов
Контейнер сервисов
 
Что нового в Visual Studio 2010 и .Net 4.0
Что нового в Visual Studio 2010 и .Net 4.0Что нового в Visual Studio 2010 и .Net 4.0
Что нового в Visual Studio 2010 и .Net 4.0
 
Референсная архитектура приложения на ASP.NET MVC
Референсная архитектура приложения на ASP.NET MVCРеференсная архитектура приложения на ASP.NET MVC
Референсная архитектура приложения на ASP.NET MVC
 
Code Contracts ABC 16.04.2011
Code Contracts ABC 16.04.2011Code Contracts ABC 16.04.2011
Code Contracts ABC 16.04.2011
 
Проблемы точечной застройки в больших городах или зачем нужен Dagger
Проблемы точечной застройки в больших городах или зачем нужен DaggerПроблемы точечной застройки в больших городах или зачем нужен Dagger
Проблемы точечной застройки в больших городах или зачем нужен Dagger
 
Deep Dive in Magento DI
Deep Dive in Magento DIDeep Dive in Magento DI
Deep Dive in Magento DI
 
Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012
Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012
Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012
 

Mais de akrakovetsky

qiss.IM - wp7rocks.com
qiss.IM - wp7rocks.comqiss.IM - wp7rocks.com
qiss.IM - wp7rocks.com
akrakovetsky
 

Mais de akrakovetsky (16)

Alco calculator
Alco calculatorAlco calculator
Alco calculator
 
qiss.IM - wp7rocks.com
qiss.IM - wp7rocks.comqiss.IM - wp7rocks.com
qiss.IM - wp7rocks.com
 
Семантический HTML5 - iForum
Семантический HTML5 - iForumСемантический HTML5 - iForum
Семантический HTML5 - iForum
 
jQuery для ASP.NET разработчиков
jQuery для ASP.NET разработчиковjQuery для ASP.NET разработчиков
jQuery для ASP.NET разработчиков
 
Функциональное программирование на F#
Функциональное программирование на F#Функциональное программирование на F#
Функциональное программирование на F#
 
Переходим на Windows 7 и Windows 2008 R2
Переходим на Windows 7 и Windows 2008 R2Переходим на Windows 7 и Windows 2008 R2
Переходим на Windows 7 и Windows 2008 R2
 
Разработка и раскрутка iPhone приложений "с нуля"
Разработка и раскрутка iPhone приложений "с нуля"Разработка и раскрутка iPhone приложений "с нуля"
Разработка и раскрутка iPhone приложений "с нуля"
 
Основи розробки ігор на платформі XNA
Основи розробки ігор на платформі XNAОснови розробки ігор на платформі XNA
Основи розробки ігор на платформі XNA
 
Html5
Html5Html5
Html5
 
Введение в Microsoft Silverlight 3.0
Введение в Microsoft Silverlight 3.0Введение в Microsoft Silverlight 3.0
Введение в Microsoft Silverlight 3.0
 
ASP.NET 4.0 Cache Extensibility
ASP.NET 4.0 Cache ExtensibilityASP.NET 4.0 Cache Extensibility
ASP.NET 4.0 Cache Extensibility
 
Microsoft .NET User Group Вінниця #4
Microsoft .NET User Group Вінниця #4Microsoft .NET User Group Вінниця #4
Microsoft .NET User Group Вінниця #4
 
What's new in Visual Studio 2010.
What's new in Visual Studio 2010.What's new in Visual Studio 2010.
What's new in Visual Studio 2010.
 
Что нового в ASP.NET 4
Что нового в ASP.NET 4Что нового в ASP.NET 4
Что нового в ASP.NET 4
 
Введение в Windows Communication Foundation
Введение в Windows Communication FoundationВведение в Windows Communication Foundation
Введение в Windows Communication Foundation
 
Microsoft User Group Vinnitsya
Microsoft User Group VinnitsyaMicrosoft User Group Vinnitsya
Microsoft User Group Vinnitsya
 

Último

Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Ирония безопасности
 
CVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdfCVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdf
Хроники кибер-безопасника
 
2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf
Хроники кибер-безопасника
 
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdfСИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
Хроники кибер-безопасника
 
Cyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdfCyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdf
Хроники кибер-безопасника
 
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
Ирония безопасности
 

Último (9)

Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
 
MS Navigating Incident Response [RU].pdf
MS Navigating Incident Response [RU].pdfMS Navigating Incident Response [RU].pdf
MS Navigating Incident Response [RU].pdf
 
CVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdfCVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdf
 
2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf
 
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdfСИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
 
Cyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdfCyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdf
 
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
 
Ransomware_Q3 2023. The report [RU].pdf
Ransomware_Q3 2023.  The report [RU].pdfRansomware_Q3 2023.  The report [RU].pdf
Ransomware_Q3 2023. The report [RU].pdf
 
Malware. DCRAT (DARK CRYSTAL RAT) [RU].pdf
Malware. DCRAT (DARK CRYSTAL RAT) [RU].pdfMalware. DCRAT (DARK CRYSTAL RAT) [RU].pdf
Malware. DCRAT (DARK CRYSTAL RAT) [RU].pdf
 

Dependency Injection на примере Unity и NInject

Notas do Editor

  1. В процессе разработки и проектирования приложения мы стремимся чтобы код и само приложение в целом соответствовали определенному набору критериев, которые в нашем понимании являются критериями качественного кода, критериями хорошо спроектированой системы. Эти критерии известны и сформировались с опытом. Это расширяемость, сопровождаемость, простота, читабельность и тестируемость.В процессе проектирования/перепроектирования/рефакторинга мы сталкиваемся с проблемами которые …
  2. В процессе разработки код программы постоянно меняется. Вот некоторые проблемы с которыми сталкиваются разработчики при изменении/перепроектировании систем.При создании объекта явно указывается класс. Задание имени класса при создании объекта привязывает к конкретной реализации, что усложняет изменение объекта в будущем. Т.е. поддерживать такой объект будет намного сложнее, а связанность объектов повышается.При сильной связанности внутри программы код становится более хрупким. Внесение изменений затруднено, так как изменения приходится вносить в Внесение изменений в одном месте кода ведет к изменениям в другом, в следствии чего число багов увеличивается
  3. This is another option for an Overview slides using transitions.
  4. В процессе разработки код программы постоянно меняется. Вот некоторые проблемы с которыми сталкиваются разработчики при изменении/перепроектировании систем.При создании объекта явно указывается класс. Задание имени класса при создании объекта привязывает к конкретной реализации, что усложняет изменение объекта в будущем. Т.е. поддерживать такой объект будет намного сложнее, а связанность объектов повышается.При сильной связанности внутри программы код становится более хрупким. Внесение изменений затруднено, так как изменения приходится вносить в Внесение изменений в одном месте кода ведет к изменениям в другом, в следствии чего число багов увеличивается
  5. В процессе разработки код программы постоянно меняется. Вот некоторые проблемы с которыми сталкиваются разработчики при изменении/перепроектировании систем.При создании объекта явно указывается класс. Задание имени класса при создании объекта привязывает к конкретной реализации, что усложняет изменение объекта в будущем. Т.е. поддерживать такой объект будет намного сложнее, а связанность объектов повышается.При сильной связанности внутри программы код становится более хрупким. Внесение изменений затруднено, так как изменения приходится вносить в Внесение изменений в одном месте кода ведет к изменениям в другом, в следствии чего число багов увеличивается