Tengo una aplicación muy simple que necesita una fuente de datos. En la actualidad es un archivo plano, pero más tarde cambiará a una base de datos. Necesito su opinión sobre el uso de herencia o interfaces aquí. ¿Cuál sería mejor y por qué? Mi opinión es utilizar interfaces porque sería flexible, pero también podría hacer que la fuente de datos también sea una clase abstracta.¿Caso para usar herencia o interfaz en Java?
Respuesta
Utilizaría una clase abstracta donde hay una funcionalidad común a la que todas las implementaciones necesitan acceso. Aquí la base de datos y las implementaciones de archivos son tan diferentes que no tendrán nada en común, así que iría con las interfaces.
Utiliza una interfaz cuando solo los métodos y tipos para acceder a los datos seguirán siendo los mismos. Usas la herencia cuando hay un código/funcionalidad común entre cosas que también deben compartirse.
En este caso, parecería que una interfaz sería suficiente y la utilización de una clase abstracta sin un código común sería un desperdicio. Un beneficio que a menudo se olvida de utilizar interfaces es que puede implementar múltiples interfaces a la vez, mientras que solo puede heredar de una clase principal.
En este caso, sería más conveniente usar una interfaz.
Al abstraer los detalles de implementación, puede proporcionar una interfaz común que pueden usar tanto el archivo plano como la base de datos respaldados. Cuando llega el momento de cambiar, solo cambiará el código de implementación de esta interfaz y no cualquier código que los use.
Me gustaría ir con una clase abstracta. Al abordar un enfoque orientado a objetos puros, la clase sería muy pequeña, solo las necesidades, y luego las clases secundarias contendrían todos los parámetros y valores para los objetos.
Un ejemplo de lo que sería en la clase abstracta para prepararte para la base de datos que planeas es un int
para la identificación única.
Como mencionó en su publicación, sería mejor crear una interfaz que defina las operaciones que se pueden realizar en su fuente de datos. Para cada origen de datos individual, puede crear una clase que implemente esa interfaz.
Para operar en un archivo plano puede implementar la clase FileDataWrapper implements DataWrapper
, donde la clase FileDataWrapper implementa las operaciones que se pueden realizar en la fuente de datos. Más tarde, cuando cambie a una base de datos, simplemente implemente la clase DatabaseDataWrapper implements DataWrapper
.
Puede usar el patrón de diseño DAO y Fábrica. Puede encontrar un ejemplo en Advanced DAO programming y más información en Core J2EE Patterns - Data Access Object.
- 1. Java ORM: Herencia múltiple (interfaz)
- 2. interfaz Java y la herencia
- 3. ¿Usar interfaz o tipo para definición variable en java?
- 4. ¿Debo usar herencia o composición?
- 5. Herencia de Interfaz Múltiple
- 6. Herencia en Core Java
- 7. En caso de que una interfaz herede otra interfaz
- 8. ¿Cambiar código generado o usar herencia?
- 9. ¿Cómo usar la interfaz SortedMap en Java?
- 10. Java Interfaz: Herencia de primer orden, y, Métodos Sobrecarga
- 11. vb.net: la herencia múltiple en una interfaz
- 12. Casting y herencia de interfaz
- 13. Herencia de clase de caso de Scala
- 14. Herencia de interfaz con IDisposable?
- 15. herencia genérica en Java
- 16. Interfaz vs Herencia Múltiple En C#
- 17. Herencia/diseño de interfaz de un juego
- 18. Herencia en Java
- 19. Patrón de diseño para usar en lugar de herencia múltiple
- 20. ¿Cómo usar DMA o RDMA en Java?
- 21. Herencia múltiple en java
- 22. Cuándo usar la clase o interfaz abstracta?
- 23. Herencia en las interfaces de colección Java
- 24. Decisiones de herencia/interfaz para el motor de física
- 25. Herencia y conversión en Java
- 26. Herencia o identificador
- 27. Cuándo usar interfaces o clases abstractas? Cuándo usar ambos?
- 28. ¿Debo usar clases anidadas en este caso?
- 29. C#: interfaz getter/setters de herencia
- 30. ¿Herencia de tabla única o herencia de tabla de clase?
pero, ¿tendría sentido crear una fuente de datos como interfaz y luego FileDataSource implementarla? – Phoenix
@Phoenix: No entiendo lo que estás preguntando. si tienes una interfaz por supuesto, algo tiene que implementarla. –