Hej, jag har ett litet problem med att lösa ett objekt problem som ju är lätt i andra mer oo språk. Vad är problemet? >OO är ineffektivt om man lässer in all data. Jag kanske formulerar mig luddigt. Är ju inte här för att förklara hur OO fungerar. Eller tvinga folk göra på något specilet sätt. Jo, jag kan tillägga att jag bara plockar upp en order och sedan skickar orderobjektet till en funktion som stoppar in det i ett annat system. Detta anrop är inte resurskritiskt eller betungande på något vis... för att klargöra att det inte rör sig om något gigantiskt. Det löste sig av sig självt... :)Objekt orienterat med collections ?
Jag har en class, som innehåller flera objekt och bland annat en collection av en class som i sin tur innehåller bl.a. en collection av en annan class. Jag skulle vilja plocka ut en sträng ur barnbarnet till huvudobjektet.
Tänkbart laddar jag orderobjektet så här:
<code>
' Orderhuvud
Dim order As OrderHuvud
Set order = New OrderHuvud
order.KundNr = "4500"
order.OrderDatum = Now()
order.OrderNr = "C2010"
' Loopar igenom Orderhuvudets Orderrader och skapar OrderRads objekt
Dim rad1 As OrderRad
Set rad1 = New OrderRad
rad1.OrderRadNr = 1
rad1.VaruNr = "radde1"
' Loopar igenom OrderRadens MaterialRader och skapar MaterialRads objekt
Dim mtrl1 As MaterialRad
Set mtrl1 = New MaterialRad
mtrl1.MaterialRadNr = 1
mtrl1.VaruNr = "matte1"
Dim mtrl2 As MaterialRad
Set mtrl2 = New MaterialRad
mtrl2.MaterialRadNr = 2
mtrl2.VaruNr = "matte2"
' Lägger till Materialraderna till Orderrads objektet
rad1.MaterialRader.Add mtrl1
rad1.MaterialRader.Add mtrl2
Dim rad2 As OrderRad
Set rad2 = New OrderRad
rad2.OrderRadNr = 2
rad2.VaruNr = "radde2"
Dim rad3 As OrderRad
Set rad3 = New OrderRad
rad3.OrderRadNr = 3
rad3.VaruNr = "radde3"
' Loopar igenom och samlar upp Orderns OrderRader
order.OrderRader.Add rad1
order.OrderRader.Add rad2
order.OrderRader.Add rad3
</code>
Jag önskar att jag enkelt skulle kunna skriva:
xxx = order.OrderRader.Item(0).MaterialRader.Item(1).Value t.ex.
Kedjan bryts tidigt vid första barnet... Jag ser enorm spaghettiloop framför mig, för att nysta ut en enda sträng, som jag skulle vilja slippa. Finns det ett enklare sätt att se på problemet?
JoacimSv: Objekt orienterat med collections ?
Hoppas du bara laddar akuell order. OO är ineffektivt om man lässer in all data. Man ska bara läsa in det man behöver.
T.Ex. När man startar applikationen och laddar alla odrar kommer tiden öka för varje ordrar man länger in. När man jobbat ett tag kommer man inte starta programmet friviligt. Det är då bättre att dynamisk skapa objekt när det anropas. Lägga till metoder för att t.ex. retunera Readonly rs till Listor. Objektet behövs ju bara för att kapsla koden som läser, redigerar, validerar och spara enskilda "poster".
Så jag uppfattat det. Uppskattar gäran asynpunkter.Sv: Objekt orienterat med collections ?
Helt ologiskt. Objektorientering har ju inget med det att göra - oo är ett synsätt som skiljer sig markant mot äldre - som strukturell programmering och funktionsbaserad. Den är inte tänta att användas i något visst tillfälle och är inte heller (i stort sett)mindre effektiv i sig. Det är ju precis lika ineffektivt även om man inte ser det objektorienterat.
Sedan är enskilda lösningar rörande tidpunkten då man läser in informationen inte på något som helst kopplat till OO - det gör det bara lite lättare att ha större kontroll.
Förresten... jag tycker ditt uttryckssätt verkar lite konstigt, jag hade intrycket att du verkligen hade hajat OO. Objekt är inte till för att kapsla in kod - objekt är separata enheter som skall representera ting i programmet. Nu kan man visserligen inte följa detta lika starkt i VB som i t.ex. C++, men det är fortfarande fel att säga att objekt bara är till för en kapsling av kod.
/Niklas JanssonSv: Objekt orienterat med collections ?
Vill bara dela med mig av exempel jag råkat ut för. vilket, vid start, laddar alla objekt från databasen. Vilket jag anser är fel sätt att tillämpa OO. Jag ansera ska bara ladda det enheter/objekt man behöver för tillfället.
Att ladda objekten kan ge en snabbare accesstid. Men till vilken kostnad. Förbrukar minne och resurser. Ger problem då flera använder systemet .
Har man index i databasen tar det inte lång tid att slå upp poster när man laddar dem. Ofta behövs inte alla information från databasen. Utan en mycket liten del.
Jag tycker OO är underbar. Vilket man bör tillämpa det på ett korrekt sätt. Sv: Objekt orienterat med collections ?
Frågan är hur jag på ett bra sätt kan plocka ihop och isär detta orderobjekt.
Jag tappar tråden till barnbarnen så jag måste göra något galet.
Jag undrar bara hur jag sätter ihop ordern på ett bättre sätt än det ovan eller om ni ser någon brist som jag bör tänka på.
Ett utklipp ur OrderRad klassen:
<code>
Private mvarOrderRadNr As Integer 'local copy
Private mvarVaruNr As String 'local copy
Private mvarMaterialRader As Collection
Public Property Get MaterialRader() As Collection
If mvarMaterialRader Is Nothing Then
Set mvarMaterialRader = New Collection
End If
Set MaterialRader = mvarMaterialRader
End Property
Public Property Set MaterialRader(vData As MaterialRader)
Set mvarMaterialRader = vData
End Property
Private Sub Class_Terminate()
Set mvarMaterialRader = Nothing
End Sub
...
</code>
Kan det vara att tråden tappas pga att jag använder en allmän collection ?
mvh
JoacimSv: Objekt orienterat med collections ?
Jag antog att det inte fungerade eftersom jag inte fick hjälp av objekt browsern.
De fanns där hela tiden ändå...
<code>
For Each rad In order.OrderRader
MsgBox rad.VaruNr
For Each mtrlRad In rad.MaterialRader
MsgBox mtrlRad.VaruNr
Next
Next
</code>
Tackar för bollplankningen ... ibland behöver man bara skriva av sig lite för att det skall fungera igen :)
mvh
Joacim