Я привык при программировании «вслушиваться» в код, анализируя его с точки зрения понятности и логичности. Хороший код в моем понимании как складный рассказ. Поэтому многие вещи я делают интуитивно.
Недавно пришлось спорить с одним товарищем на тему интерфейсов. Я как бы понимаю интуитивно, но аргументировано отстоять свою позицию не получается.
Суть спора в следующем: товарищ сторонник того, что бы на каждый класс клепать интерфейс. Я в общем-то интуитивно понимаю, что это действие когда-то имеет смысл, а когда-то нет. Проблема в том, что когда какой-то код не имеет смысла, то он как бы незаконно занимает место и только напрасно засоряет проект. Поэтому все же стоит различать когда надо, а когда нет и не делать «на всякий случай».
Попытался для себя составить список когда интерфейс нужен:
1. Есть несколько реализаций. Самый очевидный случай.
2. Реализация одна, но как бы подразумевается, что может быть несколько.
Есть еще такая штука: сегодня реализация одна, а завтра станет несколько. Но я считаю, что это не повод засорять код, рефакторинг «выделение интерфейса» - очень простой.
Больше не придумал. С моей точки зрения во всех остальных случаях класс вполне способен жить сам по себе.