adam bien's blog

Service s = new ServiceImpl() - Why You Are Doing That? 📎

I see over and over again in projects and reviews the following "best practice":

Service service = new ServiceImpl();

Basically: for every interface there is an implementation with the "Impl" ending. That's not enough: sometimes both are configured in a XML-File (probably to emphasize the importance of this pattern :-)).

 

That is not only bloat (and the opposite of "Convention Over Configuration" idea), but it causes real damage:
  1. Imagine you get another implementation (thats the whole point of an interface) - how would you name it?
  2. It doubles the amount of artifacts - and significantly increases the "complexity"
  3. It is really funny to read the javadocs on the interface and the impl - another redundancy
  4. The navigation in the IDE is less fluent


I asked why developers are writing such code, but didn't got any reasonable answer, except "because of mocking".
This is, however, no more true for several years. Any ideas, why you are doing that?

See also: How To Deal With Interfaces In Java EE 6 (or no more Impl)