Enterprisey Interfaces
By Adrian Sutton
Unneeded interfaces are not only wasted code, they make reading and debugging the code much more difficult, because they break the link between the call and the implementation. The only way to find the implementing code is to look for the factory, and see what class is being provisioned to implement the interface. If you’re really lucky, the factory gets the class name from a property file, so you have to look another level down.
I agree so much I feel compelled to repost that without anything significant to add. This anti-pattern seems to be driven by the idea that it separates the interface (api) from the implementation. However that’s a fallacy – what it really does is duplicate the interface which is now specified by both the interface (api) and the implementation. It’s “enterprisey” thinking applied to the class level and should be removed wherever it is encountered.