Ihre UI-Schicht sollte weit von Ihrer Datenzugriffsstrategie entfernt sein - sie sollte nicht mit Rohdaten zu tun haben. Daher sollte Ihre Benutzeroberfläche ausschließlich mit Ihren Domänenobjekten kommunizieren (direkt oder über eine Dienstschicht).
Anschließend kann die Benutzeroberflächenschicht die Datenstrukturen erstellen, die sie zum Rendern benötigt. Etwaige Leistungsprobleme könnten durch eine Caching-Strategie entschärft werden.
Dies wirkt sich auf die Lesbarkeit, Testbarkeit und Wartbarkeit des Codes aus, die immer lang- und kurzfristige Ziele jedes Entwurfs sein sollten.
Ich denke, dass Sie idealerweise etwas in dieser Richtung sehen möchten:
UI
/|\\
|
SERVICE (? depending on the design)
/|\\
|
DOMAIN
/|\\
|
DCO
/|\\
|
DAL
EDIT:
Auf der anderen Seite, wenn Sie eine sehr einfache WebForms-Anwendung erstellen, können Sie vielleicht auf einen Teil dieser Komplexität verzichten und einfach die von Visual Studio bereitgestellten Designer verwenden. Ich habe jedoch die Erfahrung gemacht, dass sich Anwendungen oft über die Möglichkeiten der Drag-and-Drop-Oberfläche hinaus entwickeln und man am Ende zu einem separateren Design umstrukturieren muss.
Sie müssen immer wissen, was Sie durch die Wahl einer architektonischen Strategie gewinnen oder verlieren können. Wenn Sie (am Rande) mit fehlenden Tests, eingeschränkter Lesbarkeit und engerer Kopplung der Benutzeroberfläche an die Daten ****shudder**** leben können, dann ist vielleicht der geradlinigere Ansatz für Sie geeignet.
Einige Links zur weiteren Lektüre