Testmöjligheter och att olika clienter kan accessa serverdelen.
Hej!!
Vad är det för brister med att skriva icke flerskiktad kod? Varför är det så mycket bättre att dela upp koden i flera skikt? Varför blir det säkrare...
24 svar · 1 683 visningar · startad av lasseh79
Hej!!
Vad är det för brister med att skriva icke flerskiktad kod? Varför är det så mycket bättre att dela upp koden i flera skikt? Varför blir det säkrare...
Testmöjligheter och att olika clienter kan accessa serverdelen.
Kortfattat:
Skillnaden mellan flerskiktslösningar och enskiktslösningar ligger, rent teoretiskt, inte i kvaliteten eller säkerheten på applikationen, eftersom en enskiktslösning i princip kan medföra exakt samma exekvering som en flerskiktslösning. Dock medför en flerskiktslösning att man med relativ enkelhet kan införa säkerhetsgränssnitt, testningsgränssnitt osv. Dessutom avgränsar man funktionaliteten till de olika lagren, och avgränsning är synnerligen viktigt i ett effektivt utvecklingsarbete.
så med andra ord så är flerskiktstänket det mest programmeriskt etiskiska sättet att jobba och detta är att föredra men rent säkerhetsmässigt så är det ingen skillnad.
Men varför just 2 skikt? Varför blir det lättare att testa då?
lasseh79 skrev:
så med andra ord så är flerskiktstänket det mest programmeriskt etiskiska sättet att jobba och detta är att föredra men rent säkerhetsmässigt så är det ingen skillnad.
I teorin är det ingen skillnad, men en flerskiktslösning bör göra det smidigare att bygga säkra lösningar, och av den anledningen är oftast flerskiktslösningar säkrare.
lasseh79 skrev:
Men varför just 2 skikt? Varför blir det lättare att testa då?
Det är det ingen som påstått...:) Olika problem kräver olika lösningar.
Jag anser att flerskiktsdesigner är att föredra,
det finns nog bara en fördel med enskikt och det är att man oftast kan få ut lite bättre prestanda.
Men då kommer underhållning av koden att lida, och det är svårt att få flera arbetare att arbeta med en enskiktsarkitektur. Man kan inte flytta ur en del av systemet och göra om osv.
Varför är det så mycket bättre att dela upp koden i flera skikt?
Framför allt så vinner man i att flera personer kan jobba med samma projekt. Där varje person kan få en specifik uppgift som skall lösas och där man har fått ett väldefinerat gränssnitt.
En annan stor fördel är återanvändning av kod. Om du delar upp ditt projekt i flera lager, så är det möjlligt att du kan återanvända ett lager i ditt projekt som du skrivit till ett annat, ett klassiskt exempel är DataAccess lagret, oftas så skriver man det en gång och återanvänder detta sedan till alla projekt.
En annan stor fördel är att med flera skikt så kan då få en mer skalbar applikation, allts du har möjlighet att dela upp applikationen på flera maskiner om det skulle visas sig att din applikation kräver mycket prestanda.
Varför blir det säkrare...
Behöver det inte bli, men rent praktiskt så blir det säkrare på det sättet att du får mindre byggstenar som är lättare att testa och felsöka.
- M
Det borde väl, teorin, i alla fall gå snabbar att utveckla en enskiktslösning.
P skrev:
Det borde väl, teorin, i alla fall gå snabbar att utveckla en enskiktslösning.
Behöver man inte återanvända någon kod så visst det kanske är det bästa. Men hur ofta behöver man inte det?
Svar till P. Ja en enskiktslösning är snabbare och enklare om man bara är en programmerare och har en bra dokumentation. En dokumentation borde egentligen vara själva grunden till all form av programmering.
P skrev:
Det borde väl, teorin, i alla fall gå snabbar att utveckla en enskiktslösning.
Inte nödvändigtvis, eftersom man kan tvingas till väldigt komplex kod för att hålla allt inom ett lager.
emission skrev:
Inte nödvändigtvis, eftersom man kan tvingas till väldigt komplex kod för att hålla allt inom ett lager.
Nej men oftast kanske. Säg att man gör en enkel gästbok, då borde det gå snabbare att "fulkoda" den rakt av än att blanda in flerskiktslösningar, om man nu inte har skikt klara sedan tidigare. Gäller väl att göra en avvägning, är det nödvädigt att ha en så pass avancerad arkitektur för den applikationen man ska göra... :)
Som vanligt kanske man skall förklara syftet först! Om det är frågan om en gästbok är det knappast ett flerpersonsprojekt (snyggg hopskrivning va) Men om det gäller ett ordersystem med kolla på lagret och betalningsdel är det definitivt en flerskiktslösning man skall sikta på. (även om man gör den själv) eftersom ändringar kan komma i en enskild del.
En annan stor fördel är att med flera skikt så kan då få en mer skalbar applikation, allts du har möjlighet att dela upp applikationen på flera maskiner om det skulle visas sig att din applikation kräver mycket prestanda
Menar du att man kan dela upp assemblyn på olika maskiner och få dem att exekverar på var sin maskin men ändå jobba ihop som 1 assembly?. Hur gör man det?.
P skrev:
Nej men oftast kanske. Säg att man gör en enkel gästbok, då borde det gå snabbare att "fulkoda" den rakt av än att blanda in flerskiktslösningar, om man nu inte har skikt klara sedan tidigare. Gäller väl att göra en avvägning, är det nödvädigt att ha en så pass avancerad arkitektur för den applikationen man ska göra... :)
Det finns inget "rätt" sätt att bygga en applikation på. Däremot finns det ju olika sätt för att uppnå olika mål.
Om ditt mål är (som ensam person) att skriva en liten applikation snabbt, så är en enskiktad lösning det bästa alternativet. (Anser i alla fall jag.)
Om du ska försöka konkurrera ut Windows så kanske man ska dela in koden i lite fler byggstenar så att man kan återanvända så mycket som möjligt. Har du samma kod på fler än ett ställe så tappar du genast tid när du ska göra en uppdatering. Säkerhetsluckor kan lättare uppstå (därav tesen att det är säkrare med skiktade lösningar) och färre personer kan jobba med enskiktad kod.
Så rent generellt: för stora applikationer som flera personer ska arbeta med så är det bäst att dela upp projektet i flera lager.
Lite fördelar med respektive metod:
Flera lager är:
+ Enklare att underhålla, ändra och bygga ut (skalbart)
+ Säkrare eftersom det bara finns en uppsättning kod per uppgift
+ Koden byggs upp och delas in logiskt i olika enheter
+ Lämpar sig väl för stora projekt med många personer
Ett lager är:
+ Snabbt att komma igång med
+ Behöver (vanligtvis) inte kompileras, dvs extremt snabb implementering
+ Lämpar sig bäst för små projekt med få personer
Ett bra exempel på när man behöver använda flera skikt är så som vi har det:
Vi har en data-klass som kan användas i flera projekt.
En business-klass som gör allt det faktiska arbetet(administrerar hela vårt kundsystem och arbetar mot ekonomiprogrammets API)
En webservice som fungerar som gränssnitt till business-klassen
Vi har klienter på varje dator på kontoret som arbetar mot webservicen, klienten i sig kan inte göra nått utan webservicen.
På servern där vi har webservicen har vi ett program som arbetar direkt mot business-klassen och lyssnar efter nya ordrar och tar hand om dom när dom kommer in samt kör ut alla månadsfakturor den 1:a varje månad.
Hela vår kundwebb arbetar mot webbservicen.
På det här sättet har vi i praktiken flera klienter som jobbar mot ett och samma gränssnitt i slutändan fast på olika sätt. Skulle jag däremot göra ett enklare program eller en enkel webbsida skulle jag nog ha det mesta i ett skikt, troligen skulle jag bara använda vår data-klass för att slippa skriva om den.
Menar du att man kan dela upp assemblyn på olika maskiner och få dem att exekverar på var sin maskin men ändå jobba ihop som 1 assembly?. Hur gör man det?.
Beror på hur du definerare en assembly. Du kan dock lägga olika dll:er på olika maskiner och få de att jobba ihop som en applikation. Det är dock inget man gör i efterhand i någon wizard, utan kräver att man tänkt in möjligheterna från början, eller bygger wrapper klasser runt din dll efter när allt är färdigt.
Det finns flera olika lösningar för att bygga en sådan applikation, men det som behövs är att man definerar en klump kod som självständig och isolerar den koden i sin dll. Till detta behövs sedan någon sorts kommunikationsprotokoll som gör att du kan kommunicerar mellan dina olika dll:er, du kan välja WS, .NET Remoting, MSMQ eller varför inte DCOM.
Lösningen i 2006 heter Indigo som kommer att gör underverk för SOA (i alla fall i .NET världen).
- Magnus
Skulle vara kul om någon orkade slänga upp ett litet exempel på hur en applikation som använder sig av lager skulle kunna vara uppdelad. Skulle vara riktigt intressant. Jag tänker inte direkt på någon kod utan en mer generell beskrivning i form av exempelvis objektdiagram eller liknande.
Håller med föregående talare ;-)!!
Hittade denna artikel som är skriven av Dahlen här på Webforum. Tycker den beskriver det hela både bra och enkelt. :)