Hjälp strukturera budgetapplikation C#

Permalänk
Medlem

Hjälp strukturera budgetapplikation C#

Hej på er!

Jag avslutade min YT-utbildning som .NET-utvecklare för några veckor sedan och tänkte göra mig en enkel C#-applikation för att hålla koll på min ekonomi för att "hålla igång". Jag vet att det finns program för detta redan, typ GnuCash, men de är alltför avancerade för mina behov.

Tanken är en applikation med grafiskt gränssnitt där man kan bokföra inkomster och utgifter, tänk budgettavla a la Lyxfällan.

Krav:

  1. Kunna skapa kategorier med underkategorier i upp till 2 nivåer. Typ Utgift->Streamingtjänster->Netflix och Inkomst->Lön

  2. Varje kategori ska ha oändligt antal poster (inkomster/utgifter)

  3. All data ska sparas i lokal fil

I gränssnittet kommer jag sedan ha summering osv osv...

Jag har jobbat lite med lokala filer tidigare, men inte alls på denna nivån och det var längesedan och är osäker på hur jag ska strukturera filen.
Vilket filformat är bäst? (txt? csv? annat?)
Hur ska jag strukturera datan i denna fil på bästa sätt?
Finns det någon best practice kring hur man separerar datan?
osv osv

Lite luddigt foruminlägg detta kanske, men jag uppskattar all hjälp och insikter jag kan få.

Väl mött!

Visa signatur

» AMD Ryzen 5 2600X » 16 Gb DDR4 » ASUS GTX 1060 6 Gb OC » 1 Tb M.2 PCIe NVME

Vänligen citera om du pratar med mig

Permalänk
Medlem

Jag skulle spara datan antingen i Excel eller i en lokal databas. Gärna i en databas med möjlighet till export till Excel. Inte för att det behövs utan för att det är en väldigt bra övning. (Ganska enkelt/lite kod också med andras bibliotek)

Sen skulle jag spara inställningar i en json eller xml-fil. Att hantera båda dessa ses som grundläggande krav av många. Så också en bra övning.

Till sist skulle jag nog göra det som en webbaplikation för att öva på att separera UI från "affärslogik".

Lycka till

Visa signatur

Processor: Motorola 68000 | Klockfrekvens: 7,09 Mhz (PAL) | Minne: 256 kB ROM / 512 kB RAM | Bussbredd: 24 bit | Joystick: Tac2 | Operativsystem: Amiga OS 1.3

Permalänk
Medlem

Det finns två saker du kan titta på för att minimera mängden kod: ”Data binding” mot gränssnittet och ”serialization/deserialization” mot JSON- eller XML-fil.

I bägge fallen bygger du en klasshierarki som håller din data. Beroende på tycke och smak kan det vara exakt samma klasser, eller separerade (vymodell respektive modell) för de olika syftena.

Data binding ser lite olika ut beroende på vilket ramverk du väljer för ditt gränssnitt, men går ut på att du deklarativt binder en property i din klass mot en kontroll i gränssnittet. String mot TextBox, bool mot CheckBox osv. Ramverket tar sedan automatiskt hand om att ändra värdet i objekthierarkin när användaren ändrar i gränssnittet. Det fungerar åt andra hållet också, så om koden ändrar i datan dyker det direkt upp i gränssnittet utan att du behöver skriva (explicit) kod för att uppdatera respektive kontroll. På högre nivå grupperar man kontroller så att varje grupp (UserControl eller liknande) tar hand om ett helt objekt. Gränssnittet byggs upp av en hierarki av UserControls, en spegelbild av din bakomliggande klasshierarki.

Huvudkandidaterna för ramverk är antagligen Windows Forms, WPF och MAUI, men det finns fler alternativ. Dessa tre stödjer data binding, i de två senare är man i princip tvingad att använda det.

Serialisering till JSON eller XML tar typ tre rader kod. Vid serialisering pekar du på toppobjektet i din klasshierarki och vilken fil det ska till, sedan sparas datan dit. Deserialisering gör motsvarande, du säger vilken Type klassen i filen är av och vilken fil som ska läsas, så får du ett objekt med alla refererade objekt. Man klarar sig ofta väldigt långt med referenser till objekt och referenser till listor av objekt, vilket är trivialt att serialisera/deserialisera. Om man behöver använda mer avancerade datastrukturer, typ Dictionary<K, V>, så kan det bli problem i vissa fall.

