webForumDet fria alternativet

Lager, har jag tänkt rätt?

.NET

8 svar · 833 visningar · startad av Compusa

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

Har läst en hel del i den här tråden och även läst lite matnyttigt om att dela upp en applikation i lager.

Jag har med hjälp av dessa kommit fram till följande lager och skulle uppskatta lite "input", dvs har jag tänkt rätt?

Presentations Lager
Mitt presentations lager WinForms, WebForms etc

Presentations Logik
Code-behind för WebForms, med WinForms får man väl ha något annat?

Business Logic Layer, Business Object Layer ordningen på dessa?
Logiken, skapar Business Object dvs basklasser såsom User, Person Movie etc. Business Logic använder sig av Business Data Access för att exempelvis hämta data från en databas och fylla objekten med dessa. Här skulle det även vara bra med "strongly typed collections"?

Business Data Access Layer namn?
Ärver från den generella DataAccess. Metoder såsom GetMovies, GetMovie etc. En Business Data Access representerar alltså en tabell i min databas, dvs bdaMovie

Data Access Layer
Generell klass för DataAccess

Data Layer
Min databas.

Medlem sedan jan. 20012 204 inlägg
#2

Ser väl rätt bra ut. Jag brukar slå ihop Business Object Layer och Business Data Access Layer om jag förstår dig rätt. Då får jag:
Presentationslager---Business Layer --- Data Layer --- Data Access Layer och sen klämer jag in en O/R mapper mellan också så hos mig blir det:

Presentations Lager
WinForms, WebForms etc

Presentations Logik
Code-behind för WebForms

Business Logic Layer, Business Object Layer
Logiken, skapar Business Object dvs basklasser såsom User, Person Movie etc.

Business Data Access Layer
Ärver från den generella DataAccess. Metoder såsom GetMovie / GetMovies som använder sig direkt av O/R mappern.

O/R Mapper
Innehåller funktioner så som GetObjectById,GetObjectsById,UpdateObject osv.

Data Access Layer
Klasser för DataAccess(mysql,sql,acess etc)

Data Layer
Min databas

Medlem sedan jan. 20023 327 inlägg
#3

Okej, det där med O/R Mapper låter intressant, använder du en färdig eller en egen?

Hur gör du med exempelvis ditt affärslager, är det ett "class library" som du kompilerar till en dll? Skulle vara intressant att veta hur man kan strukturera upp det i exempelvis Visual Studio. Data Access Layer borde men kunna göra en komponent av som man kan återanvända i många projekt. Med affärslagret så känns det som att det blir ganska specifikt för ett projekt.

Något sådant här tänker jag på:

Presentationslager: Exempelvis ASP.NET projekt
Business Layer: Class library (assembly)
Data Access Layer: Class library (assembly)

Mitt presentationslager känner till min business komponent och min business komponent använder sedan mitt Data Access Layer. Det här är kanske helt fel sätt att tänka?

Medlem sedan jan. 20012 204 inlägg
#4

Har byggt en egen ORmapper, fungerar väl hyffsat, bygger ut den när det behövs. Skicka ett mess om du vill ha källkoden att kolla på.

Försöker alltid dela upp det så mycket som möjligt så om jag någon gång i framtiden t.ex ska byta från "winforms" till "webforms" så ska det fungera. Tycker det låter bra som du skriver, fråga Gladh han har koll på sånna grejer!

Medlem sedan jan. 20023 327 inlägg
#5

Det vore absolut intressant att se hur du byggt upp din ORmapper även om jag bara befinner mig i startgroparna och fortfarande har mycket att lära mig om .net. Skickar dig ett pm senare idag. :)

Sedan får jag hoppas att Gladh får syn på denna tråden eller någon annan som har bra kolla på dessa saker.

Medlem sedan maj 20012 812 inlägg
#6

Jodå jag ser...

Och funderar på om jag skall blanda mig in i disskutionen, det är hyfsat svårt att ta en arkitektur via ett forum, man behöver en whiteborad (request till utvecklarna :) ).

Din arkitektur bör återspegla det behov du har. Och det med utgångspunkt i, utvecklingstid, prestanda, underhåll samt vilken arkitekturmönster som man valt att använda som grund. Alla dessa premisser ger dig sedan en arkitektur att använda.

