Försöker förstå det här med att "tänka" i flera lager... Läste genom ditt inlägg ganska fort, och vad jag kunde se så såg det ut som du har tänkt rätt. Jag skulle rekommendera dig att du läser denna artikel: Tack Fredrik för utmärkt information! Hej, Hej, om du skapar Class Library projekt så kommer dessa att läggas i en DLL fil. Så skapa ett Win Form projekt, där du sköter presenationen, sedan ett projekt som du ex kallar för Business och ett projekt du kallar för Data eller liknande, så kommer du autmatiskt få EXE fil samt två Dll:er. Hur du skall göra med infrastrukturen i ditt projekt får du bestämma själv, dvs de hjälpklasser du använder dig av. Hjälpklasser kan ex vara ett lager med Felhantering m.m. Klasser som inte är bundet till ett av dina tier utan som kan förekomma i alla. Jag tackar för hjälpen. Nu kommer jag nog vidare ;-)Lite funderingar kring 3-tier... Hjälp!
(Det skall initialt inte bli ngn client/server lösning; försöker dock skapa lite struktur i koden.)
1. Har skapat tre lager (data, application och ui). Varje lager ligger i varsitt projekt under en och samma solution. Koden är skriven i form av vanliga klasser i de tre projekten. Verkar detta vettigt?
2. Innebär detta upplägg att jag gör en exe av t ex applikationslagret, och dll:er av de två andra lagren? (Har aldrig gjort några dll:er, men det skall nog gå.)
3. Om nu detta sätt är rätt så borde det funka att lägga till en referens till t ex dblagret i applikationslagret och därmed kunna skapa objekt av klasser i dblagret för att kunna använda dess metoder... Eller?
4. Har jag tänkt rätt?
Mitt mest akuta problem är att jag från ett projekt försöker skapa ett objekt av en klass som ligger i ett annat projekt (dock i samma solution enl ovan). Detta funkar dock inte som det ser ut idag...
Är tacksam för kommentarer och eventuella förslag till andra lösningar.
Tack på förhand,
//MartinSv: Lite funderingar kring 3-tier... Hjälp!
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnbda/html/distapp.asp
Den handler precis om hur du kan bygga lösningar i .Net och den går igenom de olka lagrena mm.
n-Tier snabb översikt:
1) Presentationslagert ( Kan tex vara en Windows Forms eller Web Forms mfl.)
Presentationslagret igenligen enda syfte är att presentera data för en användare och även göra det möjligt att mata in data ifrom av tex formulär. Presentationslagret ska helst inte veta vilken datakälla som används för att hämta data. Presentationslagret får sin data utifrån affärslagret.
2) Affärslagret
Affärslagrets uppgift är att utföra affärslogik så som uträkningar, starta och stoppa transaktioner mellan flera komponenter mm. Affäslagret ska inte veta något om presentationslagret. Affärslagrets hämtar sin data från dataåtkomstlagret och har ingen vetskap om vilken datakälla som datan hämtas ifrån.
3) Datalagret
Datalagrets uppgift är att enbart att hämta och underhålla data. Se till så data kan hämtas, sparas, skapas och uppdateras mot en datakälla. Här används tex ADO.Net. Ska inte förekomma någon affärslogik i detta lagret utan det är affärslogikslagret uppgift att utföra det.
Varje lager kan du skapa som egna projekt i en solution. Detta innebär att varje projekt blir en egen assemlby (dll). När det gäller presenationslagret så skapar du tex ett webb eller windows form projekt. När det gäller referencer så välj add references och project och referera mellan projekt istället för mot själva dll:erna.
Det finns även templates i VS.Net som sätter upp projekt för distribuerade applikationer åt dig. Under Other Projects/Enterprise templates projects/ i VS.Net har du olika projekt mallar att välja på för att skapa skitade lösningar.
Ett tips är att du tar även en titt på Petshop 3.0 från Micrsosoft.
http://msdn.microsoft.com/architecture/default.aspx?pull=/library/en-us/dnbda/html/PetShop3x.asp
/Fredrik Normén NSQUARED2
http://www.nsquared2.netSv: Lite funderingar kring 3-tier... Hjälp!
För att sammanfatta de praktiska detaljerna:
i UI-lagret skapar jag de formulär jag vill ha.
Sedan lägger jag till två "Class Library" vari ap- och db-lagen skall husera.
Nu är frågan; skall jag lägga till vanliga klassfiler i dessa, eller skall det vara komponenter? Har fått för mig att det blir dll:er av komponenter... Hamnar då vanliga klassfiler i den slutliga exe-filen?
Återigen, tack för utförligt svar.
//MartinSv: Lite funderingar kring 3-tier... Hjälp!
När du skapar klassbibliotek så kommer varje klassbibliotek bli dll:er (Assemblies). Du behöver inte skapa dom som komponeter eller reigstrera dom i Component Services om du inte ska utnyttja de tjänster som component services erbjuder.
Assemblies som du skapar kommer inte hamna i själva exe-filen utan ligga löst utanför.
/Fredrik Normén NSQUARED2
http://www.nsquared2.netSv: Lite funderingar kring 3-tier... Hjälp!
JNSv: Lite funderingar kring 3-tier... Hjälp!
//Martin