Olá pessoal.
Estou desenvolvendo uma aplicação onde planejei utilizar os seguintes frameworks:
JSF2,
Spring3
Spring Security
Hibernate - JPA.
Porém, o cenário atual é de um projeto de pequeno a médio porte (em termos de complexidade). A maior exigência é que o sistema seja escalável.
Com todas estas camadas, comecei a ter a sensação de estar caindo em um “over engineering”. Comecei a questionar se realmente preciso ter tantas camadas.
Porque não utilizar somente JSF2 + Hibernate - JPA? Porque não deixar minhas classes de negócio organizadas simplesmente em um pacote separado dos meus managed beans? Estudar outro framework que me atenda com mais simplicidade?
Devido a estas questões, gostaria de saber a opinião de vocês.
Consideram que todas estas camadas são sempre necessárias independente do projeto?
Gostaria de poder discutir este tópico com vocês do GUJ galera.
Abraços.
Lembre-se de um princípio arquitetural muito importante: KISS (keep it simple, stupid).
Não tô te chamando de stupid não, é o nome do princípio que é assim mesmo, ok?
Portanto, quanto mais simples for o projeto, de modo que atenda suas necessidades, melhor para dar manutenção, etc.
Legal Roger.
Eu realmente já vi este princípio em algumas bibliografias hehehe…
Sem problemas quanto a definição de KISS.
Considerando o cenário que descrevi, você vê algum problema em utilizar apenas o JSF e criar minhas próprias classes de negócio (services) desvinculadas de algum framework (Spring, EJB, etc) ?
Obrigado
Adolfo, acredito que seja um pouco mais que camadas…
vc esta misturando os frameworks que irá utilizar com as camadas que vai implementar.
voce tem que avaliar o motivo de uso dessas ferramentas1
pq Spring?
pq jpa?
pq jsf?
camadas voce vai fazer independente dos frameworks.
Ou (AZOLIVRE) usar todos esses framesWks e nao implementar nehuma camada.
Encontre um motivo para cada ferramenta. e depois use.
Defina responsabilidades para sua camadas e depois implemente.
Boa sorte, e bom projeto
Eu concordo com o ivansalvadori. A gente as vezes começa o desenvolvimento pelo framework, mas não acho que está correto. Comece com uma visão SIMPLES da arquitetura, se for uma aplicação enterprise, sugiro dar uma olhada na sugestão do Fowler, de 3 camadas: Presentation, Domain e Data Source. Conforme o projeto vai evoluindo você pensa em algo mais sofisticado.
Faça algumas provas de conceito com servlet e JSP puro mesmo, faça um ou dois métodos simulando um acesso ao banco pra validar esta arquitetura. Isto é lagal porque dá pra você “sentir” a arquitetura, identificar a responsabilidade das camadas sem se confundir com os conceitos dos frameworks. Com isso, você conhecendo os requisitos da sua aplicação já dá para ter uma idéia de qual framework vai te servir melhor. A tríade (JSF + Spring + JPA) ou (JSF + EJB + JPA) é uma escolha mais popular, e resolve a maioria dos problemas, mas é preciso avaliar.
Também inclua TDD na sua rotina, isto faz uma diferença muito grande.
Adolfo
Me parece que vc partiu da escolha das tecnologias antes mesmo de avaliar a sua necessidade. Isto é muito comum nas fábricas de software. Acredito que a melhor tecnologia é aquele que vc e sua equipe domina tecnicamente e conceitualmente, e cuja tecnologia atende as necessidades do cliente.
Quanto ao quesito, escalável. Aqui a coisa é mais embaixo, não se diz que uma aplicação é escalável pq usa JSF com Spring. Uma aplicação é escalável quando vc faz consegue criar escalabilidade, seja vertical ou horizontal.
Onde vertical significa mais hardware e horizontal mais sistemas (mais instâncias da sua aplicação) diponíveis …
técnicas de load balance, fail over e afins costumam ser estudadas nesses casos.