Själv så håller jag på med serviceorienterade arkitektur och det skiljer sig lite mot OO. Man kan använda OO inne i sina services, men interfacet mot SOA skiljer sig mot OO genom att man använder messages/entiter istället för BO.

jag tycker din uppdelning ser bra ut, det finns givetviss saker att ändra beroend på vad som är viktigt för dig, är det viktigt att man skall kunna ha "plug-and-play" i drift, eller är prestanda viktigt för dig, eller kanske utvecklingshastigheten eller är det möjligheten att kunna gå in och underhålla samt bygga ut ditt system senare. Alla dessa premisser kommer tyvärr att ta ut varandra lite och därför kommer vinst på ett område påverka negativt på ett annat. Men som en gyllene medelväg så tycker jag att din uppdelning är bra, även om jag nog skulle rekomendera dig att använda en ORMapper istället för skriva alla Business Data Access lager själv...

- M

Medlem sedan jan. 20023 327 inlägg
#7

Man får tacka för det informativa svaret. Hela syftet med mitt projekt är att fördjupa mina kunskaper i .net och tillämpa dessa på en lagerbaserad arkitektur. Mitt sikte är inställt att jobba med något liknande, vill minnas att det kallas "affärssystem", när jag avslutat mina studier.

Vet inte riktigt vad jag har mer att tillägga, men det känns hur som helst skönt att jag inte fått all om bakfoten. Litteratur-tips inom dessa områden böcker/msdn osv emottages mer än gärna :)

Medlem sedan dec. 19996 522 inlägg
#8

Compusa, du kan kolla på open source OR/Mappern Hibernate för java som nu finns som stabil .net version NHibernate, personligen tycker jag det ser mycket intressant ut. Det man kan göra är att kolla på många exempel från både sun och microsoft, starterkits, pet-shot etc, även om .net petshopen är lite underlig på sina ställen. En annan sak man kan göra är att kolla på Enterprise Application Block som tillhandahålls av teamet bakom .Net om man vill ha bra uppslag / best practice. Läsa böcker om patterns, gillar personligen Patterns of Enterprise Application Architecture av Addison Wesley.

Just affärstjänster tenderar till att bli mer SOA-orienterade och MSDN har mycket läsvärt om det.

/Red
Titta in Dinos blogg kan också gå bra uppslag
http://weblogs.asp.net/despos

Medlem sedan jan. 20023 327 inlägg
#9

Tack för ditt svar och länken erka. Har ägnat en hel del tid åt att kolla lite open-source applikationer. Det jag kommer att börja med i mitt lilla projekt är att bygga mitt DAL och jag kommer fördmodligen att vänta med OR/Mappern tills jag har lärt mig det andra. Blir lätt lite mycket på en gång annars ;)

Har funderat lite på hur jag ska bygga mitt DAL. Ett populärt tillvägagångssätt verkar vara att bygga en generell DAL som sedan business data access layer ärver ifrån. Detta verkar vara ett ganska smidigt sätt, dock så blir ju bdl ganska så mycket knutet till dalet och man kan behöva ändra sitt bdl vid byte av databas.

Har läst lite om design patterns och tycker det känns som en abstract factory skulle passa ganska bra till min lösning. En tanke är att ha en abstrakt DalFactory som implementeras av DalFactoryMySQL, DalFactoryMSSQL osv. Dessa factories kan sedan skapa mina Business Data Access Layers som implementerar ett gemensamt interface, dvs ett BDL för varje factory... Hittade en variant som verkar fungera som jag tänkt mig. Bilden nedan som kanske förklarar detta lite bättre:
http://www.xisc.com/wiki/index.php/Image:Petshop_DAO.gif

Vad tror ni om denna lösningen kontra den jag nämde först? Fördelen som jag ser det att ha olika implementationer av mina BDL är att jag enkelt kan byta tillbaka till en annan databas...

Nåja, hoppas jag inte skrämde bort er och jag läser gärna om hur ni löser det :)

285 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
131 ms — deklarationer (db)
0 ms — hämta statistik (cache)
151 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)