Convenciones de nomenclatura de la interfaz Java [cerrado]
Trabajo en una aplicación web de Java que usa Spring para la inyección de dependencias y JMock para burlarnos de estas dependencias en nuestras pruebas unitarias.
Actualmente, nuestro equipo está en un punto en el que tenemos algunas opiniones diferentes en cuanto a cómo nombrar ciertas interfaces que usamos. No tenemos problemas para nombrar las interfaces en nuestro dominio que tienen implementaciones múltiples, eso es simple. Sin embargo, cuando se trata de interfaces para las cuales solo tenemos una implementación y tenemos la intención de tener solo una implementación en el futuro, hemos encontrado un obstáculo.
La razón por la que tenemos tales interfaces es meramente para simularse, por ejemplo, tenemos servicios y repositorios que simulamos en nuestras pruebas unitarias y estos servicios se llamarán "DocumentMappingService" o para los repositorios "EmployeeRepository". En este momento, algunos de los chicos simplemente prefijan el nombre de la interfaz asociada con una "I", es decir, "IDocumentMappingService" y "IEmployeeRepository". Otros nombran la interfaz como lo he hecho anteriormente y luego agregan un "Impl" después del nombre de la interfaz para la clase de implementación.
La tercera "facción" siente que ambas opciones son pobres. Mirar la literatura como el conocido "software orientado a objetos en crecimiento, guiado por pruebas" llevaría a creer que ambas opciones mencionadas anteriormente son deficientes y que el nombre de la interfaz debe definir claramente el contrato y el nombre de la clase implementadora debe especificar claramente cómo se ha implementado ese contrato. Hemos encontrado esto bastante difícil de hacer en el caso que he mencionado anteriormente, sin embargo.
Esperaba que alguien haya tenido un problema similar antes y tenga algunas sugerencias sobre qué opción es la mejor y por qué. Además, si cree que las opciones "I" e "Impl" son malas, sugiera una convención alternativa específica.