Permalänk
Medlem

Hej och ursäkta för sent svar!

Borde nämnt det i första inlägget, men jag hade en tanke på att göra en app i MAUI då jag aldrig gjort det innan men tycker det verkar spännande.
Så jag har börjat kika på fundamentals, controllers osv.

Skrivet av talonmas:

Men JSON är jag bekant med då jag gjort flera backends innan, så det låter som en väg att gå.
En webbapplikation blir det inte i nuläget, jag vill prova göra en app först till windows, och sen ev ge mig på iOS och Android.

Skrivet av KAD:

(De)Serialisering av JSON har jag jobbat med tidigare, men enkla payloads.

Jag är lite osäker på hur jag ska bygga upp min JSON i det här, speciellt när det kommer till category, eftersom de även ska kunna ha underkategori. Jag hade en idé att köra en split(":") på category för att separera (under)kategorierna, men det kanske finns enklare sätt?

Sen vet jag inte hur jag ska bygga upp logiken till summan heller, att den automatiskt ska hantera en utgift som en minuspost eller om man ska behöva skriva ett minustecken i amount.
Tanken är att Utgift och Inkomst ska vara statiska, men användaren ska själv kunna skapa underkategorier till dessa. Fast vid närmare eftertanke kanske det ska finnas en till statisk kategori; Sparande.

Problemet med en bra idé är att det blir mycket jobb...

Skulle något i denna stil funka som modell?

[ { "date":"2022-08-11", "category":"Utgift:Prenumeration:Google", "vendor":"Google Inc", "amount":"-262,37", "comment":"Årsavgift Google Drive." } ]

Visa signatur

» AMD Ryzen 5 2600X » 16 Gb DDR4 » ASUS GTX 1060 6 Gb OC » 1 Tb M.2 PCIe NVME

Vänligen citera om du pratar med mig

Permalänk
Medlem
Skrivet av Bebben:

Hej och ursäkta för sent svar!

Borde nämnt det i första inlägget, men jag hade en tanke på att göra en app i MAUI då jag aldrig gjort det innan men tycker det verkar spännande.
Så jag har börjat kika på fundamentals, controllers osv.

Men JSON är jag bekant med då jag gjort flera backends innan, så det låter som en väg att gå.
En webbapplikation blir det inte i nuläget, jag vill prova göra en app först till windows, och sen ev ge mig på iOS och Android.

(De)Serialisering av JSON har jag jobbat med tidigare, men enkla payloads.

Jag är lite osäker på hur jag ska bygga upp min JSON i det här, speciellt när det kommer till category, eftersom de även ska kunna ha underkategori. Jag hade en idé att köra en split(":") på category för att separera (under)kategorierna, men det kanske finns enklare sätt?

Sen vet jag inte hur jag ska bygga upp logiken till summan heller, att den automatiskt ska hantera en utgift som en minuspost eller om man ska behöva skriva ett minustecken i amount.
Tanken är att Utgift och Inkomst ska vara statiska, men användaren ska själv kunna skapa underkategorier till dessa. Fast vid närmare eftertanke kanske det ska finnas en till statisk kategori; Sparande.

Problemet med en bra idé är att det blir mycket jobb...

Skulle något i denna stil funka som modell?

[ { "date":"2022-08-11", "category":"Utgift:Prenumeration:Google", "vendor":"Google Inc", "amount":"-262,37", "comment":"Årsavgift Google Drive." } ]

Du behöver Id, kategorierna kan vara en egen enum med id för att lättare hålla koll på och sortera eller ännu hellre bryt ut typ av utgift och tjänst. Summan behöver räcker det med att kolla av mot en utgift/inkomst prop om det ska gå på minus eller plus om du behöver det. Tror du behöver göra en ritning över databasstrukturen och vad dina modeller faktiskt behöver för att appen ska funka bra.

Permalänk
Avstängd

