Qual padrão de projetos é este? E há como refatora-lo?

2 respostas
MrDataFlex

Pessoal, estou construindo uma classe utilizando a premissa de "humane interface´s". Porém, não sei qual o nome legítimo deste padrão de projeto. Acredito que seja o Builder, me confirmem, por favor!

Gostaria de uma ajuda, para avaliar meu código. Queria saber se está de acordo com o padrão e se há como melhora-lo.

O intúito do mesmo é apenas gerar um simples sql-string. Segue:

public interface SqlBuilder {
	SqlBuilder select(String fields);
	SqlBuilder from(String from);
	SqlBuilder where(String condition);
}
public class SqlConcreteBuilder implements SqlBuilder {

	private StringBuilder product = new StringBuilder();



	public SqlBuilder from(String from) {
		this.product.append(" FROM "+from);
		return this;
	}

	public SqlBuilder where(String condition) {
		this.product.append(" WHERE "+condition);
		return this;
	}

	public SqlBuilder select(String fields) {
		this.product.append("SELECT "+fields);
		return this;
	}



	public static void main(String[] args) {
		SqlBuilder select = new SqlConcreteBuilder()
		.select("*")
		.from("tabela");
		System.out.println(select);


	}

	@Override
	public String toString() {
		return this.product.toString().toUpperCase();
	}

}

2 Respostas

sergiotaborda

MrDataFlex:
Pessoal, estou construindo uma classe utilizando a premissa de “humane interface´s”. Porém, não sei qual o nome legítimo deste padrão de projeto. Acredito que seja o Builder, me confirmem, por favor!

Gostaria de uma ajuda, para avaliar meu código. Queria saber se está de acordo com o padrão e se há como melhora-lo.

O intúito do mesmo é apenas gerar um simples sql-string. Segue:

  1. O padrão é o Builder. O Padrão Builder não começa com uma interface.
    O builder é um objeto normal.

  2. O uso de interface fluente com o builder é mmuuiiittoo util. Parece até que são a mesma coisa (normalmente são :lol: )

  3. Repare que o programador pode invocar os métodos na ordem que quiser. Com o seu exemplo isso não cria um SQL válido.
    O objetivo do builder é construir outro objeto em estado válido. Se isso não acontece sempre , o builder é inutil.

  4. O padrão builder normalmente vem com um método chamado build() ou alguma coisa assim,que é o método que realmente constroi o objeto final. O resto dos métodos do builder são apenas para dizer qual é o estado do objeto final

michelantunes

Cara,

A idéia é boa, mas hoje em dia temos artifícios (JPA) que não há necessidade de gerar este trabalho todo.
Mesmo assim, esta classe precisaria de controles para verificar a existência de cláusulas where.

Abs,

Criado 3 de setembro de 2008
Ultima resposta 3 de set. de 2008
Respostas 2
Participantes 3