Non, chaque classe devrait pas avoir une interface. C'est trop carré.
Vous utilisez une interface lorsque vous avez besoin d'abstraire ce qui est fait de la façon dont c'est fait, et vous êtes certain que la mise en œuvre peut changer.
Jetez un oeil à la java.util Collections de l'API pour un bon exemple. La Liste de l'interface est une belle abstraction de l'idée générale d'une Liste, mais vous pouvez voir qu'il y a de nombreuses façons de la mettre en œuvre: ArrayList, LinkedList, etc.
Mise à JOUR: Alors que dire de cas où la conception d'un béton de classe, décide, après vous avez des clients qui une interface est nécessaire, et puis vous cassez vos clients par l'ajout d'une interface? Ouais, c'est ce qui se passe. Comment pouvez-vous savoir ce que vous ne savez pas? Aucun logiciel ou une méthode peut résoudre ce problème.
La bonne nouvelle pour vous est que l'extraction d'une interface à partir d'un béton de classe est un simple remaniement à faire pour vous et vos clients. IDEs gérer ce genre de chose régulièrement. Vous et vos clients faut en profiter.
Je dirais que les couches, comme les services et la persistance, il faut toujours avoir des interfaces. Tout ce qui peut être mandaté doit avoir une interface. Si vous êtes en train de faire Spring AOP, tout ce que vous voulez décorer avec un aspect devrait avoir une interface.
Modèle ou des objets de valeur, comme Personne, d'Adresse ou de Téléphone, ne doit pas avoir une interface. Une valeur immuable de l'objet ne doit pas avoir une interface.
Le reste de l'automne dans les zones d'ombre. Utilisez votre meilleur jugement.