Har tittat en del på kodgeneratorer för olika arkitekturgrunder (eller vad man ska kalla det) som skapar klasser utifrån en databas, men jag har lite svårt att se vilken som kan fungera bäst. Vi ska bygga ett lite större webbprojekt och vill vara säkra på att det kommer fungera någorlunda i framtiden oxå. De jag sett som kan vara nåt är: Jag har använt Ideablades DevForce Express (gratisversion) med bra resultat, även i en skarp applikation levererad till kund. Klart du ska köra NPersist ;-) tack så väldigt mycket för all den informationen roger, ser väl ut som jag ska kika närmare på NP och NH och se lite vad som kan passa oss bäst. Bara nu inte NP stannar i utvecklingen när ni sitter fast i WoW, hehe. NetTiers med CodeSmith är ju nästan där. Där får du ju allt från grunden till det administrativa gränssnittet färdigt. >>Roger: använder sig NP av stored procedures eller? >>Snart kommer OneClickSystemCreator.NET >>Hur ser det ut med nån kodgenerator för NPersist? Eller får man skapa en själv? hm ... <b>EntitySpaces ($79, stöd för LINQ vilket verkar komma i .NET3.0) </b> Det är ju lite det som jag egentligen är ute efter, jag vill hålla det så enkelt som möjligt. Men jag har lite svårt att hitta bra information om vad man bör tänka på och hur man ska lösa vissa saker. Tex så har jag fastnat vid hur man ska implementera en typ av Identitymap för att slippa ladda hela objekthierarkin. Nån som har bra information? om man är ute efter enklast möjliga lösning med bara CRUD för objekt så ser jag ingen anledning att göra något alls.. då kan du lika gärna använda datasets. bara för ren information. Hur är Wilson o/rmapper jämfört med de tidigare nämnda lösningarna? Efter en hel del undersökning av ovan nämnda lösningar så kommer jag nog köra med entityspaces. Ärligt talat så var det den enda som jag fick att funka i en vb.net-version, och det riktigt bra. Intressant, vad hände med .netTiers som jag var lite nyfiken på..? :) Tittade på nettiers med Codesmith i början men blev lite avskräckt i testet då den skapade upp hela arkitekturen och till och med skapade ett admingränssnitt. Kändes som att det blev alldeles för mycket kod att kolla igenom och förstå funktionen i. Det går väl antagligen att skapa enklare arkitektur med det också men det blev bara inte av att jag lade ner mer tid på det.Val av arkitekturgrund
NPersist (svensk gratis)
doodads (gratis, MyGeneration)
NHibernate (gratis tror jag)
Microsoft DAAB (gratis med Mygeneration)
EntitySpaces ($79, stöd för LINQ vilket verkar komma i .NET3.0)
LLBLGenPro ($229 dyr bra?)
Är det nån som kan sålla lite bland dessa och ge förslag på vad som funkar bra och som ser ut att hålla i sig framöver också?Sv: Val av arkitekturgrund
Du hittar info om den här http://www.ideablade.com. Du hittar den under downloads och under menyn Products\Videos för mer info. Det följer med bra "Quick Start tutorials" och dokumentation när du laddar hem DevForce Express.
titta även på deras lite mer omfattande exempelapplikation med bra lösningar och arkitektur http://www.ideablade.com/Funhouse/Funhouse.html
Här finns ett fristående supportforum http://www.ibrunner.comSv: Val av arkitekturgrund
men ok , för att inte vara så partisk:
NPersist (svensk gratis)
+ POCO klasser
+ mer OODB tänk än de andra
+ opensource
+ stöd för Linq i 3.0
+ inbyggt stöd för AOP
+ DSL för frågor (NPath)
+ inverse management (synk mellan master detail proppar)
- Långsammare än de andra på _vissa_ operationer pga skillnad i funktionallitet
- mycket mindre community än NHibby (och jag och Mats sitter fast i WoW just nu ;) )
- ganska lite docs
doodads (gratis, MyGeneration)
- crap , dålig design och inkompetent mapper (iaf sist jag kollade)
NHibernate (gratis tror jag)
+ POCO klasser
+ extremt stor community
+ bra dokumentation
+ opensource
+ DSL för frågor (HQL)
- lite mer som en wrapper över sql än vad jag gillar (inte så automatisk i sina beslut)
- ingen inverse management (synkling mellan master detail properties)
Microsoft DAAB (gratis med Mygeneration)
- crap , tunn wrapper över sql
EntitySpaces ($79, stöd för LINQ vilket verkar komma i .NET3.0)
* vet ej
LLBLGenPro ($229 dyr bra?)
+ stor community och bra support av tillverkaren
+ skitbra stöd för att bygga vyer och hantera stored procs
+ bra docs
+ stöd för pocket pc etc
- extremt kladdig kodgenerering , ej möjligt att underhålla koden för hand.. beroende av verktyget
- object query pattern , är kanske en smaksak , jag avskyr det iaf ... 50 rader för att bygga en enkel fråga
jag älskade LLBL gen när jag testade den men det hela föll på just kodgenereringen , koden var omöjlig att hunderhålla / felsöka för hand. (vi pratar tusentals rader kod som genererats)
stödet för att ställa frågor var förvisso typsäkert men på tok för bökigt och svårt.
ett framework ska underlätta en uppgift , inte göra den 100ggr svårare än det var innan..
NHibby är garanterat den största och mest använda av allihopa.
många älskar den , dock var den för manuell för min smak (man måste själv hantera synkning av properties och tala om vad som ska insertas o uppdateras)
koden för mappade klasser är poco och går lätt att skriva och underhålla för hand..
NPersist delutvecklar jag med Mats Helander så jag är väl kanske smygpartisk här ;)
hur som , NP och NH är väldigt lika men samtidigt olika.
NP försöker agera mer som en objektdatabas och sköter all synkning av properties och vad som ska insertas och uppdateras etc , men till kostnaden av prestanda på vissa saker.
//RogerSv:Val av arkitekturgrund
Hur ser det ut med nån kodgenerator för NPersist? Eller får man skapa en själv?Sv:Val av arkitekturgrund
Roger: använder sig NP av stored procedures eller?Sv: Val av arkitekturgrund
nope, NP kör bara med sql generering, dvs optimerade frågor för det den behöver utföra.
(för de som lever i SP > ad hoc världen fortfarande : http://www.tonymarston.net/php-mysql/stored-procedures-are-evil.html)Sv:Val av arkitekturgrund
>>We are doomed =)
det är absolut inte det det handlar om ;-)
i ORM fallet handlar det om att du vill ha din logik och biz regler i den objektorienterade miljö du faktiskt hålls i.
vi bygger ju allt annat objektorienterat så varför skulle applikationens viktigaste del inte byggas objektorienterat?
det är allt det handlar om... ORMappern är bara ett verktyg för att göra det möjligt..
inte att hux flux spotta ut ett systemSv: Val av arkitekturgrund
vi har:
http://www.objectmapper.com/Screens/Default.aspx
den funkar för NP , NH och Borlands Eco.
//RogerSv:Val av arkitekturgrund
" jag för för gammal för att lära mig göra rätt så jag hittar på en massa argument för att slippa"
lite tunnt i min eh ad hoc värld dåråSv: Val av arkitekturgrund
Möjligtvis .NET 4.0 men inte i .NET 3.0.
Om du inte vill göra det allt för komplicerat så kan du alltid bygga ditt eget, det tar inte mer än några dagar att bygga antingen en ORMapper som hämtar och spara data till databasen, utan alla krusiduller. Du får funktionerna SELECT/INSERT/UPDATE/DELETE, att skapa en enklare Joinfunktion tar inte många timmar. Så har du inga större krav så kan du bygga en själv. Tyvärr brukar de inte bli bra förren version 3-4 (man lär ju sig saker hela tiden).
Fördelen är att du kan ändra koden hur du vill, samt att det är lärande. Nackdel: varför lägga tid på något som är gratis, samt så mycket bättre....
Skriv din egen Databas scripter, alltså istället för att använda ORMapper så skapar du speciella CRUD-classer för alla din tabeller. Detta bör inte heller ta mer än några dagar.
Fördelen: Det är lärande. Nackdelar: varför lägga tid på något som redan finns och garanterat mycket bättre än det du kan skapa.
Tyvärr kan jag inte hjälpa dig i din fråga, då jag byggt min egen ORMapper, mest för att lära mig, men framför allt för att jag kan implementerar de behov jag skulle få framöver. Den är dock inte på långa väg så komplett som många andra är, då den mest består av INSERT/DELETE/UPDATE/SELECT funktionallitet.
- MSv:Val av arkitekturgrund
Sv: Val av arkitekturgrund
den stora fördelen med ORM är att du kan ha stöd för arv i dina entiter, lazy load , m-m relationer etc.
att bygga en ORMapper utan denna funktionallitet är rätt meningslöst.
hur som , det låter som det är lazy load du vill få till?
för att lösa lazy load så måste du på ett eller annat sätt tvinga in kod som hanterar detta i dina properties.
denna kod kan handknackas , genereras eller injectas i runtime (som NP gör)
för att detta ska fungera så krävs att du har någon form av context/session/workspace/manager som är gemensam för dina objekt , så att objektet som triggar en lazy load kan be sitt context att hämta ett visst objekt.
det är där IDmappen kommer in , idmappen är inget magiskt alls utan oftast bara en hashtabell som associerar ett ID med ett visst objekt.
finns ID't inte i hashen så försöker man hämta objektet från DB och sedan inserta i IDmappen och därefter assigna objektet till den lazy loadade propertyn.
lättaste sättet att garantera att ID mappen aldrig havererar är att tvinga skapande av objekt via ett context.
tex:
Customer cust = context.CreateObject < Customer > ();
eller
Customer cust = context.GetObject < Customer > (123);
på så sätt överlåter man allt skapande och återanvändande av objekt till sitt context.
//RogerSv:Val av arkitekturgrund
Sv: Val av arkitekturgrund
Kan väl medge att jag inte gav de andra allt för mycket tid efter jag inte fått ett enkelt grundtest att funka.
NPersist
Använda objectmapper för att skapa objekt på de klasser men när jag sedan öppnade dem så hade jag ca 40 fel i varje fil, minst. Referenser som inte pekade på rätt, konstigt skapade generics och lite annat gjorde att jag gav upp efter ett par timmars redigerande för att försöka få filerna rätt. Verkade fungera utan problem i c#-versionen men jag vill ha vb.
NHibernate
Hittade ingen bra kodgenerator för vb. Allt ska tydligen vara c# nu vilket jag inte riktigt fattar då vb är mycket enklare att fatta genom att bara läsa koden. Kunde använt objectmapper som är till npersist men struntade i det efter problemen med npersist.
wilson ormapper
använda medföljande orhelper för att skapa vb-klasserna men fick nåt konstigt fel med initieringen av managern, försökte hitta kod eller lösning på problemet men utan resultat. Kunde inte posta fråga i forumet.
entityspaces
laddade ner testversion som har kodgenerator till mygeneration som jag jobbat en del med, bra. de hade även en fin film på deras hemsida som visade hur man enkelt satte upp ett hemsideprojekt och gjorde en enkel listning, mycket bra och enkelt. altt gjort på väldigt kort stund och funkade utan problem. Utförde testet som jag hade som krav i funktionaliteten och det funkade klockrent. Enda nackdelen är att det inte är gratis men det kostar ju inte mer än $79 att köpa in.
Nu kanske ni tycker att jag är trög som inte fattar hur man sätter upp de andra nämnda systemen och så må det vara ;), men jag har ändå en del erfarenhet av .net och skulle inte kalla mig nybörjare. Detta är dock en ny värld för mig men jag hade ju föredragit lite lägre ingångsnivå på systemen med bra snabbstartsexempel på BÅDE c# och vb samt för asp.net oxå (många hade bara för winforms). Trots tydligt kompetenta gratisvarianter så måste jag nog säga att man får vad man betalar för och för $79 så kan jag inte ägna lång stund (vilket jag gjort iofs) för att sätta mig in i hur man ska få de andra att överhuvudtaget funka.Sv:Val av arkitekturgrund
Sv: Val av arkitekturgrund