Um método getMemento() quando usar getters e setters implícitos em CF9

Problema:

Usando CF9 é possível se ter getters e setters automaticamente criados, usando-se a tag <cfproperty> no tôpo do CFC. Isso é realmente muito útil, mas o problema é que as propriedades são todas guardadas no escopo variables. A abordagem usual para armazenar dados de propriedades é criar uma instância da estrutura no escopo variables e armazenar os dados lá. Isso então permite voce retornar um memento desses dados a qualquer hora para debug ou para uma rápida troca de estado.

Solução:

Eu gosto de ter uma funçëo getMemento() em todos os meus CFCs para que eu possa ver um snapshot dos dados armazenados no CFC a qualquer hora. Assim sendo, eu decidi escrever uma nova função que trabalharia com os dados das propriedades quando se usasse getters e setters implícitos no CF9. Achei uma rápida maneira de fazer iss usando a função getMetaData().

Explicação detalhada:

Aqui está o código para o método getMemento() que retornará uma estrutura dos dados atualmente armazenados no CFC e definidos pelas tags <cfproperty>:

<cffunction name="getMemento" output="false" access="public"
     returntype="struct"
     hint="Default memento dump function - only works if the CFC is using cfproperty tags">

    <cfset var instance = StructNew()>
    <cfset var md = getMetaData(this).properties>
    <cfset var x = 0>
    <cfloop from="1" to="#ArrayLen(md)#" index="x">
        <cfset instance[md[x].name] = variables[md[x].name]>
    </cfloop>
    <cfreturn instance>
</cffunction>

by James Allen

Versão em inglês: Adobe ColdFusion Cookbook

Creative Commons License Adobe

 

0 responses to “Um método getMemento() quando usar getters e setters implícitos em CF9”