Om syftet är att doppa tårna i något du kanske kommer jobba med i framtiden är excel-export absolut bra. Internt en databas dock, SQL funkar ju men det är ingen som gör det manuellt längre så då är det väl bättre att försöka fatta EF eller liknande ORM. Eller så kör du på något mer "hett" som MongoDB eller så, vilket inte matchar perfekt för ditt användningsområde men som används väldigt mycket "ute i verkligheten". Är tanken att jobba med liknande saker, alltså typ affärsapplikationer eller så, så är det ju web som gäller idag. Varför inte försöka på att bygga en micro-service-applikation i Kubernetes eller Docker med ett webbgränssnitt?

Det kan vara färgat av att det är vad jag jobbar med, men det verkar också vara standard bland alla företag som tjatar om att rekrytera mig nästan oavsett vad de pysslar med, och även bland mina bekanta, före detta kollegor och så.

Permalänk
Medlem
Skrivet av snajk:

Om syftet är att doppa tårna i något du kanske kommer jobba med i framtiden är excel-export absolut bra. Internt en databas dock, SQL funkar ju men det är ingen som gör det manuellt längre så då är det väl bättre att försöka fatta EF eller liknande ORM. Eller så kör du på något mer "hett" som MongoDB eller så, vilket inte matchar perfekt för ditt användningsområde men som används väldigt mycket "ute i verkligheten". Är tanken att jobba med liknande saker, alltså typ affärsapplikationer eller så, så är det ju web som gäller idag. Varför inte försöka på att bygga en micro-service-applikation i Kubernetes eller Docker med ett webbgränssnitt?

Det kan vara färgat av att det är vad jag jobbar med, men det verkar också vara standard bland alla företag som tjatar om att rekrytera mig nästan oavsett vad de pysslar med, och även bland mina bekanta, före detta kollegor och så.

Används verkligen Mongo så mycket? Trodde mest det var en "MERN"-hipstergrej. SQL är ju i alla fall betydligt mer förekommande, särskilt inom .NET vad jag förstått.

Permalänk
Avstängd
Skrivet av ChrisDev:

Används verkligen Mongo så mycket? Trodde mest det var en "MERN"-hipstergrej. SQL är ju i alla fall betydligt mer förekommande, särskilt inom .NET vad jag förstått.

Tja, man får ju fundera på funktionen databasen ska användas för förstås, men för många saker är dokumentbaserad NoSQL en bättre fit än SQL. Applikationen jag jobbar med exempelvis använder Mongo i alla utom en service men även den ska ju över dit inom kort. Dock kommer vi ändå behöva en SQL-instans för en tredjepartsprodukt som vi inte verkar kunna få bort, och vars ägare drar fötterna efter sig med att komma in i 2000-talet, inte så mycket på grund av databasvalet specifikt utan i allmänhet.

Hur mycket det används i verkligheten är förstås svårt att svara på. Jag läser inte jobbannonser i någon större utsträckning men jag har rekryterare som hör av sig hela tiden och i vad de skickar så är Mongo väldigt vanligt, SQL också visserligen. Men på min LinkedIn (vilket är vägen rekryterare hittar mig) så står det att jag har stora kunskaper inom SQL (vilket är helt sant) men Mongo nämns inte för jag har inte uppdaterat min LinkedIn på ganska länge då jag inte letar nytt jobb, ändå är de förfrågningar jag får ungefär likvärdigt fördelade mellan dem.

Samtidigt är ju databaser rätt bortabstraherade idag i allmänhet. Jag skapade en ny service till vår produkt förra veckan exempelvis och jag rörde inte, eller ens tittade på, databasen förrän jag var "klar" med CRUD-grejer och testade. Jag använde ett internt och helt generellt nuget-paket så allt jag behövde göra i min service var att lägga till en specifik dbcontext med en handfull rader kod så genererades allt åt mig inklusive index och så. Hade det varit SQL så hade det ju varit ungefär samma effort och ungefär samma saker jag hade behövt göra.

Permalänk
Medlem
Skrivet av snajk:

Om syftet är att doppa tårna i något du kanske kommer jobba med i framtiden är excel-export absolut bra. Internt en databas dock, SQL funkar ju men det är ingen som gör det manuellt längre så då är det väl bättre att försöka fatta EF eller liknande ORM. Eller så kör du på något mer "hett" som MongoDB eller så, vilket inte matchar perfekt för ditt användningsområde men som används väldigt mycket "ute i verkligheten". Är tanken att jobba med liknande saker, alltså typ affärsapplikationer eller så, så är det ju web som gäller idag. Varför inte försöka på att bygga en micro-service-applikation i Kubernetes eller Docker med ett webbgränssnitt?

