Mvc [resolvido]

Olá pessoal,

Estou fazendo um projeto de software cujo sistema a ser desenvolvido é um Banco. Pois bem… escolhi a arquitetura MVC para aplicar no meu sistema. Surgiu esta duvida:

Pode-se ter mais de um controlador (classe controladora)? Tenho classes CaixaAutomatico, que contem operaçoes de saque, deposito, extrato, transferencias, outra classe Agencia, que contem os caixas automaticos, e a classe Banco que contem as agencias. O modelo contem conta corrente, dados de clientes e estão no servidor web. A visão são interfaces gráficas no caixa automático. Estas tres classes sao as controladoras e somente a classe CaixaAutomatico está no browser, enquanto as outras estão em servidores web.

Sim, vc pode ter mais de um controlador

[quote=Buscapeh]Olá pessoal,

Estou fazendo um projeto de software cujo sistema a ser desenvolvido é um Banco. Pois bem… escolhi a arquitetura MVC para aplicar no meu sistema. Surgiu esta duvida:

Pode-se ter mais de um controlador (classe controladora)? Tenho classes CaixaAutomatico, que contem operaçoes de saque, deposito, extrato, transferencias, outra classe Agencia, que contem os caixas automaticos, e a classe Banco que contem as agencias. O modelo contem conta corrente, dados de clientes e estão no servidor web. A visão são interfaces gráficas no caixa automático. Estas tres classes sao as controladoras e somente a classe CaixaAutomatico está no browser, enquanto as outras estão em servidores web.[/quote]

Está confuso o que vc esta fazendo com Caixa e Agencia e Banco.
Pelo que entendi vc quer colocar a logica de negocios em Caixa, se for isso Caixa nao deve ser estar contido dentro de outras duas.

É bom vc colocar sua logica de negocios em uma classe gerenciadora (ver padrao façade).

O MVC serve para a camada de apresentação, não é bom colocar logica de negocios nele.

[quote=eric_jf]O MVC serve para a camada de apresentação, não é bom colocar logica de negocios nele.
[/quote]

O MVC não serve apenas para apresentação… Entendo por apresentação o back end…

ainda temos o controller e o model…o que vc quis dizer com isso ???

Galera, valeu pela ajuda!

Não estou colocando a classe CaixaAutomático na Lógica de Negócios. Vou citar um exemplo:

Uma operação de saque. Um cliente utilizando o caixa automático solicita um saque de R$40,00. O caixa automático (browser) envia uma requisição HTTP ao servidor da agência em que se encontra. O servidor da agência reenvia essa requisição para o servidor central, que através de conexões ao banco de dados, acessa os dados nele contidos (encontra conta corrente e verifica saldo do cliente) e envia uma resposta ao servidor da agência, que retorna ao caixa automático, que retira o dinheiro para o cliente.

é assim que o sistema funciona. Por isso a necessidade de 3 controladores: CaixaAutomático, Agencia e Banco. Se minha lógica estiver errada, me corrija por favor. Obrigado

Vc esta querendo integrar num único sistema três sistemas diferentes pelo q eu entendi…

Vc disse q o Caixa Eletrônico conversa com a Agência e a Agência com a Central…

No meu entender cada um desses tem um sistema a parte com seus respectivos controladores… OU vc esta apenas supondo que existem três sistemas diferentes…
Independente disso…vc pode ter um ou mais controladores…o ideal é q vc sempre consiga colocar a responsabilidade em um cara…Eu uso minhas servlets como controller pq aqui no meu trampo não usamos frameworks… só servlets e MVC puro…

é isso mesmo.
Dentro deste Banco, há 3 subsistemas:

1 subsistema responsável por operações bancárias (saque, depósito, extrato, transferência);
1 subsistema responsável pelos caixas automáticos e por repassar as informações para a central;
1 subsistema responsável por acesso ao BD, manuseio das tarefas advindas dos dois outros subsistemas;

Obrigado por sanarem minhas duvidas, mas se minha logica estiver errada, me corrijam.

