Невозможно предсказать будущее и понять, нужно ли вам программировать на интерфейс в будущем. Но если позже вы решите заставить все использовать интерфейс и, скажем, фабрику для создания экземпляров неизвестных типов (любого типа, реализующего интерфейс), то быстрее ограничить всех программированием с интерфейсом и фабрикой заранее. чем заменить ссылки на MyImpl ссылками на IMyInterface позже и т. д.
Таким образом, при написании нового программного обеспечения необходимо принять решение о том, следует ли программировать с использованием интерфейса или реализации, если вы не знакомы с тем, что может случиться с таким программным обеспечением на основе предыдущего опыта.
Я обычно держу это "в движении" какое-то время, независимо от того, есть ли у меня интерфейс, базовый класс или и то, и другое, и даже если базовый класс является абстрактным (обычно это так). Я буду работать над проектом (обычно это решение Visual Studio, содержащее от 3 до 10 проектов) некоторое время (возможно, пару дней), прежде чем я проведу рефакторинг и / или запросу второго мнения. Как только окончательное решение будет принято, а код реорганизован и протестирован, я сообщаю коллегам-разработчикам, что он готов к использованию.