Builder Pattern em ColdFusion

On 14 de outubro de 2014, in CFML, Design Pattern, by andersonstraube

Builder é um padrão de projeto de software que permite a separação da construção de um objeto complexo da sua representação, de forma que o mesmo processo de construção possa criar diferentes representações.
Fonte: http://pt.wikipedia.org/wiki/Builder

Quando usar o Padrão Builder:

Continue reading »

Tagged with:  

State Pattern em ColdFusion

On 13 de outubro de 2014, in CFML, Design Pattern, by andersonstraube

State é um padrão de projeto de software usado para permitir que um objeto altere o seu comportamento quando o seu estado muda. Ao utilizar este padrão, parecerá que o objeto mudou de classe.
O padrão State deve ser utilizado nas seguintes situações:
O comportamento de um objeto depende fortemente do seu estado e ele deve alterar o seu comportamento em tempo de execução dependendo do estado. Os métodos têm instruções condicionais grandes em que as condições dependem do estado do objecto. Este estado é normalmente representado por uma ou mais constantes do tipo enumerado. Frequentemente, vários métodos contém esta mesma estrutura condicional. O padrão State coloca cada ramo da instrução condicional numa classe separada. Desta forma, o estado do objecto pode ser tratado como um objecto ele próprio, o qual pode variar
Fonte: http://pt.wikipedia.org/wiki/State

Quando usar o Padrão State:

Continue reading »

Tagged with:  

Facade Pattern em ColdFusion

On 13 de outubro de 2014, in CFML, Design Pattern, by andersonstraube

Em padrões de projeto de software, um façade (fachada em francês) é um objeto que disponibiliza uma interface simplificada para uma das funcionalidades de uma API, por exemplo. Um façade pode:
Tornar uma biblioteca de software mais fácil de entender e usar;
Tornar o código que utiliza esta biblioteca mais fácil de entender;
Reduzir as dependências em relação às características internas de uma biblioteca, trazendo flexibilidade no desenvolvimento do sistema;
Envolver uma interface mal desenhada, com uma interface melhor definida.
Fonte: http://pt.wikipedia.org/wiki/Fa%C3%A7ade

Em resumo, um Facade é um objeto que proporciona uma visão simplificada de um sistema subjacente mais complexo, o que torna mais fácil de usar e entender.
Vamos exemplificar o uso deste padrão com um sistema bem simples de construção de carros.
Um carro é formado por um conjunto de objetos e cada um deles pode ser complexo, por exemplo: Direção Hidráulica exige uma série de fatores/passos para construir, envolve caixa de direção, coluna de direção, mangueira, bomba hidráulica, polia, correia, etc… Assim como a construção do próprio carro exige uma série de objetos e passos para construí-los, imagine criar um sistema desses com um método de construção de carros onde a lógica está toda envolvida nesse método, ou seja, por si só a construção de um carro já é complexa, some isso com cada objeto subjacente que necessita ser criado para formar o todo.

Continue reading »

Tagged with:  

Mediator Pattern em ColdFusion

On 13 de outubro de 2014, in CFML, Design Pattern, by andersonstraube

Um mediator, em linguagem de programação de computadores, é quem desacopla e gerencia as colaborações entre um grupo de objetos. Define um objeto que encapsula as interações dentre desse grupo.
É um dos 23 padrões de projetos descritos para reutilização de softwares orientados a objetos. Ele permite a unificação da interface de um sistema. Esse padrão é considerado um padrão comportamental devido à maneira como ele pode alterar a execução do software.
Normalmente, um programa é feito por um número muito grande de classes. Então, a lógica e o código são distribuídos entre essas classes. No entanto, quanto mais classes houver no seu projeto, a comunicação entre essas classes será mais complexa. Isso faz com que a leitura e a manutenção do programa fique mais difícil, tal situação acarreta na dificuldade de mudanças no projeto, já que, uma simples mudança pode afetar todo o código e as outras classes.
Com o padrão mediator, a comunicação entre os objetos é encapsulada com um objeto mediador. Isso reduz a dependência entre os objetos que estão se comunicando.
Fonte: http://pt.wikipedia.org/wiki/Mediator

O padrão Mediator fornece uma técnica para tratar a lógica de comunicação complicada entre vários objetos que precisam interagir uns com os outros.

Quando usar?

Abaixo está um exemplo desse tipo de comunicação:

Continue reading »

Tagged with:  

Iterator Pattern em ColdFusion

On 10 de outubro de 2014, in CFML, Design Pattern, by andersonstraube

Iterator, em programação de computadores, permite a “iteração” e um modo de acesso a elementos de um agregado de objetos, sequencialmente, sem exposição de estruturas internas.
Fonte: http://pt.wikipedia.org/wiki/Iterator

Em Orientação a Objetos frequentemente utilizamos estruturas de dados para listar algum conteúdo, normalmente há uma função no componente que retorna esses dados que podem ser de vários tipos, por exemplo: array com índice numérico, estrutura (struct) utilizando uma chave como índice, listas sequenciais, query, e por aí vai….

