webForumDet fria alternativet

Flerskiktad kod - affärsskikt,dataskikt

.NET

24 svar · 1 683 visningar · startad av lasseh79

Medlem sedan jan. 200568 inlägg
Frågan#1

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...

Medlem sedan juli 200012 978 inlägg
#2

Testmöjligheter och att olika clienter kan accessa serverdelen.

Medlem sedan dec. 19996 721 inlägg
#3

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.

Medlem sedan jan. 200568 inlägg
#4

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å?

Medlem sedan dec. 19996 721 inlägg
#5

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.

Medlem sedan aug. 20003 575 inlägg
#6

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.

Medlem sedan maj 20012 812 inlägg
#7

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

Medlem sedan jan. 20012 204 inlägg
#8

Det borde väl, teorin, i alla fall gå snabbar att utveckla en enskiktslösning.

Medlem sedan nov. 20022 355 inlägg
#9

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?

Medlem sedan juli 200012 978 inlägg
#10

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.

Medlem sedan dec. 19996 721 inlägg
#11

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.

Medlem sedan jan. 20012 204 inlägg
#12

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... :)

Medlem sedan juli 200012 978 inlägg
#13

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.

Medlem sedan juli 200568 inlägg
#14

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?.

Medlem sedan juni 20019 024 inlägg
#15

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

Medlem sedan jan. 20013 341 inlägg
#16

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.

Medlem sedan maj 20012 812 inlägg
#17

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

Medlem sedan jan. 20023 327 inlägg
#18

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.

Medlem sedan jan. 200568 inlägg
#19

Håller med föregående talare ;-)!!

Medlem sedan jan. 20023 327 inlägg
#20

Hittade denna artikel som är skriven av Dahlen här på Webforum. Tycker den beskriver det hela både bra och enkelt. :)

http://www.pdc.se/blog/DisplayEntry.aspx?eid=5

265 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
137 ms — hämta tråd, inlägg och bilagor (db)
125 ms — ändringar (db)