Vra

Ek het al met behulp van die opdrag patroon in my Flex projekte, met asinchroniese terugbel roetes vereis word tussen:

  • wie aangehaal'n gegewe opdrag voorwerp en die opdrag voorwerp,
  • die opdrag voorwerp en die "data toegang" voorwerp (bv.iemand wat hanteer die afgeleë proses oproepe oor die netwerk na die bedieners) dat die opdrag voorwerp oproepe.

Elk van hierdie twee terugbel roetes het om in staat wees om'n een-tot-een verhouding.Dit is te danke aan die feit dat ek dalk'n paar gevalle van'n gegewe opdrag klas loop presies dieselfde werk op dieselfde tyd, maar met effens verskillende parameters, en ek wil nie hul verificaties om deurmekaar.Met behulp van die gebeure, die standaard manier van hantering asynchronicity in AS3, is dus redelik baie uit, want hulle is inherent gebaseer op een-tot-baie-verhoudings.

Tans ek het dit gedoen met behulp van terugbel funksie verwysings met spesifieke vorme van handtekeninge, maar ek wonder as iemand weet van'n beter (of'n alternatiewe) manier?

Hier is'n voorbeeld om te illustreer my huidige metode:

  • Ek kan het'n uitsig voorwerp wat toegevoeg'n DeleteObjectCommand byvoorbeeld as gevolg van'n paar gebruiker aksie, verby verwysings na twee van sy eie private lid funksies (een vir sukses, een vir mislukking:kom ons sê "deleteObjectSuccessHandler()" en "deleteObjectFailureHandler()" in hierdie voorbeeld) as terugbel funksie verwysings na die opdrag klas se konstruktor.
  • Dan is die opdrag voorwerp sou herhaal hierdie patroon met sy verbinding met die "data toegang" voorwerp.
  • Wanneer die RPC oor die netwerk suksesvol voltooi is (of nie), die toepaslike terugbel funksies genoem word, eers deur die "data toegang" voorwerp en dan die opdrag voorwerp, sodat uiteindelik die oog voorwerp wat aangehaal die operasie in die eerste plek kry kennis gestel word deur die feit dat sy deleteObjectSuccessHandler() of deleteObjectFailureHandler() genoem.
Was dit nuttig?

Oplossing

Ek sal probeer om een meer idee:

Jou Data Toegang Voorwerp terugkeer hul eie AsyncTokens (of'n paar ander voorwerpe wat omsluit'n hangende noem), in plaas van die AsyncToken wat kom uit die RPC noem.So, in die DAO dit sou lyk iets soos hierdie (dit is baie oppervlakkig code):

public function deleteThing( id : String ) : DeferredResponse {
    var deferredResponse : DeferredResponse = new DeferredResponse();

    var asyncToken : AsyncToken = theRemoteObject.deleteThing(id);

    var result : Function = function( o : Object ) : void {
        deferredResponse.notifyResultListeners(o);
    }

    var fault : Function = function( o : Object ) : void {
        deferredResponse.notifyFaultListeners(o);
    }

    asyncToken.addResponder(new ClosureResponder(result, fault));

    return localAsyncToken;
}

Die DeferredResponse en ClosureResponder klasse bestaan nie, van die kursus.In plaas van die uitvind van jou eie wat jy kan gebruik AsyncToken in plaas van DeferredResponse, nie , maar die openbare weergawe van AsyncToken dit lyk nie asof enige manier van verwek die responders, so jy sal waarskynlik het om te subklas dit in elk geval. ClosureResponder is net'n uitvoering van IResponder wat kan noem'n funksie op die sukses of mislukking.

In elk geval, die manier waarop die kode bogenoemde is dit besigheid is wat dit vra'n RPC diens, skep'n voorwerp vat die hangende noem, gee dat die voorwerp, en dan wanneer die RPC opbrengste, een van die sluitings result of fault kry genoem, en omdat hulle nog verwysings na die omvang as wat dit was toe die RPC oproep gemaak is, is hulle kan sneller die metodes op die hangende oproep/uitgestelde reaksie.

In die bevel dit sou lyk iets soos hierdie:

public function execute( ) : void {
    var deferredResponse : DeferredResponse = dao.deleteThing("3");

    deferredResponse.addEventListener(ResultEvent.RESULT, onResult);
    deferredResponse.addEventListener(FaultEvent.FAULT,   onFault);
}

of, jy kan herhaal die patroon, met die execute metode terugkeer'n uitgestelde reaksie van sy eie wat sou veroorsaak wanneer die uitgestelde reaksie wat die opdrag kry van die DAO is geaktiveer.

Maar.Ek dink nie dit is veral mooi.Jy kan waarskynlik nie iets mooier, minder kompleks en minder verstrengel deur gebruik te maak van een van die vele aansoek raamwerke wat bestaan op te los meer of minder presies hierdie soort van probleem.My voorstel sou wees Maat.

Ander wenke

Baie van die Flex RPC klasse, soos RemoteObject, HTTPService, ens terugkeer AsyncToken s wanneer jy hulle bel. Dit klink soos hierdie is wat jy na. Basies die AsyncToken omvat die hangende oproep, wat dit moontlik maak om verifikasie registreer (in die vorm van IResponder gevalle) na 'n spesifieke oproep.

In die geval van HTTPService, wanneer jy bel send() n AsyncToken teruggestuur, en jy kan hierdie voorwerp gebruik om die spesifieke oproep dop, in teenstelling met die ResultEvent.RESULT, wat kry geaktiveer ongeag watter noem dit (en oproepe kan maklik kom in in 'n ander orde as hulle gestuur).

Die AbstractCollection is die beste manier om te gaan met Aanhoudende Voorwerpe in Flex / LUG.Die GenericDAO bied die antwoord.

DAO is die Voorwerp wat die bestuur uit te voer CRUD Operasie en ander Algemene Bedrywighede word gedoen oor'n ValueObject ( bekend as Pojo in Java ).GenericDAO is'n herbruikbare DAO klas wat gebruik kan word generies.Doel:

In JAVA IBM GenericDAO, by te voeg'n nuwe DAO, die stappe wat gedoen moet word, is eenvoudig, Voeg'n valueobject (pojo).Voeg'n hbm.xml kartering lêer vir die valueobject.Voeg die 10-lyn Lente opset lêer vir die DAO.

Net so, in AS3 Projek Swiz DAO.Ons wil om te bereik'n soortgelyke voete van prestasie.

Kliënt Kant GenericDAO model:As ons werk op'n Kliënt Kant taal, ook moet ons die bestuur van'n aanhoudende voorwerp Versameling (vir elke valueObject) .Gebruik:Bron:http://github.com/nsdevaraj/SwizDAO

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top