Vou tentar responder…
Acredito que se a sua camada/andar de Apresentação estiver bem desenhado, não vão ocorrer exceções no 'M’odel do tipo Exception desta camada/andar. Mas isso não tenho certeza, melhor escutar a opinião de usuários com maior experiência. Quanto a validações elas não ocorrem na Apresentação mas sim na camada/andar de Domínio. O Model do 'M’VP na Apresentação é a porta de saída para o Domínio onde provavelmente chamará um serviço desta. Aí sim caso ocorra alguma invalidação/erro provavelmente este serviço irá retornar/lançar como resposta uma Exception que será tratada no 'M’odel de forma adequada para que a mensagem de erro seja mostrada na 'V’iew/nova 'V’iew. Me fiz entender? :oops:
Olha pedro recomendo-lhe muiiitooo aguardar usuários com maior exepriência responder porque eu mesma não creio muito naquilo que digo kkkk… Me desculpa, mas só estou tentando ajuda-lo.
Fiquei muito curiosa também com o que vai aparecer de respostas daqui para frente no tópico… Espero não estar errada 8) Até +
Opa Ingrid, tudo bem? Obrigado por tentar ajudar mas desculpa não capitei vossa mensagem! Não consegui entender
[quote=ingridfarabulini]Acredito que se a sua camada/andar de Apresentação estiver bem desenhado, não vão ocorrer exceções no 'M’odel do tipo Exception desta camada/andar. Mas isso não tenho certeza, melhor escutar a opinião de usuários com maior experiência. Quanto a validações elas não ocorrem na Apresentação mas sim na camada/andar de Domínio. O Model do 'M’VP na Apresentação é a porta de saída para o Domínio onde provavelmente chamará um serviço desta. Aí sim caso ocorra alguma invalidação/erro provavelmente este serviço irá retornar/lançar como resposta uma Exception que será tratada no 'M’odel de forma adequada para que a mensagem de erro seja mostrada na 'V’iew/nova 'V’iew. Me fiz entender? :oops:
Olha pedro recomendo-lhe muiiitooo aguardar usuários com maior exepriência responder porque eu mesma não creio muito naquilo que digo kkkk… Me desculpa, mas só estou tentando ajuda-lo.
Fiquei muito curiosa também com o que vai aparecer de respostas daqui para frente no tópico… Espero não estar errada 8) Até +[/quote]
Principalmente aqui: [quote]O Model do 'M’VP na Apresentação é a porta de saída para o Domínio onde provavelmente chamará um serviço desta. Aí sim caso ocorra alguma invalidação/erro provavelmente este serviço irá retornar/lançar como resposta uma Exception que será tratada no 'M’odel de forma adequada para que a mensagem de erro seja mostrada na 'V’iew/nova 'V’iew.[/quote]
O que tentou passar é que se ocorrer alguma invalidação na Camada de Negócios essa vai lançar uma exceção para a Camada de Apresentação onde o método do Model no MVP que chamou o serviço no domínio estará com throws esperando essa Exception? É isso? :roll:
Sim, seria isso. Mas eu mesma estou com dúvidas acho melhor aguardar o pessoal mais experiente responder kkkk…
Estou curiosa também para saber. :roll: Até breve…
[quote=pedromuyala]Opa pessoal, prazer estar aqui com vocês companheiros Gujeiros!
Estive acompanhando o desenrolar deste tópico parece que estamos chegando ao um acordo real do que é MVP.
:roll: Nesse meio todo surgiu uma dúvida: No MVP, caso ocorra uma excessão no modelo por invalidação de algum dado ou até mesmo um erro diferente, ele deve lançar uma exception correto? Mas essa exceção será o Presenter quem deve estar preparado para receber e após isso repassar a View (throws em ambos) e ela se encarregará de como mostrará isso ao usuário ou o próprio modelo deverá ter um atributo de mensagem de erro e o Presenter será avisado pelo evento do Observer que ele (o modelo) foi alterado e deve reenderizar a visão para mostrá-lo ao usuário?
[/quote]
Exceções , como seu nome indica, são imprevisiveis. Podem sempre acontecer exceções que vc não previu.
Exceções podem acontecer em qq das partes do MVP e em qualquer parte do sistema. Lidar com exceções corretamente é um conhecimento paralelo a saber MVP. Mesmo nos outros andares e usando outros padrões vc tem que saber lidar com exceções.
A regra é: se a camada (aqui no sentido lato: andar, nodo, etc…) não sabe lidar com a exceção deve repassá-la à camada superior.
A ultima camada , não tendo a quem repassar deve logar a exceção e apresentar uma mensagem clara ao usuário.
Portanto, no caso do mvp ao acontecer uma exceção o Presenter deve instruir a view a mostrar a mensagem ao usuário. Em particular, para alguns tipos de erro o usuário poderá tomar alguma ação, portanto o presenter deve ter logica para tratar esses casos. Mas isso apenas trata os erros previstos. Sempre deve haver um codigo que trata os erros imprevistos. E isso deve estar na camada (de codigo) mais externa. Em ultimo caso no exceptionHandler da thread.
O model não deve capturar a exceção e repassá-la ao presenter. Ele deve simplesmente deixar a exceção chegar ao presenter.
O mesmo entre o presenter e a view para o caso de exceções não previstas.
Olá pessoal,
das formas de implementação do MVP a que me parece mais adequada é a PassiveView (link de um dos posts anteriores http://fabiolnm.blogspot.com/2009/12/do-mvc-para-o-mvp-model-view-presenter.html). Existe algum caso que esta abordagem não é recomendada (no sentido de tecnologias utilizadas no lado do cliente e formas de interação com o servidor)?
[quote=Adelar]Olá pessoal,
das formas de implementação do MVP a que me parece mais adequada é a PassiveView (link de um dos posts anteriores http://fabiolnm.blogspot.com/2009/12/do-mvc-para-o-mvp-model-view-presenter.html). Existe algum caso que esta abordagem não é recomendada (no sentido de tecnologias utilizadas no lado do cliente e formas de interação com o servidor)?
Att.[/quote]
Olá…
Na minha opinião independentemente de como a sua arquitetura esteja distribuída, o MVP estará sempre presente no nodo Cliente no andar Apresentação ( Não entendeu a palavra ‘andar’? Clique aqui! ) principalmente se você deseja desenvolver software baseado na API Swing. Como você citou a existência de um servidor e provavelmente queira manter a aplicação lá, então os objetos do andar de Apresentação irão chamar métodos dos objetos no andar de Domínio/Negócio que servirá apenas como uma fachada aos objetos do andar de Integração, o qual realizará a comunicação com o nodo Servidor. Veja, não mudamos nada no andar Apresentação que pode continuar normalmente no nodo Cliente. Já WEB não sei informar, realmente não conheço. Para mim, cabe sim MVP no desenvolvimento de bons softwares assim como o próprio link que colocou cita MVP como sendo uma prática recomendada até mesmo pelo pessoal do Google.
Mas aguarde a opinião dos demais… sou muito leiga para opinar, não conheço o desenvolvimento WEB… espero estar certa.
Até mais…
É justamente com Swing que me refiro à arquitetura do cliente. Entretanto, devido às formas de interações com o servidor (chamadas assíncronas, chamadas aleatórias, etc.) a forma escolhida para adaptar a arquitetura poderia afetar o próprio modelo adotado, tornando algo simples em algo complexo de manter (a longo prazo principalmente, e por isto minha preocupação). Tenho lido sobre mas não encontrei evidências de casos em que não se deve aplicar este modelo (MVP PassiveView)… vendo isso creio que seja o mais adequado, principalmente para as manutenções e evoluções futuras do software.
No caso, você está se referindo ao Swing sendo uma camada de código presente no andar Cliente do nodo Cliente de sua arquitetura.
Não vejo problemas neste caso. Se na sua arquitetura os andares dos nodos estiverem com suas responsabilidades bem definidas, não encontrará problemas complexos durante a manutenção. Lembre-se que o MVP ‘está presente/é usado’ no andar de Apresentação. O andar Modelo não poderá ser afetado pelo andar Apresentação. Se isto acontece, existe um problema na sua arquitetura. :shock:
Sim o MVP é uma best practice no Google I/O 2009 para o desenvolvimento de aplicações GWT. Mas cabe muito bem qualquer seja a camada de código presente no Cliente (Só não sei dizer em WEB).
onde o option retornaria a opção selecionada pelo usuário( se ele clicou em ok, No, cancel etc…) e esse método
ser chamado pelo presenter para delegar mensagens para a view exibir? por exemplo no caso de o presenter querer repassar uma mensagem contendo a descrição de uma exceção.