Det kan vara färgat av att det är vad jag jobbar med, men det verkar också vara standard bland alla företag som tjatar om att rekrytera mig nästan oavsett vad de pysslar med, och även bland mina bekanta, före detta kollegor och så.

Kom gärna förbi min arbetsplats och säg det. Vi gör nästan alla projekt med Dapper och skriver SQL, EF är avskytt, jag hade älskat att få använda EF. Sen har vi ju härliga legacy databaser från 90 talet med typ 500 stored procedures

Däremot har jag fått mersmak för CosmosDb som vi kört i två stora system nu med bra resultat.

MongoDb har jag aldrig använt. Känns som det är hippt bland fullstack React-ninjor som gör todo app tutorials på youtube

Permalänk
Medlem
Skrivet av zaibuf:

Kom gärna förbi min arbetsplats och säg det. Vi gör nästan alla projekt med Dapper och skriver SQL, EF är avskytt, jag hade älskat att få använda EF. Sen har vi ju härliga legacy databaser från 90 talet med typ 500 stored procedures

Däremot har jag fått mersmak för CosmosDb som vi kört i två stora system nu med bra resultat.

MongoDb har jag aldrig använt. Känns som det är hippt bland fullstack React-ninjor som gör todo app tutorials på youtube

Lite nyfiken, är EF avskytt pga performance? Ska stydligen vara en rejäl performance-förbättring i EF 7 iaf, och även för LINQ nu i .NET 7.

Permalänk
Medlem
Skrivet av ChrisDev:

Lite nyfiken, är EF avskytt pga performance? Ska stydligen vara en rejäl performance-förbättring i EF 7 iaf, och även för LINQ nu i .NET 7.

Detta är mina spekulationer, jag tror det främst är för många av dessa utvecklare jobbat med SQL i 15+ år och har erfarenhet av EF som fanns till .NET Framework som inte alls är samma som den vi har idag. Sen ogillar vissa att inte ha kontrollen över exakt vilken sql som körs. Det sker mycket magi och om du inte vet vad du gör kan du enkelt råka skriva dåliga queries.

Men vår arkitekt förespråkar EF så jag tror det kommer bli vår nya standard för nya projekt. Förvaltningmässigt är det enklare för utvecklare att skriva LINQ.

Permalänk
Avstängd
Skrivet av zaibuf:

Kom gärna förbi min arbetsplats och säg det. Vi gör nästan alla projekt med Dapper och skriver SQL, EF är avskytt, jag hade älskat att få använda EF. Sen har vi ju härliga legacy databaser från 90 talet med typ 500 stored procedures

Däremot har jag fått mersmak för CosmosDb som vi kört i två stora system nu med bra resultat.

MongoDb har jag aldrig använt. Känns som det är hippt bland fullstack React-ninjor som gör todo app tutorials på youtube

Förlåt, jag skulle sagt; "..ingen som gör det manuellt längre i en applikation byggd detta årtusende..."

Jag jobbade typ så på mitt förra jobb också, all logik i databasen, manuellt skriven, och en hel del äldre kollegor som var misstänksamma mot allt som börjar närma sig modernt (inte bara tekniker utan också allt "agilt", code reviews och så vidare), men även de behövde ju komma in i nutiden så när jag jobbade där påbörjade de en helt ny applikation hostad i molnet med moderna tekniker och så. Det fanns förstås ett antal olika saker som motiverade det, men förutom tekniska aspekter så handlade det ju också om att kunna locka till sig, och behålla, utvecklare.

Jag säger inte att det nödvändigtvis är fel att satsa på något gammalt, men SQL är inte så gammalt att det är eftertraktat och ger bra betalt nu, då är det bättre att satsa på Cobol eller liknande. Jag vet inte om SQL kommer att bli en sådan efterfrågad kompetens om tio år eller så när de som byggde systemen gått i pension eller blivit chefer, men som jag ser det är det mindre sannolikt än dagens gamla men välbetalda skit. Cobol är exempelvis efterfrågat idag för att många gamla men kritiska system är beroende av det i delar som ingen vill (eller kan eller vågar) göra om, många gamla banksystem och så men också system för industriell produktion och liknande. SQL kan förstås finnas i massvis av gamla system, men det är normalt inte samma problem att byta ut det eller modernisera.

