Я согласен, что программирование против интерфейсов является хорошей практикой. В большинстве случаев в "интерфейсе" Java в этом смысле означает интерфейс построения языка, так что вы пишете интерфейс и класс реализации, а чаще всего используете интерфейс вместо класса реализации.
Интересно, является ли это хорошей практикой для написания моделей домена. Так, например, если у вас есть клиент домена класса, и у каждого клиента может быть список ордеров, вы бы обычно писали интерфейсы ICustomer и IOrder. А также у Клиента есть список IOrders вместо Заказов? Или вы бы использовали интерфейсы в модели домена, только если он действительно управляется доменом, например. у вас есть как минимум два разных типа ордеров? Другими словами, используете ли вы интерфейсы только из-за технических потребностей в модели домена или только тогда, когда это действительно подходит для фактического домена?