[quote=Giulliano][quote=eric_jf]O MVC serve para a camada de apresentação, não é bom colocar logica de negocios nele.
[/quote]

O MVC não serve apenas para apresentação… Entendo por apresentação o back end…

ainda temos o controller e o model…o que vc quis dizer com isso ???
[/quote]

Eu me refiro a divisao em 3 camadas: Apresentação + Negocio + Persistencia

O MVC fica na camada de Apresentação, que é M (Bean), V(jsp) e C(Action)
Na camada de Negocios vc implementa o Padrão Façade, que funciona como um gerenciador.
E a camada de persistencia DAO+BD.

PS.: Model não é logica de negocio, embora participe dela.

[quote=eric_jf][quote=Giulliano][quote=eric_jf]O MVC serve para a camada de apresentação, não é bom colocar logica de negocios nele.
[/quote]

O MVC não serve apenas para apresentação… Entendo por apresentação o back end…

ainda temos o controller e o model…o que vc quis dizer com isso ???
[/quote]

Eu me refiro a divisao em 3 camadas: Apresentação + Negocio + Persistencia

O MVC fica na camada de Apresentação, que é M (Bean), V(jsp) e C(Action)
Na camada de Negocios vc implementa o Padrão Façade, que funciona como um gerenciador.
E a camada de persistencia DAO+BD.

PS.: Model não é logica de negocio, embora participe dela.
[/quote]

Eu ainda não me formei arquiteto mas acredito que o Modelo MVC contemple todas as característica do sistema onde

M = DAO + NEGÓCIOS + BEAN
V = JSP (Normalmente)
C = Algum Controller que ele deseje implementar.

Aí se vc vai adicionar Façade…isso não quer dizer que o Modelo só represente Beans…esta havendo alguma confusão nessa sua explicação…

[quote=Buscapeh]é isso mesmo.
Dentro deste Banco, há 3 subsistemas:

1 subsistema responsável por operações bancárias (saque, depósito, extrato, transferência);
1 subsistema responsável pelos caixas automáticos e por repassar as informações para a central;
1 subsistema responsável por acesso ao BD, manuseio das tarefas advindas dos dois outros subsistemas;

Obrigado por sanarem minhas duvidas, mas se minha logica estiver errada, me corrijam.[/quote]

Cara eu acho que um sistema bancário é algo grande e se vc conseguir modularizar isso, melhor ainda…Então referente ao seu modelo de sistemas acho que um caixa eletrônico deva ser um sistema separado e um outro sistema representaria o banco em si independente da agência. quando for consultar peça ao sistema do banco para checar o BDS passando a conta e agência…

É só um debate não estou dizendo que vc deve fazer isso…apenas para trocar idéias mesmo

eric_jf, eu posso ter entendido mal, mas acho que você está fazendo alguma confusão entre os patterns

MVC é um pattern arquitetural, que diz sobre como seus componentes vão interagir e se comportar, dentro dele você pode ter vários outros partterns. Inclusive ele pode ser usado em conjunto do modelo de 3 camadas, abaixo um link já bem batido aqui do GUJ para você entender melhor, já que não vale a pena se estender em um assunto já tão discutido no forum

http://www.fragmental.com.br/wiki/index.php/MVC_e_Camadas

Buscapeh, acho que está bem interessante seu modelo, classes com suas tarefas bem definidas, etc
Você pode usar varios controladores, mas é interessante centralizar requisições em comum em um único ponto.
de uma olhada em Command And Controller (se você não for usar nenhum framework). Olha esse link

http://www.tatanka.com.br/palestras/cj2005-Web+MVC+IoC+Reflection/

Eu pensava assim antes.
Uma coisa é MVC e outra coisa é divisao em 3 camadas.
MVC é um padrão para visualisação de dados: tem uma explicação boa aqui: http://pt.wikipedia.org/wiki/Mvc

Detalhe em: É comum haver confusão pensando que Model é um outro nome para a camada de domínio. Lógica de domínio adiciona sentido à dados crus (por exemplo, calcular se hoje é aniversário do usuário, ou calcular o total de impostos e fretes sobre um determinado carrinho de compras).

