Я підозрюю, що тут допустив помилку школяра, і шукаю роз'яснення. Багато класів у моєму рішенні (C #) - наважуся сказати, що більшість - я закінчив написати відповідний інтерфейс для. Наприклад, інтерфейс "ICalculator" та клас "Калькулятор", який реалізує його, хоча я ніколи не зможу замінити цей калькулятор іншою реалізацією. Крім того, більшість з цих класів проживають у тому ж проекті, що і їх залежність - вони насправді лише повинні бути internal
, але в кінцевому підсумку є public
побічним ефектом від реалізації відповідних інтерфейсів.
Я думаю, що така практика створення інтерфейсів для всього випливала з кількох хибностей: -
1) Спочатку я вважав, що потрібен інтерфейс для створення тестових макетів одиниці (я використовую Moq), але я з того часу виявив, що над класом можна глузувати, якщо є його члени virtual
, і він має конструктор без параметрів (виправте мене, якщо Я помиляюся).
2) Спочатку я вважав, що для реєстрації класу в системі IoC (Castle Windsor) потрібен інтерфейс, наприклад
Container.Register(Component.For<ICalculator>().ImplementedBy<Calculator>()...
коли насправді я міг просто зареєструвати конкретний тип проти себе:
Container.Register(Component.For<Calculator>().ImplementedBy<Calculator>()...
3) Використання інтерфейсів, наприклад параметрів конструктора для впорскування залежностей, призводить до "нещільного зв'язку".
Так я з’їхав з розуму від інтерфейсів ?! Мені відомо про сценарії, в яких ви "зазвичай" використовуєте інтерфейс, наприклад, відкриття загальнодоступного API, або такі речі, як "підключається" функціональність. У моєму рішенні є невелика кількість класів, які відповідають таким випадкам використання, але мені цікаво, чи не потрібні всі інші інтерфейси і їх слід видалити? Що стосується пункту 3) вище, чи не буду я порушувати "нещільне з'єднання", якби це зробити?
Редагувати : - Я просто граю з Moq, і, здається, потрібні методи бути публічними та віртуальними та мати публічний конструктор без параметрів, щоб мати можливість знущатися над ними. Так виглядає, що тоді я не можу мати внутрішніх занять?