un'architettura a 3 livelli è composto da 3 strati principali
- PL Presentation Layer
- BLL Business Logic strato
- DAL layer Data Access
ogni il livello superiore richiede solo lo strato sottostante e mai vede qualcosa su di esso.
quando chiedono circa Come pensate di costruire la vostra BLL, è possibile scrivere qualcosa di simile:
namespace Company.BLL
{
// let's create an interface so it's easy to create other BLL's if needed
public interface ICompanyBLL
{
public int Save(Order order, UserPermissions user);
}
public class Orders : ICompanyBLL
{
// Dependency Injection so you can use any kind of BLL
// based in a workflow for example
private Company.DAL db;
public Orders(Company.DAL dalObject)
{
this.db = dalObject;
}
// As this is a Business Layer, here is where you check for user rights
// to perform actions before you access the DAL
public int Save(Order order, UserPermissions user)
{
if(user.HasPermissionSaveOrders)
return db.Orders.Save(order);
else
return -1;
}
}
}
Come esempio vivo di un progetto che sto creando:

PL sono tutti servizi pubblici esposti, il mio DAL gestisce tutti gli accessi al Database, I hav EA Servizio strato che gestisce 2 versioni del servizio, un vecchio ASMX e il nuovo servizio WCF, sono esposti tramite un Interface
quindi è facile per me scegliere on-the-fly quale servizio l'utente verrà utilizzato
public class MainController : Controller
{
public IServiceRepository service;
protected override void Initialize(System.Web.Routing.RequestContext requestContext)
{
...
if (thisUser.currentConnection.ws_version == 6)
// Use old ASMX Web Service
service = new WebServiceRepository6(url, ws_usr, ws_pwd);
else if (thisUser.currentConnection.ws_version == 7)
// Use the brand new WCF Service
service = new WebServiceRepository7(url, ws_usr, ws_pwd);
...
}
}
Nel codice sopra, uso semplicemente Dependency Injection per separare il knowladge dell'altro livello, poiché a questo livello (il Presentation Layer come questo è un Controller in un progetto MVC) non dovrebbe mai interessarsi a come chiamare il Servizio e che l'utente utilizza ServiceA
anziché ServiceB
... Ciò che è necessario sapere è che la chiamata a IService.ListAllProjects()
darà i risultati corretti.
Si inizia divisione propone e se un problema appare nella connessione del servizio, si sa che c'è niente a che fare con il livello di presentazione, è il livello di servizio (nel mio caso) ed è facile fisso e può essere facilmente implementato un nuovo service.dll
invece di pubblicare nuovamente l'intero sito ...
Ho anche un helper che contiene tutti gli oggetti aziendali che uso in tutti i progetti.
Spero che aiuti.
La domanda "Mostra solo l'architettura del livello aziendale"? Non c'era un contesto? Ti ha esplicitamente chiesto di un'architettura a 3 livelli? Se senza contesto ti è stata posta questa domanda dovresti aver risposto che hai diverse architetture per diversi scenari. –
Non intervista o avrai un secondo turno? :-) –
@Darin: Mi ha chiesto di mostrare l'architettura a 3 livelli – Sandy