|
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
|