Voltando ao que falei la em cima, e que acho que não fui bem interpretado… não acho errado a visão ouvir o modelo … acho errado a visão se registrar no modelo, para ouvilo, esse trabalho deve ser mais do controle, isso é o que acredito…
…
Sobre o que foi falando acim com os observers,
M e principalmente M, não deve nem saber que existe V …
O Modelo existe com a lógica de negocio, e ele deve ser independente da visão o maximo que você conseguir.
…
Ai vamos o motivo da existencia do controle… A Colocar decisões dentro do modelo (mesmo que estas sejam de fluxo) não é bom, e é ai que entra o controle…
o contrlle existe principalmente para mediar o meio de campo… A View deve conhecer do modelo apenas as informações, ou seja, deve conhecer Beans ou Entidade que contenham informações a serem exibidas ou coisas do genero.
C, o Controller existe para agrupar a “pseudo lógica” da visão, ou seja, ele existe para Converter as informações da visão em informações legiveis para o Modelo, e quando necessário fazer o mesmo transformando as informações do Modelo em informações legiveis para a Visão.
Além disso é de responsabilidade do Controller conhecer o fluxo do sistema, ou seja, ele deve saber encaminhar uma ação vinda da View, e direcionar para o local correto no Modelo, se houver retorno do Modelo, é geralmente trabalho de C o Controller devolvero retorno a VIEW…
Mesmo no caso de uso de Observer, as coisas continuam passando pelo controller, pq é ele quem registra uma Visão em um Modelo (quando possivel!, quando isto é compativel, quando não é compativel o controle é responsável por intermediar fazendo o papel do adaptador), portanto neste caso, mesmo que o FIRE do observerdo modelo vá direto a VIEW quem a colocou lá foi o controller, e foi através dele que essa informação foi parar no local correto, afinal essa é a função do controle.
…
Pq esse papel do C ? no meio de campo ? pq não fazer essas coisas na view ? o motivo é para deichar o código mais coeso.
dentro do Modelo há toda sua lógica o ideal é que vc seja capaz de um dia, se quiser, mudar a VIEW sem abalar o seu modelo, e assim seu código pode ser bastante reutilizável.
dentro da sua View não deve existir código do modelo, exceto os de uso de informação, ou seja, partes do modelo que são informação, e não os que são processamente… partes do modelo que servem para trazer infomação ou levar informação
dentro do seu controle, bom, como no modelo não pode ter NADA da view, como no sua view só pode ter objetos que carregam ou levam informações do modelo,
- alguem tem que fazer as ligações, alguem tem q levar a informação que o usuário passa através de uma view, la pra baixo para o modelo.
- alguem tem que pegar o processamento do modelo, e devolver a informação para a view correta, de forma que o usuário tenha interação com o sistema.
- alguem tem que ser responsavel por ligar a VIEW ao MODELO e esse alguem é o CONTROLE.
…
Bom esse é o meu intendimento do assunto, e é assim que faria/faço … não vejo motivos para uma view acessar diretamente o modelo, mesmo que para se registrar com observer, não é trabalho da view saber onde se registrar e sim do controller…
Ficam ai minhas observações…
Ps.: Cuidado com o entendimento de MVC em varias camadas, isso é possivel sim, mas não é prache e nem sempre a melhor forma de se fazer… um MVC existe onde você conseguir enchergar um MODELO e uma VIEW … a interface da sua camada pode sim ser conciderada uma VIEW (quando falo interface, falo do limiar da camada que é usado pela camada superior), mas ai vc esta levando em concideração que pode trocala por algum motivo, se não houver como trocar esqueca, e escreva um MVC só pra uma camada…
Lembrando que, GUI, páginas web, são lógicamente views, e portanto é sempre bom pensar em MVC quando usalas.