В настоящее время я разрабатываю API на основе компонентов, который сильно зависит от состояния. Компоненты верхнего уровня реализуют около дюжины интерфейсов каждый.
Таким образом, стандартные компоненты верхнего уровня находятся поверх стека абстрактных реализаций, которые, в свою очередь, содержат несколько реализаций миксинов и реализуют несколько интерфейсов миксинов.
Пока все хорошо (надеюсь).
Проблема в том, что базовая функциональность чрезвычайно сложна для реализации (тысячи строк в 5 слоях базовых классов), и поэтому я не хочу, чтобы разработчики компонентов сами реализовывали интерфейсы, а скорее расширяли мои базовые классы (где все котельные код таблички уже написан).
Поэтому, если API принимает интерфейсы, а не ссылки на абстрактную реализацию, которую я хочу, чтобы разработчики компонентов расширяли, то у меня есть риск, что разработчик не выполнит проверку, которая требуется и предполагается другими областями кода.
Поэтому мой вопрос: допустимо ли иногда параметризовать методы API, используя ссылку на абстрактную реализацию, а не ссылку на интерфейс (ы), который он реализует?
У вас есть пример хорошо разработанного API, использующего эту технику, или я пытаюсь уговорить себя на плохую практику?