July 2, 2023

Programming hints

SOLID Principles:

  • 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 може бути реалізований за допомогою різних підходів:

  1. Конструкторна ін'єкція залежностей (Constructor Injection): Залежності передаються через конструктор класу. Це рекомендований підхід, оскільки він забезпечує чітку залежність між компонентами і полегшує тестування та зміну залежностей.
  2. Методи ін'єкції залежностей (Method Injection): Залежності передаються через параметризовані методи. Цей підхід використовується, коли залежності можуть бути використані в певних методах, а не в усьому класі.
  3. Властивості ін'єкції залежностей (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 та добрим практикам розробки.