Angående hur populärt MongoDB är så redogör jag bara för mina erfarenheter och de säger mig att det är eftertraktat och används mycket. Det är förstås bara min uppfattning dock, men kollar man på exempelvis Stack Overflow's årliga utvecklarundersökning så ligger det hyfsat högt där också.

Cosmos DB är absolut intressant, men innebär inlåsning till Azure således går det bort för oss.

Permalänk
Medlem
Skrivet av snajk:

Förlåt, jag skulle sagt; "..ingen som gör det manuellt längre i en applikation byggd detta årtusende..."

Säg inte det. Jag hoppade in i ett system byggt i år, de kör SQL och stringbuilder för att slå ihop queries. Är som att resa tillbaka 20 år i tiden. Fick skriva om en VB app till .NET core för några år sedan, där var det iofs ADO men det var också stringbuilders med sql strängar i koden. Vem som vill jobba sådär förstår jag inte, jag satt i 30 min och felsökte en query där jag tillslut såg att jag hade stavat fel på en kolumn (som bytt namn) mitt i hela den där härvan.

Citat:

Cosmos DB är absolut intressant, men innebär inlåsning till Azure således går det bort för oss

Jag är inte så orolig för det. Du kan alltid plocka ut datan då allt är json, sen trycka in i någon annan nosql, så länge ditt datalager är abstraherat. Däremot alla andra tjänster vi använder som apim, functions, service bus och event grid är svårare att byta.

Permalänk
Medlem

I skolan gjorde vi ett halvstort projekt som krävde en del tabeller/relationer etc, de som körde Mongo fick slänga in något lib som i princip "fejkade" relations-db osv så att de kunde få ihop det. En klasskamrat som började LIA och nämnde att han körde en del Mongo blev i princip hånad. "Det är ju ingen som använder det på riktigt" sa de tydligen.

Båda dessa typer av databaser har väl sin plats antar jag men de allra flesta verkar ju trots allt köra SQL.

Har man suttit länge med vissa tekniker kommer man bli mätt och lockas av nya (åtminstone nya för en själv) grejer och efter ett tag blir man mätt och sen börjar det om.

Permalänk

Angående databaser så finns det plats för flera.
Vi har MSSQL som bas, men använder Cosmos DB eller Mongo DB (Atlas) eller Elasticsearch) när det finns behov.

Och vi har flera applikationer som använder både Dapper och EF i samma app.
Dapper fungerar perfekt då vi behöver stöd for flera typer av databaser (DB2, Oracle, MSSQL,..) i samma applikation.

Men från ett applikations/solution arkitekt perspektiv, så föredrar vi EF (Entity Framework) då vi ser att TCO (total cost of ownership) är lägre för system som använder EF.
Vi har också sett att EF blir bättre för varje version och många gånger är bättre än en att försöka att skapa en egen ORM/repository.

Ang. EF.
Som nackdel så krävs det att utvecklare förstår hur EF fungerar. Annars kan det bli helt fel, även om det blivit mycket bättre i senare versioner av EF. (Note: logga ut alla SQL kommandon och se vad som faktiskt görs).

Oavsett om du använder EF, ADO.NET, MongoDB etc., så måste du fortfarande sätta rätt index, 'isolation', partition, och hints för hög-presterande system.

Permalänk
Avstängd
Skrivet av zaibuf:

Säg inte det. Jag hoppade in i ett system byggt i år, de kör SQL och stringbuilder för att slå ihop queries. Är som att resa tillbaka 20 år i tiden. Fick skriva om en VB app till .NET core för några år sedan, där var det iofs ADO men det var också stringbuilders med sql strängar i koden. Vem som vill jobba sådär förstår jag inte, jag satt i 30 min och felsökte en query där jag tillslut såg att jag hade stavat fel på en kolumn (som bytt namn) mitt i hela den där härvan.

Jag känner absolut igen mig. På mitt förra jobb fanns det en hel del "dynamisk SQL" som kördes i SP's och så, alltså SQL i en VARCHAR-variabel som kördes "från" SQL. Det var ett sätt att få in variabler på ställen där SQL normalt inte stöder det, som tabellnamn i en SP, men de använde också det för att öka motståndskraften mot SQL injection, men för mig kändes det sjukt gammaldags och det tog ju bort mycket möjligheter som debugging eller execution plans för de "dynamiska" bitarna.

Men den applikationen var byggd på gammal skit som sagt. Jag genomförde en del förbättringar genom att byta ut extremt invecklade saker till "nymodigheter" som kom i SQL 2002 eller liknande. Exempelvis en cursor i en cursor i en cursor som jag bytte ut till en setbased operation och fick ner en del av en nattkörning från flera timmar till några minuter. Ögonen ramlade nästan ur skallen på mina 60+ kollegor som började med hålkort liksom.

Citat:

Jag är inte så orolig för det. Du kan alltid plocka ut datan då allt är json, sen trycka in i någon annan nosql, så länge ditt datalager är abstraherat. Däremot alla andra tjänster vi använder som apim, functions, service bus och event grid är svårare att byta.

Jo men det beror mycket på vad man bygger för något. Även om vi använder Azure mycket och vill hosta där så vill många av våra kunder ha en lokal installation exempelvis, således räcker det inte att det finns en möjlighet att byta ut det utan vi behöver en lösning som fungerar både lokalt och i "molnet".

Skrivet av ChrisDev:

I skolan gjorde vi ett halvstort projekt som krävde en del tabeller/relationer etc, de som körde Mongo fick slänga in något lib som i princip "fejkade" relations-db osv så att de kunde få ihop det. En klasskamrat som började LIA och nämnde att han körde en del Mongo blev i princip hånad. "Det är ju ingen som använder det på riktigt" sa de tydligen.

Jag vet inte, min erfarenhet av lärarna på sådana här utbildningar, och kanske än mer på universitetet, är att de inte riktigt hänger med i branschens trender. Vilket inte är så konstigt kanske med tanke på hur fort det går, men det är väl därför många utbildningar försöker hålla det på en mer abstrakt nivå. Kollar man exempelvis på de uppgifter folk ber om hjälp med här så är de ungefär samma som när jag pluggade för femton år sedan eller så, vilket inte är så konstigt då det ju handlar om grunderna men samtidigt pratade man ju om Micro Services redan när jag pluggade men det verkar inte ha kommit in i de vanliga kurserna ännu.

Citat:

Båda dessa typer av databaser har väl sin plats antar jag men de allra flesta verkar ju trots allt köra SQL.

Tja, det finns förstås mängder av gamla system folk jobbar med, så att det finns mycket SQL "där ute" är väl givet. Men poängen jag försöker få fram är att den stora trenden inom databaser oavsett om det handlar om skrivbordsapplikationer, webb, webservice, micro services eller vad som, och avsett om det är relationsdatabaser eller dokumentbaserade, är att databasen är i princip bortabstraherad. Är det väldigt höga krav på prestanda så kan det förstås vara värt att kolla på vad som körs och försöka optimera mer än vad ens ORM eller liknande klarar av, men det är allt mer sällan det blir bättre så ROI är ju sällan så hög liksom.

Citat:

Har man suttit länge med vissa tekniker kommer man bli mätt och lockas av nya (åtminstone nya för en själv) grejer och efter ett tag blir man mätt och sen börjar det om.

Jo så är det absolut. Men de flesta tycker inte databasutveckling är så himla kul oavsett teknik, och eftersom det sällan behövs längre så tror jag de flesta är rätt nöjda med att kunna bara generera upp en databas och inte behöva tänka på det, utan istället fokusera på koden där "magin" skapas liksom.

Skrivet av zoomster2:

Angående databaser så finns det plats för flera.
Vi har MSSQL som bas, men använder Cosmos DB eller Mongo DB (Atlas) eller Elasticsearch) när det finns behov.

Och vi har flera applikationer som använder både Dapper och EF i samma app.
Dapper fungerar perfekt då vi behöver stöd for flera typer av databaser (DB2, Oracle, MSSQL,..) i samma applikation.

