Per "layer" intendo dire che anziché scrivere tutto il codice nello stesso progetto lo separi in modo funzionale in più progetti.

La regola potrebbe essere questa:
  • il codice dentro al "user interface layer" deve limitarsi a gestire le problematiche dell'interfaccia, delegando tutti i meccanismi di logica al "business layer"
  • il codice dentro al "business layer" fornisce i metodi per l'accesso ai dati, gestendo i criteri di accesso e controllando tutto quello che entra ed esce.
  • il codice dentro al "data layer" si occupa di interfacciarsi nel modo migliore con il database, eseguendo tutto ciò che gli viene detto di fare dal "business layer".


Un esempio banale: se dall'interfaccia devi salvare un record nel db, non scrivi tutto il codice dentro l'evento del pulsante, ma passi i dati da salvare a una funzione presente nel "business layer". Quest'ultimo non si limita a salvare ma controlla per esempio che la richiesta sia legittima o che i dati passati rispettino certe regole (per esempio un indirizzo email deve essere scritto correttamente). Le funzioni del "business layer" non utilizzano direttamente il database, ma si appoggiano ai metodi esposti dal "business layer" (che come detto potrebbe essere un oggetto "LINQ to SQL classes").