| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/01/2012 09:41:53
|
FernandoFranzini
GUJ Master
![[Avatar]](/images/avatar/33f6c40df1060aa3c548ad2d499eced0.jpg)
Membro desde: 24/04/2009 12:58:16
Mensagens: 1541
Offline
|
Eu não acho ruim não...acho que esta consistente.
A questão é - que adianta vc fazer um estrutura mais genérica, sem aumentar o if sendo que vc tem que criar mais uma pagina para cada estrategia?
Outro fator?
Qual é previsão desse tipo de caso de uso mudar?
normalmente vc vai criar um grupo agora no inicio e ficar estável para muito tempo.
Desde que vc documente no GUIDELINE arquitetural ta consistente sim.
This message was edited 1 time. Last update was at 26/01/2012 09:51:27
|
Fernando Franzini |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/01/2012 12:34:05
|
AbelBueno
Virtual Machine Man
Membro desde: 04/08/2010 09:37:57
Mensagens: 543
Offline
|
Com todo respeito FernandoFranzini, discordo da sua abordagem.
Você afirma que o sistema está mais flexível, extensível e na camada correta.
Eu pergunto: Onde a solução do jakefrog falha neste aspecto?
Pela sua arquitetura, a cada novo perfil você teria que alterar em 3 pontos, na dele apenas em 2.
Uma vantagem adicional: você seria obrigado a implementar o método.
Um if é muito mais simples de se esquecer.
Como disse o gambazinho, você está trocando um if simples por um complexo.
Não vejo vantagens nisso.
Aliás, pensando melhor no código inicial postado, com uma simples convenção você trocaria o if por uma linha, no controller:
Por ser uma página diferente por perfil, a criação do html em si é inevitável.
O que precisamos minimizar é o número de lugares que são afetados a cada mudança (isso facilita a manuntenção).
Em todos os outros pontos acredito que a duplicação é desnecessária.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/01/2012 12:44:10
|
FernandoFranzini
GUJ Master
![[Avatar]](/images/avatar/33f6c40df1060aa3c548ad2d499eced0.jpg)
Membro desde: 24/04/2009 12:58:16
Mensagens: 1541
Offline
|
Por ser uma página diferente por perfil, a criação do html em si é inevitável.
É isso que ta matando a decisão.....
adicionar uma pagina + 1 if não faz diferença....kkkkk Se existe manutenção...existe!
Eu particularmente, na verdade faria de tudo para não adicionar pagina a cada no perfil de login, deixando tudo flexível....Ou seja, uma unica pagina por perfil. Ou seja, mudança de filosofia....
Mesmo usando enum, ele teria que adicionar mais um valor nas constantes ao inves do if...ou seja...ficariamos na mesma....
Mas veja que o cenário do amigo ai......
This message was edited 1 time. Last update was at 26/01/2012 12:45:34
|
Fernando Franzini |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/01/2012 12:55:36
|
AbelBueno
Virtual Machine Man
Membro desde: 04/08/2010 09:37:57
Mensagens: 543
Offline
|
FernandoFranzini wrote:
É isso que ta matando a decisão.....
adicionar uma pagina + 1 if não faz diferença....kkkkk Se existe manutenção...existe!
Eu particularmente, na verdade faria de tudo para não adicionar pagina a cada no perfil de login, deixando tudo flexível....Ou seja, uma unica pagina por perfil. Ou seja, mudança de filosofia....
Mesmo usando enum, ele teria que adicionar mais um valor nas constantes ao inves do if...ou seja...ficariamos na mesma....
Mas veja que o cenário do amigo ai......
O if extra faz diferença justamente na hora da manuntenção, é muito simples esquecer.
Se você pode resolver com menos pontos de alteração, para que resolver com mais?
O uso de enum pelo menos te forçaria a passar algum valor para o getPage() , evitando que esqueça de implementar esta parte.
Se você tiver o sistema com views em desktop, mobile, web, etc.. terá que ter um if em cada view.
Poderia se resumir a uma linha de código por view realizando o mapeamento.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/01/2012 13:14:00
|
FernandoFranzini
GUJ Master
![[Avatar]](/images/avatar/33f6c40df1060aa3c548ad2d499eced0.jpg)
Membro desde: 24/04/2009 12:58:16
Mensagens: 1541
Offline
|
O if extra faz diferença justamente na hora da manuntenção, é muito simples esquecer.
Se ambos não forem alterados o sistema não vai funcionar..ou seja, não tem como esquecer....
O esforço é o mesmo...kkkkkkk
|
Fernando Franzini |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/01/2012 13:55:54
|
jakefrog
GUJ Expert
![[Avatar]](/images/avatar/6e2400ec18b6f1952f1053c65df7a8b6.png)
Membro desde: 22/01/2007 22:00:53
Mensagens: 4200
Offline
|
FernandoFranzini wrote:Mesmo usando enum, ele teria que adicionar mais um valor nas constantes ao inves do if...ou seja...ficariamos na mesma....
Sim, mas se o if precisar ser utilizado em algum outro lugar... Aí vai ter que duplicar, duplica é feio, teria que criar uma classe para ter o método dos ifs expostos...
Desculpe, mas ainda prefiro o enum.
Como sempre, isso é gosto. Cabe ao dono do post escolher o melhor e ir fundo. [=
|
Meu blog sobre java uaiHebert.com
Conceitos OO - Diga, não pergunte!, Lei de Demeter
TDD Primeiros Passos, JUnit com HSQLDB, JPA e Hibernate, Cobertura de testes com JUnit Ant e Emma, Cobrindo seus testes com Cobertura, JUnit, HSQLDB, JPA
Código Limpo: Partes: 01,02,03,04,05
Web/JSF - Criando um WebServer, Tratando Exceções, Autenticação de Usuários (Filter/Servlet), JSF - Hello World, AutoComplete, JSF: Converter e Bean Auto Complete, Validação de Login de Usuário com JSF e JAAS, JSF Exibindo Objeto e Mensagens após Redirect, JSF Exemplos Simples com Ajax, JSF Parametros por Get Request RESTFullAplicação Web Completa JSF EJB JPA JAAS, Lazy JSF Datatable Pagination (Primefaces)
Design Pattern - Strategy, Design Pattern - Observer (Parte 01), Design Pattern - Observer (Parte 02)
Business (JPA)- Hibernate 3 com JPA 2, Create schema script: Ant, Hibernate 3 e JPA 2, TableGenerator Chave Primária Simples, SequenceGenerator,Chave Primária Composta, Mapeando Datas (Date) e Enum, Mapeando Duas Tabelas em uma Classe, @OneToOne Unidirecional e Bidirecional, @OneToMany e @ManyToOne Unidirecional e Bidirecional, @ManyToMany Unidirecional e Bidirecional, Ordernando listas e utilizando Map como atributo mapeado,Uma tabela por herança, JPA Uma Classe por Sub-Classe, JPA Consultas e Dicas, [HOT]Quatro soluções para LazyInitializationException[HOT]
SCJP(1.6 - Ingles - 29/12/2009)
SCWCD(1.5 - Ingles - 30/06/2010)
Vamos em frente que atrás vem gente! |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/01/2012 08:21:46
|
gambazinho
Java Ninja
Membro desde: 15/09/2010 10:27:22
Mensagens: 255
Offline
|
aparentemente um problema sem solução. no grupo de do jsf também não souberam me dar uma resposta.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/01/2012 08:36:01
|
jakefrog
GUJ Expert
![[Avatar]](/images/avatar/6e2400ec18b6f1952f1053c65df7a8b6.png)
Membro desde: 22/01/2007 22:00:53
Mensagens: 4200
Offline
|
gambazinho wrote:aparentemente um problema sem solução. no grupo de do jsf também não souberam me dar uma resposta.
Acostume-se a isso.
Quando se trata de padrão de projeto/OO vai ser raro os momento que você irá encontrar uma resposta definitiva.
Eu ainda penso, em minha opinião de quem ainda está aprendendo muito, que você deveria realmente utilizar o Enum.
Com ele você não irá precisar fazer ifs, e nem irá salvar a página no modelo. [=
|
Meu blog sobre java uaiHebert.com
Conceitos OO - Diga, não pergunte!, Lei de Demeter
TDD Primeiros Passos, JUnit com HSQLDB, JPA e Hibernate, Cobertura de testes com JUnit Ant e Emma, Cobrindo seus testes com Cobertura, JUnit, HSQLDB, JPA
Código Limpo: Partes: 01,02,03,04,05
Web/JSF - Criando um WebServer, Tratando Exceções, Autenticação de Usuários (Filter/Servlet), JSF - Hello World, AutoComplete, JSF: Converter e Bean Auto Complete, Validação de Login de Usuário com JSF e JAAS, JSF Exibindo Objeto e Mensagens após Redirect, JSF Exemplos Simples com Ajax, JSF Parametros por Get Request RESTFullAplicação Web Completa JSF EJB JPA JAAS, Lazy JSF Datatable Pagination (Primefaces)
Design Pattern - Strategy, Design Pattern - Observer (Parte 01), Design Pattern - Observer (Parte 02)
Business (JPA)- Hibernate 3 com JPA 2, Create schema script: Ant, Hibernate 3 e JPA 2, TableGenerator Chave Primária Simples, SequenceGenerator,Chave Primária Composta, Mapeando Datas (Date) e Enum, Mapeando Duas Tabelas em uma Classe, @OneToOne Unidirecional e Bidirecional, @OneToMany e @ManyToOne Unidirecional e Bidirecional, @ManyToMany Unidirecional e Bidirecional, Ordernando listas e utilizando Map como atributo mapeado,Uma tabela por herança, JPA Uma Classe por Sub-Classe, JPA Consultas e Dicas, [HOT]Quatro soluções para LazyInitializationException[HOT]
SCJP(1.6 - Ingles - 29/12/2009)
SCWCD(1.5 - Ingles - 30/06/2010)
Vamos em frente que atrás vem gente! |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 27/01/2012 08:50:45
|
FernandoFranzini
GUJ Master
![[Avatar]](/images/avatar/33f6c40df1060aa3c548ad2d499eced0.jpg)
Membro desde: 24/04/2009 12:58:16
Mensagens: 1541
Offline
|
aparentemente um problema sem solução. no grupo de do jsf também não souberam me dar uma resposta.
Claro que não tem solução...é problema de filosofia e não de código...
Vc ta alterando o caso de uso da solução...não exite magica que faça vc mudar o requisito da solução e a não tenha que fazer nada pq o sistema esta generico e flexível ao ponto de engloba tal mudança sem manutenção.
A questão é q vc mesmo se pré-formatou a criar uma classe a cada nova filosofia de autenticação....por que vc fez isso?
não teria como vc mudar a filosofia?
- Não importa quantos diferente usuários sejem adicionados, cria uma abstração que encapsule isso genericamente e faça 1 pagina unica de autenticação para todos!
- Use configurações de soft-code para parametrizar isso.
- Use classes com campos dinâmicos usando MAP.
- Etc e por ai.....
|
Fernando Franzini |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 31/01/2012 06:39:34
|
gambazinho
Java Ninja
Membro desde: 15/09/2010 10:27:22
Mensagens: 255
Offline
|
com todo respeito FernandoFranzini,
não estou esperando mágica alguma, apenas estou tentando resolver o problema que vc mesmo apontou e que eu já desconfiava:
Vc esta correto sim!
Prefira estrutura polimórficas sobre controle de IF's.
No caso vc optou bem, implementando o padrão STRATEGY.
Unico erro é que vc furou a camada, colocando a pagina dentro do modelo.
A regra de negocio deve ser independente de infra estrutura e detalhes de front-end.
compreende porque não queria usar enum?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 31/01/2012 06:49:36
|
windsofhell
GUJ Master
Membro desde: 15/06/2007 08:31:17
Mensagens: 1687
Localização: Stockholm - Sweden
Offline
|
Eu acho gambi.
E se o seu usuario eh esperto o bastante para descrobrir que a interface de administracao eh http://seu_site/administrador.html ???
Fora que eu nao gosto nada que contenha "magic strings".
//Daniel
This message was edited 1 time. Last update was at 31/01/2012 06:50:36
|
Nao respondo MP!!!
Site: http://downhillracer.wordpress.com |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 31/01/2012 06:59:51
|
gambazinho
Java Ninja
Membro desde: 15/09/2010 10:27:22
Mensagens: 255
Offline
|
[quote]
Eu acho gambi.
E se o seu usuario eh esperto o bastante para descrobrir que a interface de administracao eh http://seu_site/administrador.html ???
Fora que eu nao gosto nada que contenha "magic strings".
[/quote]
desculpe mas não consegui ver problema no fato do usuário ter conhecimento de que existe uma página administrador.html?
o problema é segurança de acesso, é isso? um Filter resolveria esse problema.
This message was edited 3 times. Last update was at 31/01/2012 07:01:38
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 31/01/2012 07:07:35
|
FernandoFranzini
GUJ Master
![[Avatar]](/images/avatar/33f6c40df1060aa3c548ad2d499eced0.jpg)
Membro desde: 24/04/2009 12:58:16
Mensagens: 1541
Offline
|
Ola gambazinho
Seu caso esta claro....ambas opções terão manutenções....escolha uma delas e bola para frente.
|
Fernando Franzini |
|
|
 |
|
|
|
|