, denne artikel vil forklare afledte medlemmer i eu.det primære formål er at beskrive den forskel mellem den reevaluatesubscriber og resubscribesubscriber parametre, når du har medlemmer i kode. en af de fremragende egenskaber af dristige, der har bevæget over i eco - er afledt af medlemmer.en afledt medlem er lidt ligesom en beregnet område på et datasæt, bortset fra, at det kun er beregnet for første gang du anmoder om dets værdi og værdien er skjult for forarbejdning. tag person er fullname som eksempel.fulde navn ville være beregnet som,,, resultat: = afsnit + + firstname + + lastname;,, det første vigtige skridt til at skabe en sådan egenskab i eco - er at markere attribut.det er faktisk muligt at angive nogle " afledning køreledning " og har eco system har alt til jer, afsnit + + firstname + + lastname, men denne artikel er bestemt til at vise dig, hvordan man klare meget mere komplicerede situationer. med en typisk datasæt beregnes inden du vil forventer, at den metode, der beregnes hver gang den værdi, der anmodes om.hvis den aktuelle objekt er blevet udstillet som en liste i en datagrid så kalder denne metode for hvert tilfælde, hver gang datagrid maler alt over kan være cpu intensivt, navnlig hvis værdi beregnes ud fra mange andre attributter /genstande. i eco - metoden er henrettet for første gang værdien er anmodet om, men vil resultatet være skjult automatisk i eco - rummet.fremtidige anmodninger om værdien af denne afledte medlem vil vende tilbage, skjult værdi i stedet.potentialet for cpu besparelser er indlysende, især med komplicerede rutiner. en kode afledte metode til et medlem har et bestemt navn + parameter liste, eco bruger overvejelser for at finde den metode.den struktur, funktion < membername > deriveandsubscribe (reevaluatesubscriber,, resubscribesubscriber: isubscriber): < membertype >,, i vores fullname eksempel eco ville forvente at finde, funktion fullnamederiveandsubscribe (reevaluatesubscriber,, resubscribesubscriber: isubscriber): string;, er problemet det.hvis værdien af de afledte medlem beregnes kun én gang, og så skjult, hvad sker der, hvis værdien af de afsnit, firstname, eller lastname ændringer?, eco rammer helt klart ikke har nogen idé om, hvad vi har gjort for at udlede værdien af den pågældende, eller som andre objekter /medlemmer blev anvendt til at beregne det.for at sikre, at eu aldrig tilbage en ukorrekt værdi, det har brug for at vide, hvornår dette medlem bør beregnes på ny.faktisk, det har virkelig behov for at vide, er, når dette medlem bør mærkes " ugyldig " det vil ikke blive omregnet til dens værdi er påkrævet., eco ramme bruger en slags observatør mønster for at se de relevante genstande /medlemmer, når en af disse er ændret ecospace vil markere det afledte medlem ugyldig (der medlem via " afledning køreledning ", vil disse abonnementer automatisk).så vores kode nu ligner det,,,, funktion fullnamederiveandsubscribe (reevaluatesubscriber, resubscribesubscriber: isubscriber): string, begynder, resultat: = afsnit + + firstname + + lastname; //nu sted eller " abonnement ", self. asiobject(). egenskaber ['title "]. subscribetovalue (reevaluatesubscriber), selv asiobject(). egenskaber ['firstname"]. subscribetovalue (reevaluatesubscriber), selv asiobject(). egenskaber ['lastname "]. subscribetovalue (reevaluatesubscriber);,;,, " reevaluatesubscriber " er observatør objekt, der er sendt til os fra et eller andet sted i det indre af eco - ramme.det eneste, vi skal gøre, er at sørge for, at vi støtter det, til alle de relevante genstande /medlemmer.når en af disse afhængige elementer har deres værdi ændret, reevaluatesubscriber vil fortælle eu - ramme, at værdien af eller medlem bør være " genvurderet ", næste gang der er anmodet om.,, revurdere eller resubscribe?og det bringer mig frem til det sidste punkt.der er to abonnenter gik til vores metode " reevaluatesubscriber " og " resubscribesubscriber ", så hvad er den anden gør det, og hvornår skal det være?i det foregående eksempel, vi brugte reevaluatesubscriber, fordi vi kun har brug for at vide, når værdierne i afsnit firstname, eller lastname ændring.i en mere kompliceret. vi må gøre noget mere strukturelt komplicerede, som iterating gennem alle orderline af en purchaseorder og bidrager til medlemmer af de relaterede genstande i stedet. i en sådan situation, hvad sker der, hvis en ny orderline tilføjes?vi kan ikke allerede har tilsluttet sig en genstand, der endnu ikke eksisterede på det tidspunkt, vi sætter vores abonnement?hvad, hvis en orderline fjernes eller slettes?det er præcis, hvad det er for resubscribesubscriber.denne abonnent skal udløses, når vi ønsker at sige " smide alle de abonnementer lagde jeg sidste gang, så lad os starte igen ".det er i grunden ikke " værdier " af de elementer, som er ved at ændre sig, er vi nødt til at erstatte vores abonnementer, fordi der er mere /mindre objekter til at tage i betragtning.,,, funktion ordervaluederiveandsubscribe (reevaluatesubscriber,, resubscribesubscriber: isubscriber): decimal;, var, currentorderline: orderline;, begynder, resultat: = 0, currentorderline i self.orderlines kan begynde, resultat: = resultat + currentorderline. linevalue; //tilslutte mig de medlemmer af den nuværende barn objekt, currentorderline. asiobject(). egenskaber ['linevalue "]. subscribetovalue (reevaluatesubscriber);,; //endelig, hvis de self.orderlines liste ændringer i den måde, //vi er nødt til at lade alle vores abonnementer og begynde at agai., self. asiobject(). egenskaber ['orderlines "]. subscribetovalue (resubscribesubscriber);,;,, konklusion, forhåbentlig, har det været en øjenåbner for evner af kode afledte medlemmer i eu.hvis du ikke allerede har gjort, vil jeg anbefale dem at læse rolf lampa er artikel dynamiske navigation til højere ydeevne, det blev skrevet for dristigt, men princippet er det samme.
ny eller resubscribe?
Previous:datagrid.rowchanged begivenhed