Presumo i suoi webform ASP.NET, passa attraverso Building Layered Applications serie di Imar Spaanjaars che spiega lo stesso concetto che hai descritto. In breve, di seguito è l'approccio.
Presentation Layer
Da aspx.cs:
var objCustomer = CustomerBLL.GetCustomerById(id);
if(objCustomer != null)
{
//assign values to UI controls
}
In Business Logic Layer
public static class CustomerBLL
{
public static Customer GetCustomerById(int id)
{
//call database layer
return CustomerDAL.GetCustomerById(id);
}
}
In livello di accesso ai dati
public static class CustomerDAL
{
public static Customer GetCustomerById(int id)
{
Customer objCustomer = new Customer();
//use ADO.NET or any data access methodology to retrieve data
//and assign properties of objCustomer
return objCustomer;
}
}
Oggetti business
Questi sono solo DTO usati per passare i dati tra i livelli. Viene referenziato sia in Business Logic che in Data Access Layer.
public class Customer
{
public string Name {get;set;}
//other properties
}
IMO, funziona bene con applicazioni di piccole e medie dimensioni.
Modifica
A seconda del codice, entrambi i livelli DAL e BLL vengono richiamati dal livello di presentazione. Quindi non c'è una risposta giusta, a meno che non conosciamo la responsabilità di ogni livello e di come è progettato.
On the website I can do something like
BL.User user = DAL.GetUser(1)
I also have this type of logic in the website
user = [new user information]
If Not DAL.DoesEmailExists(user) Then
DAL.InsertNewUser(user)
End If
Dal codice esistente, come menzionato nella sezione dei commenti, prova in questo modo:
Sito web
DAL.UpsertUser(objUser);
In store proc:
IF EXISTS(select 1 FROM users where userid = @userid)
BEGIN
--insert
END
ELSE
BEGIN
--update
END
}
Funziona sia per inserimento / aggiornamento.