У каждого из 180 классов проекта есть интерфейс с единственной реализацией
Правило команды: каждый класс получает интерфейс — IOrderMapper, IPriceFormatter, IDateHelper. Навигация по коду превратилась в прыжки между интерфейсом и реализацией, а половина интерфейсов никогда не подменялась.
Когда интерфейс действительно оправдан?
- На границах: внешние системы, несколько реализаций, подмена в тестах
- Всегда: без интерфейса класс нельзя внедрить через DI
- Никогда: интерфейсы в C# устарели
- Только для классов длиннее 300 строк
