From: Carlos V. <ca...@bl...> - 2003-08-19 03:20:57
|
On Mon, 2003-08-18 at 22:49, Rafael Steil wrote: > > Hmm...ainda falta mta coisa aih. Qual eh o objeto que representa a > acao de um botao, quando clicado, por exemplo? > > bom, atualmente nao existe um objeto que representa um botao, se bem > entendi o que vc esta pensando... o que temos eh uma tag de link, onde > dizemos o tipo dela ( continuar, boltar, inserir, submit, cancelar etc > ), a qual vai para uma lista de links, e entao o sistema, com base no > tipo, constroi as tags xml relacionadas, passando os parametros do link > ( que estao na configuracao dele tmb ).... eh mais ou menos assim que > funciona. A "acao do botao" seria a url/pagina/processamento disparado > pelo click? se for isso, nao ha relacao alguma, pois o link/acao eh uma > operacao no sistema ( report, insert, edit, o que quer que seja, como um > link qualquer ). > Hmm, conflitou ja :D A minha visao sobre como o Inectis/Blake vai funcionar eh a seguinte: Suponha que vc esta fazendo um cadastro de usuarios e grupos. Suponha que vc estivesse usando uma API imaginaria, que faz todo o trabalho sujo pra vc. Se coloque na pele dum usuario do Inectis/Blake: [se preparem pra um loooongo bloco de codigo lindo] // Cria as definicoes das classes usuario = new ClassDefinition("Usuario"); grupo = new ClassDefinition("Grupo"); // Cria as propriedades que as classes vao ter nome = new Property("nome", String.class); senha = new Property("senha", String.class); grupos = new Property("grupos", Set.class); usuarios = new Property("usuarios", Set.class); // Adiciona as propriedades as classes usuario.addProperty(nome); usuario.addProperty(senha); usuario.addProperty(grupos); grupo.addProperty(nome); grupo.addProperty(usuarios); // Adiciona os constraints que cada propriedade // vai ter nesta classe especifica usuario.addConstraint("nome", new MinimumSizeConstraint(6)); usuario.addConstraint("nome", new RequiredConstraint()); usuario.addConstraint("senha", new MinimumSizeConstraint(6)); usuario.addConstraint("senha", new RequiredConstraint()); usuario.addConstraint("grupos", new RequiredConstraint()); usuario.addConstraint("grupos", new MinimumCollectionSizeConstraint(1)); usuario.addConstraint("grupos", new TypeMatchConstraint(grupo)); grupo.addConstraint("nome", new MinimumSizeConstraint(6)); grupo.addConstraint("nome", new RequiredConstraint()); grupo.addConstraint("usuarios", new TypeMatchConstraint(usuario)); // Adiciona as acoes que cada objeto usuario pode receber add = new Action("add"); del = new Action("delete"); edit = new Action("edit"); dup = new Action("duplicate"); // Define a regra de negocio para cada acao add.addParameter(0, grupo); add.addParameter(1, usuario); add.setScript( function(system, params) { grupo = system.findGrupo(params.get("grupo")); grupo.addUsuario(params.get("usuario")); } ); del.addParameter(0, grupo); del.addParameter(1, usuario); del.setScript( function(system, params) { grupo = system.findGrupo(params.get("grupo")); grupo.removeUsuario(params.get("usuario")); } ); edit.addParameter(0, grupo); edit.addParameter(1, usuario); edit.addParameter(2, nome); edit.addParameter(3, senha); edit.setScript( function(system, params) { grupo = system.findGrupo(params.get("grupo")); usuario = grupo.findUsuario(params.get("usuario")); PropertyHelper.changeAllProperties(usuario, params); } ) dup.addParameter(0, grupo); dup.addParameter(1, usuario); dup.addParameter(2, nome); dup.setScript( function(system, params) { grupo = system.findGrupo(params.get("grupo")); usuario = grupo.findUsuario(params.get("usuario")); novo = new Usuario(); PropertyHelper.changeAllProperties(novo, PropertyHelper.getAllProperties(usuario)); novo.setNome(params.get("nome")); grupo.addUsuario(novo); } ) usuario.addAction(add); usuario.addAction(del); usuario.addAction(edit); usuario.addAction(dup); // Adiciona as acoes que cada objeto grupo pode receber add = new Action("add"); del = new Action("delete"); edit = new Action("edit"); dup = new Action("duplicate"); // Define a regra de negocio para cada acao add.addParameter(0, grupo); add.setScript( function(system, params) { system.addGrupo(params.get("grupo")); } ); del.addParameter(0, grupo); del.setScript( function(system, params) { system.removeGrupo(params.get("grupo")); } ); edit.addParameter(0, grupo); edit.addParameter(1, nome); edit.addParameter(2, usuarios); edit.setScript( function(system, params) { grupo = system.findGrupo(params.get("grupo")); PropertyHelper.changeAllProperties(grupo, params); } ) dup.addParameter(0, grupo); dup.addParameter(1, nome); dup.setScript( function(system, params) { grupo = system.findGrupo(params.get("grupo")); novo = new Grupo(); PropertyHelper.changeAllProperties(novo, PropertyHelper.getAllProperties(grupo)); novo.setNome(params.get("nome")); system.addGrupo(grupo); } ) usuario.addAction(add); usuario.addAction(del); usuario.addAction(edit); usuario.addAction(dup); // ------------------------------------------------------------ // ACABOU! ALELUIA! :D // ------------------------------------------------------------ Agora vamo la'. Pra que eu tou falando disso tudo? Vantagens e desvantagens deste modelo: Vantagens: - Totalmente independente da camada de visualizacao - Super-facil de usar - Properties e Actions altamente reutilizaveis - Totalmente independente da interface que a gente vai usar pra definir tudo isso (a gente nao quer que os caras facam esse JavaScript todo no braco ne? :) Desvantagens: - Tem alguma? Me avisem. ;) []'s -cv |