Colocar tanto la interfaz como la implementación es un lugar común y no parece ser un problema.
Tomemos, por ejemplo, la API de Java: la mayoría de las clases tienen ambas interfaces y sus implementaciones incluidas en el mismo paquete.
Tomemos, por ejemplo, el java.util
paquete:
Contiene los interfaces como Set
, Map
, List
, mientras que también tiene las implementaciones tales como HashSet
, HashMap
y ArrayList
.
Además, los Javadocs están diseñados para funcionar bien en esas condiciones, ya que separa la documentación en las vistas Interfaces y Clases al mostrar el contenido del paquete.
Tener paquetes solo para interfaces puede ser un poco excesivo, a menos que haya una gran cantidad de interfaces. Pero separar las interfaces en sus propios paquetes por el simple hecho de hacerlo parece una mala práctica.
Si es necesario diferenciar el nombre de una interfaz de una implementación, se podría tener una convención de nomenclatura para facilitar la identificación de las interfaces:
Prefije el nombre de la interfaz con un I
. Este enfoque se toma con las interfaces en el marco .NET. Sería bastante fácil decir que IList
es una interfaz para una lista.
Utilice el able
sufijo - . Este enfoque se ve a menudo en la API de Java, como por ejemplo Comparable
, Iterable
y Serializable
para nombrar unos pocos.