¿Deberían las interfaces en Java residir en su propio directorio? ¿O deberían colocarse tanto la interfaz como su implementación en el mismo directorio (paquete)? Gracias.Estructura de directorio de interfaces Java?
Respuesta
Las interfaces no necesitan específicamente su propio directorio. Deben colocarse donde tenga sentido, al igual que las clases deben colocarse donde tengan sentido. En muchos casos, puede tener sentido colocarlos en el mismo lugar.
Mismo paquete. El usuario no debe saber ni preocuparse de que estén usando una interfaz
Sí. El uso del prefijo 'I' es nuts. –
El usuario necesita saber si tienen que crear instancias de estas clases. – Powerlord
"Mismo paquete" no responde la pregunta. Es muy común tener una prueba unitaria en el mismo paquete que la clase que está probando, pero tenerla en un directorio completamente diferente. – SyntaxT3rr0r
Un patrón que he visto es poner las interfaces en un directorio base, luego colocar las implementaciones en un subdirectorio desde allí.
Por ejemplo, las interfaces pueden ir aquí:
com.myproject.data.dao.CustomerDao (some people do ICustomerDao for interfaces, but some don't like that.)
com.myproject.data.dao.ProductDao
Y las implementaciones podrían ir aquí:
com.myproject.data.dao.hibernate.HibernateCustomerDao
com.myproject.data.dao.hibernate.HibernateProductDao
com.myproject.data.dao.someotherorm.SomeOtherOrmCustomerDao
etc.
Esto podría funcionar en algunas situaciones, y puede que no en otros, pero sólo algo para pensar en.
gracias por esta perspectiva – ken
Terminé tomando este enfoque para un proyecto. Me di cuenta de que realmente no quiero que los usuarios tengan acceso a otra cosa que no sea la interfaz. Según entiendo, esto no es posible si las clases están separadas en sus propios paquetes (el nivel de acceso debe ser público). Prefiero el enfoque que has dado, pero para el caso que he dado no funciona bien. – abrarisme
No es necesario colocar la interfaz en el mismo directorio (paquete). Si su interfaz tiene acceso público, puede importarla en cualquier lugar, en cualquier paquete.
La pregunta mientras la leo (pero luego está extrañamente formulada) no es si la interfaz debe estar en su propio directorio o no. La pregunta es si debe volver a crear su completa estructura de directorios (negrita para enfatizar lo que es en el título de la pregunta), donde una rama contendría sólo las interfaces, así:
pureooabstraction/
|
|_com/
|
|_example/
|
|__SomeInterface.java
|__SomeOtherInterface.java
src/
|
|_com/
|
|_example/
|
|__SomeClass.java
|__...
Cuando el/ directorio pureooabstraction la estructura contendría solo "clases abstractas puras" (desde un punto de vista OO, no la definición 'abstracta' de Java), también conocidas como interfaces en Java.
Y los pequeños detalles de implementación (que no existen en el nivel OOA/OOD) donde se encuentra el "código" irían en el directorio src/.
Sin duda tiene sentido si su proceso de desarrollo va de OOA a OOD a OOP.
no, él solo estaba preguntando si poner las interfaces en el mismo paquete que las implementaciones –
Como ya hay algunos buenos puntos, sólo quiero añadir una cosa:
En algunos proyectos incluso hemos llegado tan lejos que colocamos todas las interfaces en un sub-proyecto (módulo experto) y las implementaciones en otro uno. De esta forma, fue posible separar COMPLETAMENTE las interfaces de las implementaciones y finalizar el proyecto de interfaz muy temprano en el proyecto y entregarlo a otros equipos que trabajan en esas interfaces. Dentro de cada uno de los proyectos usamos los mismos paquetes.
En general, diría que debe separar las interfaces y sus implementaciones, de la misma manera no importa, siempre y cuando sea coherente con ellas.
Donde quiera, pero está absolutamente bien mantener las interfaces en el mismo paquete y estructura de directorios. Solo mira el java api. Si selecciona alguno de los paquetes, notará que muchos contienen ambas clases e interfaces.Algunas de las interfaces se implementan por clases en el mismo paquete y otras no.
Creo que la peor práctica es insistir en que debe tener un directorio diferente para las interfaces. He visto directorios como/services y/impl y otros, que solo bloquean la estructura del directorio. En mi lugar de trabajo actual empleamos muchos contratistas que van y vienen, y algunos de nuestros proyectos tienen múltiples tipos de directorios de interfaz. La única vez que creo que tiene sentido usar un directorio separado es si planea copiar las interfaces en otros proyectos, por ejemplo para los EJB, pero incluso así pueden tener el mismo paquete si usa un proyecto compartido para las interfaces.
Por lo tanto, la respuesta breve es, en cualquier lugar que desee, pero no cree que deba separar sus clases y sus interfaces. En muchos casos, es preferible mantenerlos en el mismo paquete/directorio.
- 1. Directorio de desarrollo Estructura
- 2. Android Maven Directorio Estructura
- 3. Estructura de directorio de Django?
- 4. Estructura del directorio de Octopress
- 5. Estructura de directorio para MVC
- 6. Estructura del directorio de caché
- 7. Estructura de directorio de Python TDD
- 8. Interfaces de etiquetado en Java
- 9. Tar solo la estructura de Directorio
- 10. ¿Inventó Java interfaces?
- 11. Java - Implementing Interfaces
- 12. ¿Cómo identifico un directorio sin conservar la estructura del directorio?
- 13. Java pregunta estructura de datos
- 14. Estructura de columnas múltiples Java
- 15. Forma de especificar múltiples interfaces en Java
- 16. consulta acerca de las interfaces en Java
- 17. Implementación de interfaces Java no seguras
- 18. Herencia en las interfaces de colección Java
- 19. Adición de invariantes a interfaces en Java
- 20. Mejor estructura de la estructura del proyecto web de Java
- 21. Java: ¿cómo puedo compilar una estructura de directorio completa de código?
- 22. interfaces Java y tipos devueltos
- 23. ¿Cuál es su estructura de directorio de desarrollo de software?
- 24. ¿Debería Copy-Item crear la estructura de directorio de destino?
- 25. Almacenar una estructura de directorio en la base de datos
- 26. Estructura del directorio de control de fuente recomendada?
- 27. Colecciones Java (estructura LIFO)
- 28. Oyente de directorio en Java
- 29. Brushup de estructura de datos (Java)
- 30. Implementa las interfaces de Mapa y Lista en Java?
dependiendo de la lógica para diseñar paquetes, a menudo agregaré un subpaquete 'impl' para designar las implementaciones, como: com.stackoverflow.questions, com.stackoverflow.questions.impl. – Kylar