I've started working on a WebForms (not MVC) application that will reside on a single server (database included) and have decided to design it using what (I think) is a pretty standard N-Tier architecture.
Few questions...well, alot actually :/
Seeing as my service "Find( predicate )" and "FindAll( ) " methods would be using the same stored procedure (that pulls ALL records), does this mean that doing something like:
List<Foo> myFoo = FooService.Find( f => f.Country == "Australia" && f.Status = OrderStatus.New );
would actually pull ALL records via the stored procedure, with the filtering performed after the fact? In which case how can I use a stored procedure that only retrieves the needed records, while at the same time allowing for the use of linq expressions (needs to allow for &&, ||, != etc)? Is this something that's even possible (without having to ditch sprocs)?
I think it's an over-architecture if it will be a monolithic application. Following YAGNI and DRY, just make your services return the BOs. I also recommend using MVP pattern when working with WebForms and even avoid the "service layer" and just do Domain Driven Design (DDD) instead.
http://en.wikipedia.org/wiki/Domain-driven_design
http://en.wikipedia.org/wiki/Don't_repeat_yourself
http://en.wikipedia.org/wiki/You_ain't_gonna_need_it
http://www.codeproject.com/Articles/23562/Building-an-MVP-Framework-for-NET-Part-1-The-Basic
MVP is really easy to implement. The explanations will be always full of components and arrows, and the sample implementations always try to make things complex (I don't know why), but is really a simple pattern for separation of concerns and it really works :)
Hope it helps :)