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 |