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
0 responses to “Um método getMemento() quando usar getters e setters implícitos em CF9”