webForumDet fria alternativet

Smart sätt att anropa mellan classer

.NET

10 svar · 284 visningar · startad av Vide

Medlem sedan dec. 19998 577 inlägg
Frågan#1

Hejsan,

Håller på att bygga lite komponenter till ett community (web), och har lite frågor ang. hur jag bäst arrangerar funktioner och dess anrop...

Jag har en class där jag samlar alla databas-funktioner, dessa funktioner skall sedan anropas ifrån andra classer i samma modul. Men, jag vill ju bygga det så effektivt som möjligt, jag har t.ex en funktion som öppnar databasen utifrån en property... i samma class har jag också funktioner för att hämta recordset som jag sedan återger till websidan... "Problemet" är att jag vill att min connection till databasen inte skall vara öppen längre än nödvändigt, samt att flera olika funktioner skall använda objektet...

Lite konstigt skrivet kanske, men alla ideér mottages tacksamt... :)

Mvh, Vide

Medlem sedan juni 200032 967 inlägg
#2

Jag kör på ett liknande sätt, och jag kör getRows() så fort jag bara kan, och sedan hanterar jag mina tvådimensionella arrays i resten av applikationen. Då kan jag stänga alla objekt efter mig snabbt.

Mvh,

Medlem sedan maj 200010 687 inlägg
#3

Connection objektet stänger du ju så fort du använt det för att hämta ett recordset. Konstigare än så är det väl inte?

Menar du att du skulle vilja ha en generell öppning så man bara öppnar en gång och sen låter det vara öppet under körning så man kan använda det flera gånger. Dum idé tycker jag i så fall.

Sen så är det ju vettigt att använda frånkopplade recordsets. Så rs.Open sSQL, objConn, adOpenStatic, adLockReadOnly tillsammans med rs.ActiveConnection = Nothing är ju ganska bra... :)

Medlem sedan dec. 19998 577 inlägg
#4

Problemet med getRows är att du tappar de metoder som ett recordset har, självklart kan jag lägga till ett alternativ som säger att jag vill ha ett serverside recordset, disconnected recordset, getRows eller getString... det är nog en bra idé... Väljer man ett serverside så skall den inte stänga connection-objektet...

I en annan class (user class) har jag en funktion för att hämta ett specifikt fält, hamnar jag i loop där jag anropar funktionen så är det ju puckat att öppna och stänga connection varje gång...

... fortsättning följer... ;)

Mvh, Vide

Medlem sedan maj 200010 687 inlägg
#5

Varför skulle man vilja använda serverside-recordset? :q

Medlem sedan maj 200010 687 inlägg
#6

För att hämta ett specifikt fält så kan man ju skriva typ: variabel = GetRecordset("SELECT * FROM tabell")("fältet")

Medlem sedan maj 200010 687 inlägg
#7

Sen så hoppas jag att du lägger dessa trevliga funktioner i Moduler som kan användas överallt i COM-objektet och inte klasser som du anropar publikt! :)

Medlem sedan dec. 19998 577 inlägg
#8

Erik Juhlin skrev:

Varför skulle man vilja använda serverside-recordset? :q

När man inte har behov av att t.ex stega fritt i recordsettet utan bara skall göra en linjär loopning av posterna är det bättre att inte hämta ett clientside recordset då det skickas med onödigt mycket med objektet...

Jag tycker att det är bättre att bygga in det när man ändå skall bygga en databas-klass, det är ju inte mycket extra kod...

Erik Juhlin skrev:

För att hämta ett specifikt fält så kan man ju skriva typ: variabel = GetRecordset("SELECT * FROM tabell")("fältet")

Mjo, med ett recordset så.. men nu pratade jag om en tvådimensionel array... ;)

Erik Juhlin skrev:

Sen så hoppas jag att du lägger dessa trevliga funktioner i Moduler som kan användas överallt i COM-objektet och inte klasser som du anropar publikt!

Har inte funderat på arkitekturen på det sättet ännu, det är det jag håller på med nu... ;)

*Funderar*

Eftersom jag inte kommer att bygga klasser för andra funktioner (userclass, forumclass osv) så kommer jag aldrig att behöva komma åt databasen publikt, så visst det är nog en smart idé att lägga det i moduler...

Men vad tjänar man på det? Förutom att man begränsar användandet till själva modulen?

Medlem sedan maj 200010 687 inlägg
#9

Du tjänar på det genom att du då aldrig får för dig att skriva SQL-frågor i presentationslagret. Snyggare struktur.

Och så har du metoderna lätttillgängliga i alla dina klasser. :)

Medlem sedan dec. 19998 577 inlägg
#10

Hur gör man det i VB6? När man lägger till en egen modul, är det något speciellt man måste göra för att få funktionerna tillgängliga för klasserna?

Mvh, Vide

Medlem sedan maj 200010 687 inlägg
#11

Nej, du lägger bara upp en vanlig modul och inte en class modul. :)

259 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)