Programming hints
- S: Single Responsibility Principle (SRP)(Єдина відповідальність)
- O: Open-closed Principle (OCP)(Відкритий до розширення закритий до модифікації)
- L: Liskov substitution Principle (LSP)(Унаслідований клас має мати змогу бути заміною батьківського)
- I: Interface Segregation Principle (ISP)(Розділ інтерфейсів)
- D: Dependency Inversion Principle (DIP)(Принцип інверсії залежностей)
https://www.c-sharpcorner.com/UploadFile/damubetha/solid-principles-in-C-Sharp/
DI (Dependency Injection) - це принцип і патерн проектування, який використовується для зменшення залежностей між компонентами програми і полегшення керування залежностями. DI дозволяє виокремити створення залежностей з компонентів і перекласти це на зовнішній об'єкт, який впроваджує залежність.
Основна ідея DI полягає в тому, що залежності компонента виносяться з його внутрішнього коду і передаються зовнішніми засобами. Зазвичай це відбувається через конструктори класів, параметризовані методи, властивості або контейнери залежностей.
DI може бути реалізований за допомогою різних підходів:
- Конструкторна ін'єкція залежностей (Constructor Injection): Залежності передаються через конструктор класу. Це рекомендований підхід, оскільки він забезпечує чітку залежність між компонентами і полегшує тестування та зміну залежностей.
- Методи ін'єкції залежностей (Method Injection): Залежності передаються через параметризовані методи. Цей підхід використовується, коли залежності можуть бути використані в певних методах, а не в усьому класі.
- Властивості ін'єкції залежностей (Property Injection): Залежності передаються через властивості класу. Цей підхід менш рекомендований, оскільки залежності можуть бути легко пропущені, і немає гарантії їх наявності в момент використання.
DI спрощує створення і тестування компонентів, сприяє полегшенню заміни залежностей і забезпечує більшу гнучкість та перевикористання коду. Він також допомагає відокремлювати логіку бізнес-компонентів від логіки створення і керування залежностями.
public class MyDao { //в оригинале: protected DataSource dataSource = private DataSource dataSource = new DataSourceImpl("driver", "url", "user", "password"); //data access methods... public Person readPerson(int primaryKey) {...} }
Этот DAO (Data Access Object), MyDao нуждается в экземпляре javax.sql.DataSource для того, чтобы получить подключения к базе данных. Подключения к БД используются для чтения и записи в БД, например, объектов Person.
Inversion of Dependency (IoD), також відомий як "Інверсія залежностей", є підпринципом принципу Інверсії керування (IoC) в контексті принципу одержувача (Dependency Inversion Principle - DIP).
IoD вказує на необхідність залежностей вищого рівня, таких як абстракції, не залежати від деталей нижчого рівня, таких як конкретні реалізації. Замість цього, відбувається інверсія залежностей, тобто залежності вищого рівня визначаються і внедрюються ззовні, замість того, щоб бути створеними і керованими нижчим рівнем.
Основна мета IoD - знизити зв'язаність між компонентами програмного забезпечення та зробити їх більш гнучкими та перевикористовуваними. Це досягається шляхом визначення абстракцій, інтерфейсів або абстрактних класів, які представляють залежності вищого рівня, і передачі цих залежностей у компоненти ззовні.
IoD часто реалізується за допомогою DI-контейнерів, які автоматично внедрюють залежності у компоненти на основі їх конфігурації. DI-контейнери дозволяють зручно керувати залежностями великих програмних систем, спрощуючи процес створення, налаштування та управління об'єктами.
Загалом, IoD допомагає покращити модульність, розширюваність та тестованість програмного забезпечення, а також сприяє використанню принципів SOLID та добрим практикам розробки.