Continue reading »

Tagged with:  

SocketTimeoutException no MXUnit – Configurando o timeout para o teste

On 9 de outubro de 2014, in CFML, TDD, by andersonstraube

Se você precisa executar um teste unitário que demore, por exemplo: uma leitura de um arquivo grande, uma requisição http ou qualquer outra operação demorada certamente vai ocorrer o seguinte erro no MXUnit:

java.net.SocketTimeoutException: Read timed out; Is the timeout preference
too low? Are you dumping/calling debug() on large data or cfc instances?

Continue reading »

Tagged with:  

Salvar imagem de uma URL externa no ColdFusion

On 9 de outubro de 2014, in CFML, by andersonstraube

Para fazer o download e salvar uma imagem a partir de uma URL utilizando o ColdFusion podemos fazer de várias maneiras, vou mostrar aqui 2 formas bem simples:

1 – Utilizando a tag :


<cfset urlImagem = "http://vidadeprogramador.com.br/wp-content/uploads/2012/06/tirinha618.png" />

<cfimage action="write"	source="#urlImagem#" destination="imagem.png" overwrite="true" />

2 – Utilizando ImageRead (atalho para função acima):


<cfset urlImagem = "http://vidadeprogramador.com.br/wp-content/uploads/2012/06/tirinha618.png" />

<cfset imagem = ImageRead( urlImagem ) />
<cfset ImageWrite(imagem, "imagem.png" ) />

Podemos ainda fazer o download e exibir a imagem no browser:


<cfset urlImagem = "http://vidadeprogramador.com.br/wp-content/uploads/2012/06/tirinha618.png" />

<cfset imagem = ImageRead( urlImagem ) />

<!--- Cria uma imagem temporária e a exibe no browser --->
<cfimage action="writeToBrowser" source="#imagem#">

#FicaDica

Tagged with:  

Get the real IP of the client with ColdFusion

On 9 de outubro de 2014, in CFML, by andersonstraube

The simplest way to know the visitor’s IP address is:



<cfset ip = CGI.REMOTE_ADDR />


But this solution is not 100% accurate because if the client is using a proxy IP is obtained from the proxy server and not the address of the visitor, as if your system is in a cluster with load balance in front of the REMOTE_ADDR will return the balance of the IP and not the actual address of the client.

To solve this problem we can analyze the HTTP header which has a property that stores the original IP whose name is “X-Forwarded-For”. Some cases it returns more than one IP, in the case of using load balance and another proxy in front, so we always got the last IP that will certainly have a more precise result:



<cffunction name="getClientIP" access="public" output="false" returntype="string">

	<cfset var clientIP = "" />

	<cftry>
		<cfif StructKeyExists(GetHttpRequestData().headers, "X-FORWARDED-FOR") >
			<cfset clientIP = GetHttpRequestData().headers["X-FORWARDED-FOR"] />

			<!--- If more than one IP in the case of using a public IP proxy is always the last value --->
			<cfif ListLen( clientIP ) gt 1 >
				<cfset clientIP = ListGetAt( clientIP, ListLen( clientIP ) ) />
			</cfif>

			<cfset clientIP = Trim(clientIP) />
		<cfelse>
			<cfset clientIP = CGI.REMOTE_ADDR />
		</cfif>

		<cfcatch type="any">
			<cfreturn "" />
		</cfcatch>
	</cftry>

	<cfreturn clientIP />
</cffunction>

A hug, until the next.

Tagged with:  

jQuery UI Autocomplete com ColdFusion e Ajax

On 9 de outubro de 2014, in CFML, JavaScript, jQuery, by andersonstraube

Neste post veremos como utilizar o Autocomplete do jQuery UI com um componente ColdFusion utilizando ajax.

A ideia principal é buscar uma pessoa pelo termo informado no campo, com o retorno do ajax podemos popular o campo e exibir abaixo o ID e o nome da pessoa. Utilizaremos o JSON como formato dos dados.

Continue reading »

Tagged with:  

Strategy Pattern em ColdFusion

On 17 de abril de 2012, in CFML, Design Pattern, by andersonstraube

Strategy é um padrão de projeto de software (do inglês design pattern). O objetivo é representar uma operação a ser realizada sobre os elementos de uma estrutura de objetos. O padrão Strategy permite definir novas operações sem alterar as classes dos elementos sobre os quais opera. Definir uma família de algoritmos e encapsular cada algoritmo como uma classe, permitindo assim que elas possam ter trocados entre si. Este padrão permite que o algoritmo possa variar independentemente dos clientes que o utilizam.
Fonte: http://pt.wikipedia.org/wiki/Strategy

Motivação para usar o Padrão Strategy?

– Quando um sistema possui vários componentes que têm semelhança estrutural porém com comportamentos diferentes;
– Quando tem um algoritmo cujo cálculo pode variar dependendo dos parâmetros fornecidos;
– Você não quer que o componente principal seja alterado e/ou “inflado” toda vez que um novo modo (estratégia) é desenvolvida/solicitada.

Continue reading »

Tagged with: