2012-07-16 18 views
5

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

8

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.

+0

pero, ¿tendría sentido crear una fuente de datos como interfaz y luego FileDataSource implementarla? – Phoenix

+0

@Phoenix: No entiendo lo que estás preguntando. si tienes una interfaz por supuesto, algo tiene que implementarla. –

2

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.

0

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.

0

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.

0

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.