The Mediator design pattern using the new Collection class

Visual Foxpro 8.0 is net uit en biedt ons tal van nieuwe mogelijkheden. Eén daarvan is het collection object. Je kunt een collection object gebruiken om een groep gerelateerde objecten samen te brengen in een collection. Je kunt door een collectie heen 'scannen' met het FOR EACH commando. Door vervolgens het collection object uit te breiden met specifieke methodes kun je er een mediator van maken.

Wat is een mediator?
Dit is een soort observer die de interactie tussen twee of meer objecten regelt. De objecten hoeven hierdoor geen kennis van elkaar te hebben; ze moeten alleen weten wie hun mediator is. Een mediator maakt het mogelijk om objecten "los" te koppelen en de communicatie over en weer kan hierdoor eenvoudig variëren.

De mediator zorgt voor een gemeenschappelijk en gecentraliseerd (en subclassable) point of entry, gedrag en gedragsmanagement, met een gemeenschappelijke interface.

Stel, we hebben een toolbar actief met daarop navigatie buttons zoals Volgende, Vorige, Eerste en Laatste. Daarnaast hebben we twee schermen actief die beide gebruikmaken van hun eigen, private datasessie en die naar verschillende tabellen kijken. We zouden graag willen dat de toolbar zich aanpast aan het actieve form, dus als het laatste record is bereikt binnen een form, worden de buttons Volgende en Laatste gedeactiveerd, etc.
De aanname in dit geval is dat het Refresh event van de toolbar de buttons (de-)activeert op basis van de status van de geselecteerde alias van het actieve scherm. In het Activate event van de schermen stuur je dan een message naar de mediator, bv

This.oMediator.Action("SCREENACTIVATE")

In Action method van de de mediator moet dan code staan om de juiste actie te ondernemen richting - in dit geval - toolbar.

Als je in de toekomst besluit de toolbar te vervangen door een andere toolbar, of je besluit een andere mediator te installeren of je wilt op basis van de message ook nog andere objecten refreshen ipv alleen de toolbar, dan kun je dat eenvoudig realiseren zonder rekening te moeten houden met de afhankelijkheden van de objecten onderling.

Voorbeeld
In het 1e stukje code wordt een collection gemaakt waar de objecten in worden gestopt, waar de mediator later zijn werk op moet doen:

LOCAL loCollection

loCollection = CREATEOBJECT("Collection")

*- Adding objects assuming they are there
loCollection.Add(form1)
loCollection.Add(form2)
loCollection.Add(Toolbar1)

*-  Activate method form code
This.oMediator.Action("SCREENACTIVATE")

De Action-method van de mediator kan dan als volgt zijn werk doen:

*- Action method mediator
LPARAMETERS tcAction

DO CASE
  CASE tcAction = "SCREENDEACTIVATE"
    *- Actions for deactivation
  CASE tcAction = "SCREENACTIVATE"
    *- Action for screenactivate message
    FOR EACH loObject IN This
      IF UPPER(loObject.BaseClass) = "TOOLBAR"
        loObject.Refresh()
      ENDIF
    NEXT

ENDCASE

Met dit eenvoudige voorbeeld hoop ik u op het juiste spoor te hebben gezet voor zowel het gebruik van het mediator pattern als een mogelijke toepassing van het nieuwe collection object.

Gerben Kessen is eigenaar en oprichter van Wantit B.V., een bedrijf dat gespecialiseerd is in maatwerksoftware, training en consultancy in Visual Foxpro. Gerben is een Microsoft Certified Professional en heeft een lange historie als Foxpro ontwikkelaar. U kunt hem bereiken via gerben.kessen@wantit.nl of www.wantit.nl

Commentaar van anderen:
ChristianLouboutin op 17-8-2010 om 3:05
Christian Louboutin Shoes, Christian Louboutin, Christian Louboutin Shoes, Wedding Shoes, Christian Louboutin Shoes, Christian Louboutin includes recently been produced in a selection with trends, designs, designs and also styles that will need achieved great decide of millions of most women several over the globally. Wedding Shoes, Christian Louboutin, Christian Louboutin Shoes, Wedding Shoes, Discount Christian Louboutin, Louboutin Sale A number of sizes are usually seriously outstanding and simply the rest are special variations among traditional general trends. Louboutin Shoes, Christian Louboutin Discount, Louboutin, Christian Louboutin Sale, Buy Christian Louboutin, Christian Louboutin Pumps, YSL Shoes sandals are known for their own particularly crafte heels, outstanding models and also high-priced and furthermore well highly regarded amongst girls cirlces. Christian Louboutin Sandals, Yves Saint Laurent Shoes, Christian Louboutin Boots, Manolo Blahnik Shoes, Yves Saint Laurent Boots, Miu Miu Shoes Sandals designs are glamorous and sexy, and they are worn by some of the world most beautiful women. Christian Dior Shoes, Christian Louboutin Flats, Christian, Louboutin Shoes, Christian Louboutin Sale, Discount Christian Louboutin Why is everyone infatuated with these red-soled shoes Read on to find out why, and you also find some of the best of Louboutin line. Herve Leger Bandage Dress, Herve Leger Dress, Herve Leger V Neck Dress, Herve Leger Bandage Dress, Herve Leger Dress Most people associate Louboutin shoes with sky-high, stiletto heels, the patent sandals with wedge heels prove that sexy and wearable can go hand-in-hand.
Geef feedback:

CAPTCHA image
Vul de bovenstaande code hieronder in
Verzend Commentaar