[quote=ddduran]eric_jf, eu posso ter entendido mal, mas acho que você está fazendo alguma confusão entre os patterns

MVC é um pattern arquitetural, que diz sobre como seus componentes vão interagir e se comportar, dentro dele você pode ter vários outros partterns. Inclusive ele pode ser usado em conjunto do modelo de 3 camadas, abaixo um link já bem batido aqui do GUJ para você entender melhor, já que não vale a pena se estender em um assunto já tão discutido no forum

http://www.fragmental.com.br/wiki/index.php/MVC_e_Camadas

Buscapeh, acho que está bem interessante seu modelo, classes com suas tarefas bem definidas, etc
Você pode usar varios controladores, mas é interessante centralizar requisições em comum em um único ponto.
de uma olhada em Command And Controller (se você não for usar nenhum framework). Olha esse link

http://www.tatanka.com.br/palestras/cj2005-Web+MVC+IoC+Reflection/

[/quote]

Acho que eu não consegui me expressar direito. Tentei dar um exemplo com os 2 padrões juntos, acho q isso criou o mal entendimento.
Eu queria dizer justamente que MVC e Divisão em 3 Camadas são 2 padrões diferentes.
E que o MVC fica na camada de apresentação de uma Divisão em 3 camadas.

[quote=eric_jf][quote=ddduran]eric_jf, eu posso ter entendido mal, mas acho que você está fazendo alguma confusão entre os patterns

MVC é um pattern arquitetural, que diz sobre como seus componentes vão interagir e se comportar, dentro dele você pode ter vários outros partterns. Inclusive ele pode ser usado em conjunto do modelo de 3 camadas, abaixo um link já bem batido aqui do GUJ para você entender melhor, já que não vale a pena se estender em um assunto já tão discutido no forum

http://www.fragmental.com.br/wiki/index.php/MVC_e_Camadas

Buscapeh, acho que está bem interessante seu modelo, classes com suas tarefas bem definidas, etc
Você pode usar varios controladores, mas é interessante centralizar requisições em comum em um único ponto.
de uma olhada em Command And Controller (se você não for usar nenhum framework). Olha esse link

http://www.tatanka.com.br/palestras/cj2005-Web+MVC+IoC+Reflection/

[/quote]

Acho que eu não consegui me expressar direito. Tentei dar um exemplo com os 2 padrões juntos, acho q isso criou o mal entendimento.
Eu queria dizer justamente que MVC e Divisão em 3 Camadas são 2 padrões diferentes.
E que o MVC fica na camada de apresentação de uma Divisão em 3 camadas.

[/quote]

eric_jf, uma vez eu vi alguns slides na internet que diziam justamente o que você explicou. MVC é uma coisa, modelo em 3 camadas é outra. Tanto que eu acredito que possa haver um modelo em 2 camadas que utilize o MVC, certo?

Mas eu ainda tenho algumas dúvidas. O MVC é pra utilizar SÓ na camada de apresentação? Achei esse trecho na Wikipedia (link indicado acima), e o que é sugerido parece ser diferente:

[color=blue][i]
A partir do momento em que dividimos os nossos componentes em Camadas podemos aplicar o MVC nestas. Geralmente isto é feito definindo a Camada de Negócios como o Model, a Apresentação como a View. O componente Controller exige um pouco mais de controle.

Na maioria dos casos pode-se definir o Controller dentro da Camada de Apresentação. Esta Camada ficaria responsável então por mostrar o estado do Model ao usuário e receber as requisições deste.
[/i][/color]

Será equívoco do texto ou falha de interpretação de minha parte?

Eu ainda tenho dúvidas em relação a Camada de Negócios e o componente Model da Camada de Apresentação. Não consegui diferenciar a função destes dois.

Se for como é dito na wikipedia eu compreendi bem, mas aí eu teria que aplicar o “componente” Model sobre a camada de negócios…

Se puder esclarecer isso pra mim, será de grande valia!

Grato pela atenção,

Wagner.