-
Notifications
You must be signed in to change notification settings - Fork 232
Description
Вы пишете:
Если нет прямой необходимости использовать интерфейсы в проекте, то использование классов в механизме внедрения зависимостей вполне нормальная практика.
Согласен на 200%. Если используется всего одна реализация класса, то интерфейс ему не нужен. Но дальше Вы вполне аргументированно пишете
Чтобы избежать подобных осложнений, я в своих проектах все неабстрактные классы помечаю как final, запрещая наследование от них. Шаблон для создания нового класса в моей среде разработки содержит ключевые слова 'final class' вместо просто 'class'.
Вы очень логично обосновали подход с использованием final-классов, действительно, это хороший способ защититься от нежелательного наследования. Однако, возможно, стоит упомянуть, что такой подход имеет и свои ограничения. В частности, финальные классы нельзя мокировать. Т.е. в целях тестирования либо придётся писать интерфейс, либо убирать final.