Non, chaque classe ne doit pas avoir d'interface. C'est trop carré.
Vous utilisez une interface lorsque vous avez besoin de faire abstraction de ce qui a été fait, et vous êtes certain que l'implémentation peut changer. Jetez un oeil à l'API Collections java.util pour un bon exemple. L'interface List est une belle abstraction pour l'idée générale d'une liste, mais vous pouvez voir qu'il existe plusieurs façons de l'implémenter: ArrayList, LinkedList, etc.
MISE À JOUR: Alors qu'en est-il de ce cas où vous concevez un béton classe, décidez après avoir des clients qu'une interface est nécessaire, puis vous cassez vos clients en ajoutant une interface? Yup, c'est ce qui arrive. Comment pouvez-vous savoir ce que vous ne savez pas? Aucun logiciel ou méthodologie ne peut résoudre ce problème. La bonne nouvelle pour vous est que l'extraction d'une interface à partir d'une classe concrète est un refactoring facile à faire pour vous et vos clients. Les IDE gèrent ce genre de choses régulièrement. Vous et vos clients devriez en profiter.
Je dirais que les couches, comme les services et la persistance, devraient toujours avoir des interfaces. Tout ce qui peut être mandaté devrait avoir une interface. Si vous faites Spring AOP, tout ce que vous voulez décorer avec un aspect devrait avoir une interface.
Les objets de modèle ou de valeur, tels que Personne ou Adresse ou Téléphone, ne doivent pas avoir d'interface. Un objet de valeur immutable ne doit pas avoir d'interface.
Le reste tombe dans les zones grises. Utilisez votre meilleur jugement.
Voir aussi cette question: http://stackoverflow.com/questions/3036749/is -la-meilleure-pratique-pour-extraire-une-interface-pour-chaque-classe –
Merci. C'est ce que j'étais après – Tarski