[Alg] Gebruik van versienummers voor updaten variabelen

Pagina: 1
Acties:

  • blueicez
  • Registratie: November 2001
  • Laatst online: 28-11-2025

blueicez

Broadband 4 all

Topicstarter
Hi All,

Ik heb een vraagje voor wat betreft het gebruik van een versienummer bij het updaten van variabelen.

Situatie:

Stel je hebt een variabel A van een klasse, welke in een instantie zit van X.

Er zijn verschillende instanties van een andere klasse (bijv. Z Y) die gebruik maken van X.
Deze andere klasse (Z Y) voeren wat spannende rekenkunstjes uit met waarde A uit X en vullen hiermee een aantal eigenschappen van zichzelf.

Indien waarde A van X aangepast wordt door een andere instantie (wat niet van te voren is in te schatten) dan zullen Z en Y hun berekening opnieuw moeten uitvoeren en intern zaken updaten.

Probleem:

Omdat het hier om vrij grote variabelen gaat, die als gevolg een hoop geheugen gebruiken, is het belangrijk dat hiermee zuinig moet worden omgegaan.

Ik kan dus niet simpel zeggen van: if (this.mijnA == X.A) { Goed. } else { Fout } omdat ik dan voor elke instantie een kopie moet hebben als vergelijk materiaal. Dit zal een hoop geheugen/snelheid kosten en misschien zelfs de applicatie onwerkbaar maken.

De oplossing waar ik tot nu toe mee genomen was, is het gebruik maken van een versienummer van A in X. Op deze manier kan snel worden gezien of er een update noodzakelijk is.

Vraag:
  • Heeft iemand een idee hoe dit technisch heet? (het gebruik van versie nummers om een update van variabelen aan te geven, dit praat in iedergeval een stuk makkelijker)
  • Persoonlijk vind ik dit niet de meest elegante oplossing voor het probleem, heeft iemand voor mij een suggestie voor een betere oplossing? Het blijft naar mijn idee nog een beetje quick/dirty.

Asus A7V266, AMD XP 2400+ met 1024 DDR en een 350 GB Harddisk


  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

Wat voor variabele is A? Een primitive of een class?
Indien class, maak A Observable, en X, Y en Z Observers.

Uitleg hier.

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


  • Swerfer
  • Registratie: Mei 2003
  • Laatst online: 14-02 17:02

Swerfer

Hmm...

Kan A niet Y en Z aansporen om herberekeningen uit te voeren op het moment dat A is gewijzigd?

Home Assistant | Unifi | LG 51MR.U44 | Volvo EX30 SMER+ Vapour Grey, trekhaak | SmartEVSE V3 | Cronos Crypto.com


Verwijderd

Daar hebben ze events en event handlers / delegates voor uitgevonden.

  • blueicez
  • Registratie: November 2001
  • Laatst online: 28-11-2025

blueicez

Broadband 4 all

Topicstarter
Verwijderd schreef op zaterdag 29 juli 2006 @ 20:57:
Daar hebben ze events en event handlers / delegates voor uitgevonden.
Ik heb hier inderdaad van gehoord, hoe zou zoiets er in deze situatie (globaal) uit komen te zien?

Asus A7V266, AMD XP 2400+ met 1024 DDR en een 350 GB Harddisk


  • purge
  • Registratie: November 2000
  • Niet online
Even een klein voorbeeldje in VB. Let niet op de naamgevingen enzo ;-)
Commentaar bij de code heb ik weggelaten daar dit het overzicht niet ten goede komt. suc6

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
Public Class X

    Private m_A As Integer

    Public Property A() As Integer
        Get
            Return m_A
        End Get
        Set(ByVal value As Integer)
            m_A = value
            RaiseEvent WhenValueHasChanged(Me, New EventArgs)
        End Set
    End Property

    Public Event WhenValueHasChanged As ChangeEventHandler
    Public Delegate Sub ChangeEventHandler(ByVal sender As Object, ByVal e As EventArgs)

End Class

Public Class Z

    Public WithEvents XItem As New X

    Private Sub XItem_WhenValueHasChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles XItem.WhenValueHasChanged
        ' recalculate
    End Sub
End Class

Public Class Y
    Public WithEvents XItem As New X

    Private Sub XItem_WhenValueHasChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles XItem.WhenValueHasChanged
        ' recalculate
    End Sub
End Class

  • JKVA
  • Registratie: Januari 2004
  • Niet online

JKVA

Design-by-buzzword fanatic

Misschien iets duidelijkere voorbeelden.
http://en.wikipedia.org/wiki/Observer_pattern

Fat Pizza's pizza, they are big and they are cheezy


  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

blueicez schreef op zaterdag 29 juli 2006 @ 21:05:
[...]


Ik heb hier inderdaad van gehoord, hoe zou zoiets er in deze situatie (globaal) uit komen te zien?
delegates/event handling is andere terminologie voor Observer/Observable wat ik in de eerste post uitlegde. Genoeg over te vinden lijkt me ... probeer het eens zou ik zeggen.

En waar JKVA ook naar linkt :)

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 22-01 23:51

NMe

Quia Ego Sic Dico.

Ontwerpkwesties mogen in Software Engineering & Architecture. :)

PRG>>SEA

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • JKVA
  • Registratie: Januari 2004
  • Niet online

JKVA

Design-by-buzzword fanatic

Overigens is versioning niet eens zo'n heel lelijke oplossing. Hibernate maakt er bijvoorbeeld gebruik van. Je definieert een bepaald veld als zijnde een versie tellertje. Deze mag private zijn zonder getters en setters, zodat deze je domeinmodel niet vervuilen. Hibernate regelt onder water alles met betrekking tot versioning.

Waarmee ik probeer te zeggen: Zo'n versioningsysteem is geen probleem, maar probeer iets dergelijks zo veel mogelijk te verbergen, want als applicatieprogrammeur wil je dergelijke zaken niet tegenkomen.

Verwerk het bijvoorbeeld in een framework en hou het verborgen voor je andere code. Dit maakt het onderhoudbaarder en bovendien beter te begrijpen voor anderen. (en voor jezelf, een maand nadat je het geprogrammeerd hebt. :P)

Fat Pizza's pizza, they are big and they are cheezy

Pagina: 1