Hej, BLL skall inte ha något med UI att göra. Hur hantera "UI-logiken"?
Bakgrund: jag har gjort en webbapplikation (ASP.NET 2.0) som jag själv tycker har en hyfsat strukturerad och fungerande struktur. Det är en "managermodell" med följande lager uppifrån och ner:
UI - aspx med code behind
BLL - "Managerklasser" (en del kallar det repositories har jag sett, dvs klasser med affärslogik) - tex PersonManager
DAL - Databasklasser som ofta "gör jobbet" åt dataaccessmetoderna i BLL-managerklasserna - tex PersonDAO
"Vertikalt" vid sidan av dessa lager har jag ytterligare ett lager som jag kallar DOM, med rena domänobjekt (POCO's) som lever i alla lager kan man säga (instansieras i UI, hanteras i BLL och persisteras i DAL osv) - tex Person
Just i denna applikation har jag valt att implementera en customized membership- och roleprovider som hanterar användarna, detta hamnar lite vid sidan av mina lager eller kanske snarare i UI på sätt och vis men jag tycker att vinsten i tid att använda detta var så stor att det var ok att vara lite pragmatisk då det i detta fall i princip endast handlar som åtkomst- och funktionsstyrning.
Koden är i mitt tycke bra strukturerad, jag vet exakt var jag ska lägga in ny logik vid behov och jag gör de normala vinster man gör med liknande arkitektur.
Nu till min fundering, mina BLL, DAL och DOM-klasser är rena, fina och välstrukturerade. Det som inte är fullt lika kul är i UI-klasserna (code behindfilerna) där blir det snabbt plottrigt och det känns som att man kanske skulle kunna göra detta bättre.
Lite kodexempel från UI för att exemplifiera:
if(sokande.Mobilnr.ToString() == "Ej angett mobilnummer") {
tbMobil.Text = "";
} else {
tbMobil.Text = sokande.Mobilnr;
}
----------------------------------------------------------------------------------------
if (ddBolag.SelectedValue != "0"){
applicant.Bolag = Convert.ToInt32(ddBolag.SelectedValue);
}
else{
applicant.Bolag = 0;
}
Det blir ganska snabbt en hel del styrning av vad som skall skrivas ut, vilka checkboxar som ska vara checkade och även vad olika attribut i DOM-klasserna ska få för värden osv. Det är väl ok eftersom vi ju är i UI och jobbar men min fundering är om ni andra gör på andra sätt? Skickar ni ner events i businesslagret och låter det ta en större roll och låta det skicka tillbaka messages till UIklasserna?
Jag skapar ju instanser av DOM-klasserna i UI, ska man kanske göra detta i BLL istället, osv osv.
Hoppas jag inte varit alltför oklar och att fler har liknande funderingar så kanske vi kan få en liten diskussion.
//Jonas
Sv: Hur hantera "UI-logiken"?
Om du vill strukturera och återanvända delar av UI logiken så finns det lite olika "patterns" att använda. Tex genom att använda service klasser, dessa är klasser där viss logik kapslas in och anropas från UI lagret. En annan variant är den mer brett använda MVC - Model View Controller.
Men sammantaget handlar det om att flytta runt var UI koden ligger.