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

Publicado por: Ricardo Parente 0 Comments

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().

by James Allen

Leia mais...


Como eu inicializo um CFC e ao mesmo tempo crio ele?

Em muitos exemplos utilizam CFC, a chamada que cria o CFC também chama um método init(). Isto é feito tanto para criar uma instância de um CFC, bem como inicializá-lo com algumas informações. Assim, por exemplo, você pode querer passar em um nome de fonte de dados para um CFC para que o componente pode realizar consultas de dados. Como isso é feito?

by Michael Dinowitz

Leia mais...


Como faço para contornar a falta de construtores em CFC?

A prática adotada é a de criar um "init" método que retorna o objeto.

Exemplo:
<cfcomponent displayname="Person">
<cffunction name="init" access="public" output="false">
<cfreturn this />
</cffunction>
</cfcomponent>

O método init pode aceitar os argumentos e executar a inicialização do objeto, se necessário. Agora, você sempre pode criar os objetos como este:
<cfset joe = createObject('component', 'Person').init() />

 by Hal Helms


Como evito esquecer de declarar variáveis locais?

É crítico escrever método de componente e UDF que todas as variáveis do código sejam definidas corretamente no escopo var. Se você esquecer este passo - a variável existirá fora do método e podendo potencialmente ser algo muito duro para depurar problemas. Uma forma acerca de acidentalmente esquecer do escopo var é criar uma estrutura para todas as variáveis. Considere este bloco de código:

 

<cfset var local = structNew() />

<cfset local.name = "Mickey Mouse" />
<cfloop index="local.i" from="1" to="10">
<cfoutput>#local.i#: #local.name#<br></cfoutput>
</cfloop>

Neste exemplo, a estrutura local foi criada para armazenar todas as variáveis locais. Note que o restante do código usa esta estrutura para quaisquer variáveis criadas.

 by Dale Fraser