Sugestão de Implementação com Design Partner

5 respostas
fsfnit

Caros colegas,
Sempre que possível gosto de utilizar algum design partner em meus códigos.
Tenho um em particular que fico em dúvida sobre a real necessidade e sobre qual usar.

Os requisitos são os seguintes:

  1. Recebo em um método parâmetros provenientes de servlet, que chega como string (obviamente).
  2. Essa string possui 2 parâmetros que devo decompor (através de splits).
  3. O primeiro parâmetro a ser decomposto dessa string é uma ação, como por exemplo: incluir_ids ou excluir_ids.
  4. O segundo parâmetro seriam quais id´s seriam incluidas ou excluídas.

De cara pensei no padrão factory para as ações de incluir e excluir.

Mas ai entra também uma dúvida sobre a implementação desse padrão: A classe AcaoFactory seria a responsável por decompor e validar os parâmetros da string, e após isso atribuir para a classe correta ?

O que acham ?
Opinem por favor.[google]

Obs.: Vou tentar depois colar as classes aqui para vocês opinarem.

Obrigado.

public class AcaoRun {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		//Esse seria o parâmetro obtido da servlet
		String parametroDaSerlvet = "incluir_id={0001,0002,0003,0004}";
		
		Acao acao = AcaoFactory.getAcao( parametroDaSerlvet );
		if ( acao == null ){
			System.out.println("Acao nula");
			return;
		}
		
		acao.processarID();
		

	}
}
public class AcaoFactory {
	final static String ACAO_INCLUIR = "incluir_id";
	final static String ACAO_EXCLUIR = "excluir_id";
	private static String[] listaDeID;

	public static Acao getAcao(String param){
		// Caso fosse java 7 poderia utilizar Switch !!!
		if ( param.contains( ACAO_INCLUIR ) && validarIDs(param) ){
			return new Inclusao(listaDeID);

		}else if ( param.contains( ACAO_EXCLUIR ) && validarIDs(param) ){
			return new Exclusao(listaDeID);
		}

		return null;
	}

	public static boolean validarIDs( String parametro ){
		if ( parametro.contains("={") && parametro.contains("}") ){
			try {
				// Removendo caraceteres não utilizados
				parametro = parametro.replace(ACAO_INCLUIR, "");
				parametro = parametro.replace(ACAO_EXCLUIR, "");
				parametro = parametro.replace("={", "");
				parametro = parametro.replace("}", "");
				listaDeID = parametro.split(",");
				return true;
			} catch (Exception e) {
				// TODO: handle exception
				return false;
			}
		}
		return false;
	} 
}
public class Exclusao extends Acao {
	
	public Exclusao(String[] listaDeID) {
		this.setListaDeid(listaDeID);
	}

	@Override
	public void processarID() {
		// Realiza as eclusões dos ids ...... Exemplifico com esse for alguma coisa
		for (int i = 0; i < this.getListaDeid().length; i++) {
			System.out.println("Lista Exclusao " + getID(i) );
		}
	}
}
public class Inclusao extends Acao{

	public Inclusao(String[] listaDeID) {
		this.setListaDeid(listaDeID);
	}

	@Override
	public void processarID() {
                // Realiza as inclusões dos ids ...... Exemplifico com esse for alguma coisa
		for (int i = 0; i < this.getListaDeid().length; i++) {
			System.out.println("Lista Inclusao " + getID(i) );
		}
	}
}
public abstract class Acao {

/** Array onde os IDS que serão incluídos ou excluídos ficarão armazenados */
private String[] listaDeid;

	
	public void processarID(){}
	
	public void setListaDeid(String[] listaDeID2) {
		this.listaDeid = listaDeID2;
	}
	
	public String[] getListaDeid() {
		return listaDeid;
	}

        /*
         * Obtém um id da lista
         */
	public String getID( int id ){
		return this.listaDeid[id];
	}
}

5 Respostas

fsfnit

Opina ai galera. Já coloquei as classes.

Minha maior dúvida foi na implementação do método que valida os parâmetros.
Achei que ficou feio e com código repetitivo.

Toda a crítica é construtiva, desde que seja educada é claro.

drigo.angelo

Cara, já que toda crítica é uma crítica construtiva, Design Partner tá meio estranho… seria um Sócio em Design?..

Soluções efetivas para problemas recorrentes (Padrões de Projeto) são Design Patterns flw ?!?

E quanto ao método que valida os parametros, acho que ficaria legal se utilizasse regex em alguns momentos… você sabe usar regex? este site tem alguns exemplos e uma introdução bem abrangente sobre isso :smiley: (está em ingles)

fsfnit

drigo.angelo:
Cara, já que toda crítica é uma crítica construtiva, Design Partner tá meio estranho… seria um Sócio em Design?..

Soluções efetivas para problemas recorrentes (Padrões de Projeto) são Design Patterns flw ?!?

E quanto ao método que valida os parametros, acho que ficaria legal se utilizasse regex em alguns momentos… você sabe usar regex? este site tem alguns exemplos e uma introdução bem abrangente sobre isso :smiley: (está em ingles)

Não entendi bem o que vc quis dizer com sobre o termo Design Partner, mas também isso não tem muita importância no momento. rssss

Mas a dica do regex é bem vida.

drigo.angelo

É porque o termo correto é Design Pattern, em tradução livre, Padrão de Design, conhecido aqui como Padrão de Projeto, e não Design Partner :smiley:

Partner em inglês é Sócio rsrsr

[]'s

fsfnit

drigo.angelo:
É porque o termo correto é Design Pattern, em tradução livre, Padrão de Design, conhecido aqui como Padrão de Projeto, e não Design Partner :smiley:

Partner em inglês é Sócio rsrsr

[]'s

Ahhh, agora que fui ver que esqueci um “T” do Pattern. Obrigado por me lembrar.

Criado 20 de fevereiro de 2011
Ultima resposta 21 de fev. de 2011
Respostas 5
Participantes 2