Minimizando impactor futuros em alteracoes no sistema

13 respostas
P

Ola,

Ando lendo alguns livros muito bons sobre engenharia de software, mas uma coisa ainda nao consegui responder.
O que poderia ser feito par minimizar que a adicao de um novo campo (que aparecera na interface) necessite de mundancas em praticamente todas as camadas (interface, modelo, persistencia).

Acho que nao tem jeito nao ne?? Nesse caso temos que sair mexendo por tudo, certo?

Abracos

13 Respostas

_fs

Hm, usando Hibernate e alguns métodos espertinhos na interface para popular os objetos antes de enviar para o server, normalmente basta adicionar o campo na interface e a propriedade no objeto.

sergiotaborda

pen_fold_uk:
Ola,

Ando lendo alguns livros muito bons sobre engenharia de software, mas uma coisa ainda nao consegui responder.
O que poderia ser feito par minimizar que a adicao de um novo campo (que aparecera na interface) necessite de mundancas em praticamente todas as camadas (interface, modelo, persistencia).

Acho que nao tem jeito nao ne?? Nesse caso temos que sair mexendo por tudo, certo?

Não. Se o seu sistema necessite ser dinamico use metadados e HashDTO. Use Proxies dinamicos para criar objetos com itnerfaces especiais, se necessário. O ponto é que se o campo é adicionado ele automaticamente aparece em todas as camadas. As camadas têm que saber reagir a isso.

P

Obrigado pessoal,

Sergio, isso seria algum pattern?

Se eu tiver usando EJB3, JPA e JSF (por exemplo).
Pelo que voce descreveu eu precisaria apenas adicionar a nova coluna no BD??
E adicionar o novo campo na respectiva tela?

desculpe, nao entendi muito bem seu exemplo. Sabe de algum material online que exemplifica essa sua solucao??

Muito obrigado

aleck

pen_fold_uk:
Ola,

Ando lendo alguns livros muito bons sobre engenharia de software, mas uma coisa ainda nao consegui responder.
O que poderia ser feito par minimizar que a adicao de um novo campo (que aparecera na interface) necessite de mundancas em praticamente todas as camadas (interface, modelo, persistencia).

Acho que nao tem jeito nao ne?? Nesse caso temos que sair mexendo por tudo, certo?

Abracos

Faça um bom design e mantenha seus testes unitários ou similares atualizados.

Literatura a respeito:

sergiotaborda

pen_fold_uk:
Obrigado pessoal,

Sergio, isso seria algum pattern?

Se eu tiver usando EJB3, JPA e JSF (por exemplo).
Pelo que voce descreveu eu precisaria apenas adicionar a nova coluna no BD??
E adicionar o novo campo na respectiva tela?

desculpe, nao entendi muito bem seu exemplo. Sabe de algum material online que exemplifica essa sua solucao??

como eu falei, as camadas tem que ser conscientes que os campos podem ser alterados. Por exemplo, as telas tem que mostrou ou não o campo. o DAO tem que mapear ou não o campo, etc…
Esta é uma tecnica de “hot deploy” de campos.
Se vc estiver usado EJB, JPA ou JSF é extreamente dificil implementar estas tecnicas. Esqueça o hot deploy.
Ai vai ter que ir pelo que o LIPE falou e refactorando todas as camadas onde necessário.

pcalcado

Rails faz isso de maneira bem simples.

joellobo

Encapsule o que varia!

att,
Joel Lobo

J

Se o que vc quer é definir seus campos apenas uma vez, existe uma abordagem
chamada “naked objects” (=objetos pelados) que consiste em expor diretamente
uma visualização automática dos objetos de negócio.

A interface usuário não é programada separadamente como no pattern MVC.
O ambiente de runtime usa introspecção / reflexão para mostrar os dados
e funcionalidade dos objetos de negócio de maneira transparente.

Em Java, há duas implementações mais conhecidas: JMatter e NakedObjects.
Segue o link de entrada da Wikipedia:

Rubem_Azenha

pcalcado:

Rails faz isso de maneira bem simples.

Eita, nem a interface precisa mudar?

s4nchez

Normalmente precisa sim. A exceção neste caso é quando se usa scaffolding.

Rubem_Azenha

Não sou o maior especialista em Rails do mercado, mas pelo que eu sei o scaffold serve só para situações muito simples, protipação ou para gerar o esqueleto (sendo que neste caso não resolve o problema). Não é algo para ser usado profissionalmente em produção, confere?

s4nchez

Confere sim.

Não porque a solução não fica profissional, mas sim porque dificilmente um requisito vai ser tão simples quanto o que o scaffold gera :slight_smile:

P

Obrigado pessoal!

Abracos

Criado 26 de março de 2008
Ultima resposta 3 de abr. de 2008
Respostas 13
Participantes 9