One of the things that I repeatedly call out is the forwarding type of architecture, a simple operation that is hidden away by a large number of abstractions that serves no real purpose.
Instead of a controller, let us look at a web service, just to make things slightly different. We have the following:
Okay, let us dig deeper:
I really like the fact that this repository actually have have FindById method, which this service promptly ignores in favor of using the IQueryable<Customer> implementation. If you want to know how that is implemented, just look (using the EF Code First repository implementations, the others are fairly similar):
All in all, the entire thing only serves to make things harder to understand and maintain.
Does anyone really think that this abstraction adds anything? What is the point?!