No, cada clase no debe tener una interfaz. Es excesivo al cuadrado.
Utiliza una interfaz cuando necesita abstraer lo que se hace de cómo se hace, y está seguro de que la implementación puede cambiar.
Eche un vistazo a la API de colecciones java.util para ver un buen ejemplo. La interfaz de lista es una buena abstracción para la idea general de una lista, pero puede ver que hay muchas formas de implementarla: ArrayList, LinkedList, etc.
ACTUALIZACIÓN: ¿Y qué pasa con el caso en el que diseña un concreto clase, decida después de que tiene clientes que se necesita una interfaz, y luego rompe sus clientes al agregar una interfaz? Sí, eso es lo que sucede. ¿Cómo puedes saber lo que no sabes? Ningún software o metodología puede arreglar eso.
La buena noticia para usted es que extraer una interfaz de una clase concreta es una fácil refactorización para usted y para sus clientes. Los IDE manejan ese tipo de cosas rutinariamente. Usted y sus clientes deben aprovecharlos.
Yo diría que las capas, como los servicios y la persistencia, siempre deben tener interfaces. Cualquier cosa que pueda ser proxiada debe tener una interfaz. Si está haciendo Spring AOP, cualquier cosa que desee decorar con un aspecto debe tener una interfaz.
Los objetos de modelo o valor, como Persona o Dirección o Teléfono, no deberían tener una interfaz. Un objeto de valor inmutable no debe tener una interfaz.
El resto cae en áreas grises. Usa tu mejor juicio.
Consulte esta pregunta también: http://stackoverflow.com/questions/3036749/is -it-the-best-practice-to-extract-an-interface-for-every-class –
Gracias. Eso es lo que buscaba después de – Tarski