Українська
Підсумки
Висновки
Якісне проєктування прагне високої зв’язності класів і слабкого зчеплення між ними. Принципи SOLID конкретизують цю мету: клас має одну відповідальність, розширюється без змін, похідні класи коректно замінюють базові, інтерфейси вузькі, а залежності спрямовані на абстракції. Впровадження залежностей через конструктор із композиційним коренем реалізує DIP; DI-контейнер автоматизує створення об’єктів у великих застосунках. Шаблони проєктування є перевіреними рішеннями типових задач: породжувальні керують створенням об’єктів, структурні – компонуванням, поведінкові – взаємодією. У .NET багато шаблонів вбудовано в мову й бібліотеку, наприклад «Спостерігач» у події, «Ітератор» у foreach. Шаблони застосовують для розв’язання реальних проблем, уникаючи зайвої складності.
Питання для самоперевірки
- Що таке зв’язність і зчеплення? Якими вони мають бути?
- Що означають принципи DRY, KISS, YAGNI?
- Сформулюйте принцип єдиної відповідальності. Наведіть приклад порушення.
- Як принцип відкритості/закритості пов’язаний з поліморфізмом?
- Чому квадрат, успадкований від прямокутника, порушує принцип Лісков?
- Що таке «товстий» інтерфейс? Як його виправити?
- Що таке інверсія залежностей? Як її реалізує впровадження через конструктор?
- Що таке композиційний корінь і DI-контейнер?
- На які групи поділяють шаблони проєктування GoF?
- Для чого призначені «Фабричний метод» і «Будівельник»?
- Які недоліки має шаблон «Одинак»?
- Чим «Адаптер» відрізняється від «Декоратора»?
- Чим «Стратегія» відрізняється від «Стану»?
- Як шаблон «Спостерігач» реалізовано в .NET?
- Які переваги дає шаблон «Команда»?
- Що таке антишаблони? Наведіть приклади.
Корисні посилання
- Архітектурні принципи: https://learn.microsoft.com/dotnet/architecture/modern-web-apps-azure/architectural-principles
- Впровадження залежностей у .NET: https://learn.microsoft.com/dotnet/core/extensions/dependency-injection
- Шаблон «Спостерігач»: https://learn.microsoft.com/dotnet/standard/events/observer-design-pattern
- Настанови проєктування .NET: https://learn.microsoft.com/dotnet/standard/design-guidelines/
Lazy<T>: https://learn.microsoft.com/dotnet/api/system.lazy-1