Размещение и интерфейса, и реализации - обычное дело и не кажется проблемой.
Возьмем, к примеру, Java API - у большинства классов оба интерфейса и их реализации включены в один пакет.
Возьмем, к примеру, java.util
пакет:
Он содержит интерфейсы , такие как Set
, Map
, List
, в то же время имея реализаций , таких как HashSet
, HashMap
и ArrayList
.
Кроме того, документация Javadocs разработана для хорошей работы в этих условиях, поскольку при отображении содержимого пакета документация разделяется на представления интерфейсов и классов .
Наличие пакетов только для интерфейсов может быть немного излишним, если только интерфейсов не огромное количество. Но разделение интерфейсов на их собственные пакеты только ради этого звучит как плохая практика.
Если необходимо отличать имя интерфейса от имени реализации, можно использовать соглашение об именах, чтобы упростить идентификацию интерфейсов:
Добавьте к имени интерфейса префикс I
. Этот подход используется с интерфейсами в .NET framework. Было бы довольно легко сказать, что IList
это интерфейс для списка.
Используйте able
суффикс - . Такой подход часто рассматривается в API Java, например Comparable
, Iterable
и Serializable
некоторые из них.