Я роздумував, як збалансувати тестовий дизайн, використовуючи ін'єкцію залежностей, надаючи простий фіксований публічний API. Моя дилема полягає в тому, що люди хотіли б зробити щось на кшталт var server = new Server(){ ... }
і не повинні турбуватися про створення багатьох залежностей та графіка залежностей, які Server(,,,,,,)
можуть мати. Під час розробки я не надто хвилююся, оскільки використовую рамки IoC / DI для вирішення всього цього (я не використовую аспекти управління життєвим циклом жодного контейнера, що ще більше ускладнить справи).
Тепер залежності навряд чи будуть повторно реалізовані. Компонентизація в цьому випадку майже суто для перевірки (і пристойного дизайну!), А не для створення швів для розширення тощо. Люди 99,999% часу бажають використовувати конфігурацію за замовчуванням. Так. Я міг би жорстко кодувати залежності. Не хочемо цього робити, ми втрачаємо тестування! Я міг би забезпечити конструктор за замовчуванням із твердо кодованими залежностями і той, який приймає залежності. Це ... безладний, і, ймовірно, заплутаний, але життєздатний. Я міг зробити конструктор, який приймає залежність, внутрішнім і зробити так, щоб мій блок тестував дружнє збірка (припускаючи C #), яка опрацьовує публічний API, але залишає неприємну приховану пастку, яка ховається для обслуговування. В моїй книзі взагалі два конструктори, які пов'язані між собою, а не явно, буде поганим дизайном.
На даний момент це про найменше зло, про яке я можу придумати. Думки? Мудрість?