Men från ett applikations/solution arkitekt perspektiv, så föredrar vi EF (Entity Framework) då vi ser att TCO (total cost of ownership) är lägre för system som använder EF.
Vi har också sett att EF blir bättre för varje version och många gånger är bättre än en att försöka att skapa en egen ORM/repository.

Ang. EF.
Som nackdel så krävs det att utvecklare förstår hur EF fungerar. Annars kan det bli helt fel, även om det blivit mycket bättre i senare versioner av EF. (Note: logga ut alla SQL kommandon och se vad som faktiskt görs).

Oavsett om du använder EF, ADO.NET, MongoDB etc., så måste du fortfarande sätta rätt index, 'isolation', partition, och hints för hög-presterande system.

Jo EF är grymt, att skriva en egen ORM känns onödigt i nästan alla fall, undantaget är väl om man behöver något väldigt light weight eller väldigt specifikt. Samtidigt passar ju en dokumentbaserad DB ganska bra till objektorienterad kod med interfaces och klasser. Ens objekt motsvaras av ett dokument liksom, inte ett gäng tabeller med mer eller mindre komplexa relationer, även om det förstås finns ett mått av det även i dem.

Permalänk
Medlem
Skrivet av snajk:

Jag vet inte, min erfarenhet av lärarna på sådana här utbildningar, och kanske än mer på universitetet, är att de inte riktigt hänger med i branschens trender. Vilket inte är så konstigt kanske med tanke på hur fort det går, men det är väl därför många utbildningar försöker hålla det på en mer abstrakt nivå. Kollar man exempelvis på de uppgifter folk ber om hjälp med här så är de ungefär samma som när jag pluggade för femton år sedan eller så, vilket inte är så konstigt då det ju handlar om grunderna men samtidigt pratade man ju om Micro Services redan när jag pluggade men det verkar inte ha kommit in i de vanliga kurserna ännu.

Nu var det dock inte lärare som gjorde sig lite lustiga över MongoDB utan utvecklare på riktiga arbetsplatser, men jag förstår din poäng. Det var vissa grejer under utbildningen som lärarna inte var helt uppdaterade på, dock läste jag YH vilket innebär att det egentligen bara är vanliga IT-konsulter som håller i kurserna så de var i det stora hela kunniga osv.

Skrivet av snajk:

Tja, det finns förstås mängder av gamla system folk jobbar med, så att det finns mycket SQL "där ute" är väl givet. Men poängen jag försöker få fram är att den stora trenden inom databaser oavsett om det handlar om skrivbordsapplikationer, webb, webservice, micro services eller vad som, och avsett om det är relationsdatabaser eller dokumentbaserade, är att databasen är i princip bortabstraherad. Är det väldigt höga krav på prestanda så kan det förstås vara värt att kolla på vad som körs och försöka optimera mer än vad ens ORM eller liknande klarar av, men det är allt mer sällan det blir bättre så ROI är ju sällan så hög liksom.

Ja, och eftersom att databasen är bortabstraherad så behöver man inte byta ut det man har mot något som är trendigt 😁
Är dock helt övertygad om att det finns tillfällen då en doc-db är ett lämpligare val, men oftast klarar man ju sig utan.

Permalänk
Avstängd
Skrivet av ChrisDev:

Nu var det dock inte lärare som gjorde sig lite lustiga över MongoDB utan utvecklare på riktiga arbetsplatser, men jag förstår din poäng. Det var vissa grejer under utbildningen som lärarna inte var helt uppdaterade på, dock läste jag YH vilket innebär att det egentligen bara är vanliga IT-konsulter som håller i kurserna så de var i det stora hela kunniga osv.

Ja ok. Det är lite värre kanske. Samtidigt hör det väl till yrket att vilja hoppa på nya grejer liksom? Mer luttrad/erfaren kanske inte är lika snabb som någon nyexad men vill man jobba med samma saker på samma sätt utan att lära sig något nytt så är det fel yrke liksom.

Citat:

Ja, och eftersom att databasen är bortabstraherad så behöver man inte byta ut det man har mot något som är trendigt 😁
Är dock helt övertygad om att det finns tillfällen då en doc-db är ett lämpligare val, men oftast klarar man ju sig utan.

