Jag har ett par frågor om detta med objektorientering. Jaghar så j''''a svårt att fatta det. Är det fel att skriva koden så här Jag är inte riktigt säker på om jag förstår din fråga, men kan väl ändå påpeka att din set-property har ett litet "fel". Men var lägger jag in affäslogiken? Var lägger jag anrop till databasklassen? Efter vad jagförstår så ska dessa anrop göras från bll och bll är väl det lagret med set, get? Aha, då förstår jag din fråga bättre och ska försöka mig på ett svar.Objektorientering?
bll
<code>
private string name;
public string Name
{
get { return name; }
set
{
name = value;
if (name.ToLower() == "no")
{
throw new Exception("Felaktigt val");
return;
}
}
}
// aspx
File file = new File();
try
{
file.Name = "No";
}
catch(Exceptions ex)
{
lblError.Text = ex.Message;
}
</code>
Omdet är rätt att skriva så här, hur och var gör jag då databasanrop från bll-filen?Sv: Objektorientering?
Eftersom du tilldelar name = value innan du gör något test så kommer name kunna vara "no" (dock efter att den kastat en exception). Det känns väl inte så optimalt med tanke på att ditt objekt kommer i en "inconsistent state" fast programmet ändå rullar på. Istället kan du skriva set-propertyn såhär:
<code>
set
{
if (name.ToLower() == "no")
throw new Exception("Felaktigt val");
name = value;
}
</code>
Sen kan man också påstå att det är dålig OOP eftersom objektet inte längre kan "ta hand om sig själv" (dålig encapsulation). Att kasta en Exception kan tyckas lite väl drastiskt...istället kanske det vore mer passande med en metod i stil med: bool TrySetName(string name); Då ser man mycket tydligare att metoden som anropar måste vara beredd på att name-sättningen kanske misslyckas.Sv:Objektorientering?
Sv: Objektorientering?
Att använda ett BLL (Business Logic Layer) är bara en "variant" av OOP, och långt ifrån den enda. Den hör till något som brukar kallas 3-lagers arkitektur och som är vanligt. Dock är 3-lagers arkitektur långt ifrån det enda sättet att skriva bra OOP-kod, och om du verkligen inte vet att du ska ha just 3 lager (presentation, logik och data) så kanske det inte behövs?
Om du ändå bestämmer dig för att just tre lager är rätt så ser det ut på följande sätt:
Presentation -> Logik -> Data
Presentationslagret pratar alltså endast med logiklagret, logiklagret pratar med presentation och datalagret och datalagret pratar endast med logiklagret. Personligen tycker jag BLL är ett förvirrande namn och använder det ogärna. Målet med lagret är att se till att renodla logiken så den inte ligger i UIt eller i Datalagret...där den lätt blir svår att urskilja.
Hoppas den här förklaringen hjälpte. Tyvärr svårt att förklara om 3-lagers arkitektur såhär kort, men wikipedia är din vän om du vill veta mer :).