Mostrando postagens com marcador design pattern. Mostrar todas as postagens
Mostrando postagens com marcador design pattern. Mostrar todas as postagens

segunda-feira, junho 22, 2009

Agilize Coldfusion Components com Bean Dinâmico (Genérico)

Assisti um vídeo do Terry Ryan em Adobe TV sobre como acelerar o desenvolvimento com Coldfusion Componentes (CFC), achei muito bom e aproveitei para reescrever o Bean dinâmico utilizando cfscript. Testei e funcionou, muito boa a dica! Segue o código fonte:


<cfcomponent displayname="BeanDynamic.cfc">

<cffunction name="init" access="remote" output="false" returntype="Any">
<cfscript>
return this;
</cfscript>
</cffunction>

<cffunction name="onMissingMethod" access="public">
<cfargument name="missingMethodName" type="string" required="false" />
<cfargument name="missingMethodArguments" required="false" />
<cfscript>
var attribute = "";

if( compareNoCase(left(arguments.missingMethodName,3),"get") eq 0 ){

attribute = getMissingMethodName(arguments.missingMethodName);
return get(attribute);

} else

if( compareNoCase(left(arguments.missingMethodName,3),"set") eq 0 ){

attribute = getMissingMethodName(arguments.missingMethodName);
return set(attribute, arguments.missingMethodArguments[1]);
}
</cfscript>
</cffunction>


<cffunction name="getMissingMethodName" access="private" returntype="Any">
<cfargument name="missMethName" type="string" required="false" />
<cfreturn right(arguments.missMethName,len(arguments.missMethName)-3)>
</cffunction>

<cffunction name="get" access="private" output="false" returntype="Any">
<cfargument name="attribute" type="string" required="true" />
<cfreturn variables.instance[arguments.attribute] />
</cffunction>

<cffunction name="set" access="private" output="false" returntype="Any">
<cfargument name="attribute" type="string" required="true" />
<cfargument name="value" type="any" required="true" />

<cfset variables.instance[arguments.attribute] = arguments.value />

<cfreturn this />
</cffunction>

<cffunction name="getVars" access="remote" output="false" returntype="Any">
<cfreturn variables.instance>
</cffunction>

</cfcomponent>



Para Testar em seguida:


<cfscript>
BeanDynamic = createObject('component','BeanDynamic').init();
BeanDynamic.setNome('Fernando');
BeanDynamic.setEmail('fernando@teste.com');
</cfscript>

<cfoutput>
#BeanDynamic.getNome()#<br />
#BeanDynamic.getEmail()#
</cfoutput>

sexta-feira, maio 30, 2008

Snipet que adapta o componente gateway para trabalhar com tabelas de relacionamento

Para quem usa a Extensão Coldfusion para eclipse da Adobe, dentro de RDS Dataview quando clicamos com o botão direito do mouse numa tabela temos a opção: Coldfusion Wizards > Create CFC. Abre então uma janela "Coldfusion CFC Value Object Wizard" com 3 opções, entre elas uma pode gerar automaticamente os arquivos CFC para acesso a dados que prefiro chamar de grupo DAO, que é constituído de 3 arquivos com suas respectivas funções: DAO, TO e Gateway.

Esta plugin para o eclipse pode ser obtido gratuítamente na Adobe
ColdFusion 8 Extensions for Eclipse, também vem junto com o Flex Builder.

O arquivo gateway do grupo DAO, não concebe tratamento para tabelas de relacionamento no banco de dados, então criei esse snipet no Cfeclipse que pode ser usado no arquivo Gateway.cfc sobrescrevendo os métodos gerados, assim permitindo um melhor controle para tabelas de relacionamento. A princípio escrevi para tratar relacionamentos entre duas tabelas, mas é bem fácil adaptá-lo para mais tabelas.



<cffunction name="getById" output="false"
access="remote">
<cfargument name="$${idt1}" required="true" />
<cfargument name="$${idt2}" required="true" />
<cfreturn createObject("component",
"$${DAO}").read(arguments.$${idt1},arguments.$${idt2})>
</cffunction>

<cffunction name="getByIdAndSave" output="false" access="remote"
hint="Insere relacionamento - salva se for novo (insert)">
<cfargument name="$${idt1}" required="true" />
<cfargument name="$${idt2}" required="true" />

<cfscript>
var Obj = getById(arguments.$${idt1},arguments.$${idt2});
if(Obj.get$${idt1}() eq 0 AND Obj.get$${idt2}() eq 0){
Obj.set$${idt1}(arguments.$${idt1});
Obj.set$${idt2}(arguments.$${idt2}); save(obj); }
</cfscript>
</cffunction>

<cffunction name="save" output="false" access="remote">
<cfargument name="obj" required="true" />
<cfscript>
return createObject("component", "$${DAO}").create(arguments.obj);
</cfscript>
</cffunction>

<cffunction name="deleteById" output="false"
access="remote">
<cfargument name="$${idt1}" required="true" />
<cfargument name="$${idt2}" required="true" />

<cfset var obj =
getById(arguments.$${idt1},arguments.$${idt2})>
<cfset createObject("component", "$${DAO}").delete(obj)>
</cffunction>