Tecnologias a utilizar em sistema com MVC

[quote=leopoldof]Estou estudando tecnologias para desenvolver um sistema (baseado em swing) em camadas (MVC) distribuído. (ordens he he he )

Pesquisei aqui no fórum e achei tópicos interessantes sobre esse assunto. Mas algumas dúvidas surgiram sobre o que se usar hoje em dia. Segundo a pesquisa, foi discutido e chegado a uma conclusão de separar a Visualisação (No Cliente) do Controle e Modelo (No servidor)…
[/quote]

Já começa mal… .oO(será que é tão dificil de entender que MVC não é separação em camadas ?! )

MVC não é separação em camadas. A visualização o controle o modelo estão todos no cliente. o servidor tem seu proprio modelo, controle e visualização.

com Swing distribuído vc pode usar JNLP (Java Web Start) para distribuir o cliente
o cliente pode comunicar com o servidor via HTTP. HTTP é bom porque atravesssa firewalls, mas vc pode usar outro protolo
se o sistema funcionar em uma rede interna.

O sistema tem vários andares : visualização (swing = muitos listeners, implementação de componentes proprios ,etc… )
Sistema de controle, aqui é uma classe normal que é invocada pelo swing (provavelmente em outroa thread).
Essa classe invocará serviços remotos do servidor.

O servidor acata os pedidos remotos , processa e responde. EJB é uma boa para isto, mas um simples Servlet com controle transacional tb funciona ( tlv não tão escalável, mas … )
Básciamente vc cria um objeto, serializa, manda para o outro lado, desserializa e processa. Se serializa em RMI, HTTP ou JMS não importa muito.

Se vc precisar que o servidor chame funções no cliente, use JMS.

Vc pode usar webservices tb, mas ai se o servidor precisa chamar o cliente ele precisa rodar um servidor HTTP para receber as chamadas. Neste caso pode usar o Jetty. O protocolo de webservice é bom que vc crie o seu. Use REST em vez de SOAP se for por este caminho.

Outra coisa que vc vai precisar é um cache no cliente. Sem ele é impossivel ter algo que funcione.
uma boa divisão de camada ajuda. O uso de serviços e repositorios com domainstores locais e sincronizados (JGroups, JXTA) tb ajuda muito. Aqui vc pode usar algo na linha do Prevayler ou do Space4J mas como “memoria cache” . Outra opção é usar banco embutidos apenas em memoria como o HSQL.

Hibernate só funciona no servidor. no cliente vc não vai poder usar, a menos que o servidor tenha comuniação directa com o banco, o que é uma porcaria de arquitetura …

É obvio que web é mais facil. So o fato de não ter cache de dados já poupa um monte de trabalho.
Se vc preciar integragir com hardware no cliente é melhor swing, mas depende muito do projeto real…

[quote]Diga quais são suas dúvidas que lhe ajudaremos.

Recomendo a leitura do livro Head First - Design Patterns e dos artigos:


http://www.fragmental.com.br/wiki/index.php?title=MVC_e_Camadas
[/quote]

Gostaria de saber se vc tem algum exemplo de código do componente de controle para me passar para que eu possa analisar e ter um exemplo para implementar o meu.

Obrigada desde ja

Abraços

[quote=patty.cefetsjbv][quote]Diga quais são suas dúvidas que lhe ajudaremos.

Recomendo a leitura do livro Head First - Design Patterns e dos artigos:


http://www.fragmental.com.br/wiki/index.php?title=MVC_e_Camadas
[/quote]

Gostaria de saber se vc tem algum exemplo de código do componente de controle para me passar para que eu possa analisar e ter um exemplo para implementar o meu.

Obrigada desde ja

Abraços[/quote]

Não existe um código fixo para o componente controller. As aplicações diferem umas das outras, e as vezes o componente fica bem diferente. O importante é compreender o conceito e saber que o que vc está fazendo é adequado. Mas, eu já vi várias discussões a esse respeito aqui no GUJ. Uma delas é essa:

http://www.guj.com.br/posts/list/73765.java

De qualquer modo, dependendo do que vc vai fazer e também de que tipo de aplicação (Web, Desktop usando Swing, etc.) isso muda bastante. No livro citado anteriormente (Head First: Design Patterns), ao final, tem uma boa explicação sobre isso. Sugiro que se for lê-lo, ao menos leia os padrões que ele referencia no MVC (Composite, Strategy e Observer).

Abraço.

Mais um que pego falando que não é camadas. Camarada, Model é layer, View é layer, Controller é layer. São três layers. Claro que, no Brasil, chamam camadas lógicas (layers) de camadas e camadas físicas (tier) de camadas.
Agora, quer o link da SUN também ou sabe pesquisar?

PS: Nem estou discutindo o que ela disse, apenas evitando que essa loucura do GUJ de falar que o MVC Model 2, usado em Java, não são consideradas layers e que, meu Deus, são uma coisa qualquer por ai.

Sim, é possível com Ejbs e SEM Ejbs também (apresentado na imagem). Para implementações SEM Ejbs indico o framework Spring.

flws

Fala prá nós como é o sistema. É web? É do tipo client x server, ou o quê?

Fala um pouquinho mais sobre seu sistema, talvez alguém possa ter uma idéia prá te passar.

flws

Esse questionamento começou a partir da disseminação do artigo escrito pelo Phillip Calçado: MVC e camadas. Muito bem embasado, por sinal.
Se a gente pegar a tradicional arquitetura multi-camadas ( estou falando de layers, e não tiers ), com apresentação, negócios e persistência, e tentar cruzar com o MVC, percebemos que a view e o controle se encaixam na camada de apresentação, enquanto o model, que representa o estado da aplicação, é o resto ( negócios e persistência ).