Rehein makes the interesting argument that there is no clean separation between the presentation, business, and data access layer. Instead, UI concerns often known only at runtime like paging, filtering, sorting, and so on make data querying a cross cutting concern. He therefore, recommends we stop creating UI interfaces like:
This is too inflexible and we end up breaking or overloading these interface methods every time a new need comes up:
GetInvoicesForUser(int userID, int pageNumber, string orderByColumn)The goal is for any interface implementation to be open for extension but closed for modification. But by insisting upon a hard separation of concern between the UI and the business/facade interface we're making modifications left and right.