|
From: lscheidegger - x. <lsc...@xd...> - 2003-08-20 14:13:37
|
S=F3 mudei o subject, porque o subject j=E1 mudou faz tempo :)
Bom carlos, acho que vc n=E3o entendeu muito o que estava propondo, o
principal do outro e-mail era:
Ao mapear as interfaces e opera=E7=F5es, n=F3s temos que ter em conta =
que
teremos uma situa=E7=E3o padr=E3o definida para cada uma delas.
O que fazemos normalmente =E9 criar uma defini=E7=E3o padr=E3o para cada
interface, opera=E7=E3o e propriedade, e mesclamos apenas as =
diferen=E7as que
a entidade/classe que est=E1 sendo processada tem.
Supondo que a defini=E7=E3o padr=E3o da opera=E7=E3o add seja (seguindo =
seu
padr=E3o):
[...]
O que estava sendo proposto era menos um formato de c=F3digo, e mais um
conceito.
Esse conceito =E9:
- Vamos mapear tipos de propriedades e tipos de opera=E7=E3o
(link+display+process), como templates.
- Depois disso vinculamos essas propriedades e opera=E7=F5es mapeadas as
classes da camada de neg=F3cio.
Alguns pontos:
- O que o blake possibilitar=E1 =E9 criar rapidamente a camada de =
neg=F3cio, a
camada de neg=F3cios 100% das vezes s=E3o dados, por mais que vc =
persista em
objetos serializados. O fato de vc guardar o id do objeto, em detrimento
do rowid, ou do campo que =E9 primary key, faz com que vc guarde uma
refer=EAncia ao objeto / registro da mesma forma. Em suma, vc sempre =
ter=E1
que guardar um indexador.
- O modelo relacional n=E3o =E9 oposto ao orientado a objeto por mais =
que
seus livros falem isso, eles s=E3o complementares. Principalmente pelo
fato do modelo orientado a objeto ser extremamente trabalhoso na camada
de neg=F3cios, onde seu reaproveitamento =E9 p=EDfio. Enquanto que no =
modelo
que estamos propondo n=E3o.=20
N=E3o adianta termos tudo orientado a objeto, estado da arte, se temos =
uma
dificuldade muito grande de reaproveitar o que j=E1 fizemos.=20
-Quem deve e ser=E1 completamente oop, =E9 o framework.
O resto comentarei no pr=F3prio c=F3digo
>>Desvantagens:
>>- Tem alguma? Me avisem. ;)
>>
>> S=F3 uma, vc escreve pra diabo.
>E voces nao ne?! :D
Na verdade n=E3o, porque o c=F3digo seria s=F3 a v=EDnculo da entidade =
com suas
propriedades e m=E9todos.
/// ESSE PEDA=C7O DE C=D3DIGO SE REFERE A UMA DEFINI=C7=C3O PADR=C3O DE =
UMA
OPERA=C7=C3O N=C3O VINCULADA A NENHUMA ENTIDADE
>> //LINK
>> //define a imagem que aparecer=E1 no bot=E3o=20
>> add.setImage("bt_inclusao.gif");
>
>> //LINK + DISPLAY
>> //Define o caption do link, bem como o t=EDtulo da p=E1gina=20
>> add.setTitle("Inclus=E3o");
>
>> //DISPLAY
>> //define que por default ser=E3o mostrados todas as propriedades no=20
>> formul=E1rio add.getAllProperties(true);
>> //indica que a primary key =E9 gerada automaticamente e n=E3o pode =
ser=20
>>alterada
>>add.hiddenIdentifier(true);
>Para tudo que eu quero descer! Objetos nao tem primary key. Isso eh=20
>coisa do banco de dados - e eu >>>sinceramente nem quero usar um, entao
>suma com essas nojeiras de modelo relacional da minha frente! :D
Entenda isso como um indexador. Eu tb quero usar o prevayler, assim como
quero tb usar o oracle. Cara sinto muito, n=E3o podemos condicionar o =
uso
do Blake com o uso do prevayler.=20
>> //defini=E7=E3o de subt=EDtulo
>> add.setSubtitle("");
>Po, se vc nao vai setar o subtitulo, nao chame o metodo ;)
S=F3 pus isso ai, para mostrar que existe a possibilidade de setar um
subt=EDtulo
>> //PROCESS
>> //define qual =E9 a opera=E7=E3o que ser=E1 chamada ap=F3s o =
processamento do=20
>> formul=E1rio add.setRedirectOperation("report");
>Huh!? Isso ja nao tinha sido mapeado na Action que eu bolei antes? :)
Se tinha sido mapeado, eu n=E0o entendi onde e como.
>> //define a query de processamento
>> add.setQuery("add");
>Que query? De onde vem esse "add"? Magica?
N=E3o defini=E7=E3o padr=E3o, que o wizard respons=E1vel interpretar=E1 =
e procurar=E1
uma query add, ou qq forma de persist=EAncia de dados chamada add. Um =
dos
conceitos do XDev, e que mantemos em arquivos separados as
classes/defini=E7=F5es e suas queries, dessa forma para um User.java, =
tem um
User.sql. Com rela=E7=E3o ao prevayler, teremos que pensar uma =
alternativa.
>> //define se h=E1 algum m=E9todo de valida=E7=E3o que deva ser chamado =
antes=20
>> da inclus=E3o
>>add.setValidationMethod("validate");
>"validate" o que? Como? O que acontece quando a validacao falha?
Supondo que vc precise de um valida=E7=E3o server-side bem espec=EDfica, =
ap=F3s
um processamento, como propriedades unique em databases que n=E3o tem =
esse
tipo de constraint, vc pode por reflection chamar o m=E9todo que vc
indicou nessa fun=E7=E3o, esse m=E9todo far=E1 as consist=EAncias =
necess=E1rio,
gerando um erro, ou retornando true.
>> Supondo que essa seja a defini=E7=E3o padr=E3o de uma propriedade =
string:
>> string.setLenght(100)
>> string.isMandatory(false)
>> string.isVisible(true)
>> string.setCaption("")
>> string.isIdentifier(false)
>Hmm... eu gostei mais do modelo de constraints que eu bolei - assim a=20
>gente nao precisa ficar adicionando um >metodo novo na classe Property=20
>sempre que precisar de outro tipo de validacao.
>Lembrando:
>objeto.addConstraint("propriedade", new Constraint());
Esse n=E3o =E9 um modelo de constraints, e sim uma defini=E7=E3o =
padr=E3o para uma
propriedade do tipo string. Ou seja se vc criar uma propriedade string
em sua entidade, e n=E3o informar mais nada, ela ter=E1 exatamente essa
configura=E7=E3o.
>> Essa =E9 a defini=E7=E3o padr=E3o de um campo num=E9rico
>> (...)
>>
>> Vamos criar uma entidade Usu=E1rio, vou exemplificar apenas a =
inclus=E3o.
>>
>> // Cria a definicao da classe
>> usuario =3D new ClassDefinition("Usuario");
>>
>> // Cria as propriedades que a classe vai ter=20
>> usuario.addProperty("id", Number.class);
>AAAAAARGH! :D
O que est=E1 sendo feito aqui =E9 adicionando uma propriedade, com base =
em
um template.
>> usuario.addProperty("nome", String.class);
>>
>> //define que o campo id =E9 chave prim=E1rio, e que seu valor vem de =
uma=20
>> seguence ou campo auto_increment=20
>> usuario.properties.get("id").isIdentifier(true);
>> usuario.properties.get("id").setType("sequencer");
>AAAAAAAAAAAAAAAARGH!!! :D
Idem.
>> //define a legenda da propriedade nome=20
>> usuario.properties.get("nome").setCaption("Nome do Usu=E1rio");
>Hmm, nao gostei - a internacionalizacao vai pro saco se vc fizer isso=20
>;)
Isso pode facilmente ser resolvido, n=E3o?
>> //addAction (String type,boolean automatic=3Dtrue)=20
>> usuario.addAction("add");
>De novo, qual eh a magica que ta acontecendo aqui?
Vc est=E1 vinculando um template de opera=E7=E3o a uma entidade.
[]'s
Luiz
|