Я не согласен с предыдущими комментариями ... Хотя, в сочетании с такими шаблонами, как Inversion of Control (IoC) и Dependency Injection, это значительно облегчает изоляцию таких слоев друг от друга. Это упрощает модульное тестирование, макетирование, а также может привести к более слабосвязанным архитектурам. Это по-прежнему может быть достигнуто без интерфейсов, хотя вам нужно убедиться, что вы не закрываете свои классы и не делаете членов виртуальными, чтобы потом можно было все же имитировать, генерировать перехватываемые прокси и т. Д. Наконец, использование интерфейсов вынуждает вас отбрасывать предположения, связанные с любым одна конкретная реализация и вместо этого сосредоточиться на контракте, представленном определением интерфейса.