Tja så kan man förstås resonera. MS med flera har ju känt konkurrensen från NoSQL och förbättrat sig på flera områden, exempelvis stöd för linux vilket ofta är ett krav idag, och försök till att förbättra skalbarheten. Mongo är inte förskonad heller, snarare har dess generalitet börjat bli en nackdel nu, istället satsar man mer på specialiserade databaser för specifika syften.

Men ur ett utvecklarperspektiv så gillar jag i alla fall Mongo eller dokumentbaserade databaser ganska kraftigt. De motsvarar ju objektstrukturen i koden liksom vilket gör det väldigt mycket enklare strukturerat, från mitt perspektiv. Har jag en klass 'Customer' som har en eller flera telefonnummer, adresser, bilar, kvitton eller vad det nu kan vara så ligger de så i Mongo och jag får ju tillbaka dem direkt därifrån, medan jag i SQL hade behövt joina och/eller uppdatera ett antal tabeller. Jag slipper i förväg fundera på om en 'Customer' kan ha flera adresser exempelvis. Behöver jag lägga till något nytt fält, exempelvis 'Title' för en viss marknad, så kan jag bara göra det på Customers från den marknaden och ignorera den annars. Utan någon downtime eller påverkan på prestanda.

Permalänk
Medlem
Skrivet av snajk:

Ja ok. Det är lite värre kanske. Samtidigt hör det väl till yrket att vilja hoppa på nya grejer liksom? Mer luttrad/erfaren kanske inte är lika snabb som någon nyexad men vill man jobba med samma saker på samma sätt utan att lära sig något nytt så är det fel yrke liksom.
Tja så kan man förstås resonera. MS med flera har ju känt konkurrensen från NoSQL och förbättrat sig på flera områden, exempelvis stöd för linux vilket ofta är ett krav idag, och försök till att förbättra skalbarheten. Mongo är inte förskonad heller, snarare har dess generalitet börjat bli en nackdel nu, istället satsar man mer på specialiserade databaser för specifika syften.

Men ur ett utvecklarperspektiv så gillar jag i alla fall Mongo eller dokumentbaserade databaser ganska kraftigt. De motsvarar ju objektstrukturen i koden liksom vilket gör det väldigt mycket enklare strukturerat, från mitt perspektiv. Har jag en klass 'Customer' som har en eller flera telefonnummer, adresser, bilar, kvitton eller vad det nu kan vara så ligger de så i Mongo och jag får ju tillbaka dem direkt därifrån, medan jag i SQL hade behövt joina och/eller uppdatera ett antal tabeller. Jag slipper i förväg fundera på om en 'Customer' kan ha flera adresser exempelvis. Behöver jag lägga till något nytt fält, exempelvis 'Title' för en viss marknad, så kan jag bara göra det på Customers från den marknaden och ignorera den annars. Utan någon downtime eller påverkan på prestanda.

Känns som man kapat den här tråden ganska duktigt men låter som att det kan vara lite bekvämt att köra dokument, jag är inte rädd för att testa saker så jag kommer förmodligen prova dokument-db med C# som en kul grej. Har dock kommit till punkten att jag funderar en del över ifall vissa tekniker löser faktiska problem eller ifall någon bara tröttnat på det gamla och vill ha nytt.
Är Cosmos DB likvärdig Mongo? Hur funkar det med mer komplex data som inte bara är ett objekt? Testat Mongo för ett par år sedan med Node men då var det ganska simpel data.

Permalänk
Avstängd
Skrivet av ChrisDev:

Känns som man kapat den här tråden ganska duktigt men låter som att det kan vara lite bekvämt att köra dokument, jag är inte rädd för att testa saker så jag kommer förmodligen prova dokument-db med C# som en kul grej. Har dock kommit till punkten att jag funderar en del över ifall vissa tekniker löser faktiska problem eller ifall någon bara tröttnat på det gamla och vill ha nytt.
Är Cosmos DB likvärdig Mongo? Hur funkar det med mer komplex data som inte bara är ett objekt? Testat Mongo för ett par år sedan med Node men då var det ganska simpel data.

Jag har inte kollat så mycket på Cosmos, dels för att det är låst till Azure men också för att det oundvikligen kostar pengar. Mongo är bara att installera och köra. Men vad jag förstår så är det väl liknande funktionalitet men kanske bättre integration mot MS andra saker och så, framför allt molntjänster.