May
10
Entendendo Model-View-Control (MVC)
Filed Under Diversos |
Resenha:
Outro dia comentei com um amigo que eu não entendia tão bem o conceito de MVC, então trocando alguns e-mails ele pacientemente me elucidou algumas questões. Sou muito grato à ele pela ajuda. Este meu amigo é desenvolvedor PHP na cidade de Brasilia conhecido no mundo técnico como augustowebd. Eu o conheci no PHPConference 2006 e aproveito para postar parte de nossas conversas que me levaram a compreender o tal modelo.
Dissertação:
Ricardo escreveu:
> Não sei se posso falar que sim, mas aquela sua explicação já me
> adiantou, e muito, o conhecimento! Um exemplo é que temos uma classe de
> banco de dados aqui na empresa, quando ela não consegue comunicação com
> o banco de dados ela gera um erro, este erro é construído na classe,
> afinal ela é quem sabe o que é o erro e deve explicar o mesmo. Porem
> hoje ainda é ela quem envia um email para o responsável ou apresenta o
> erro na tela. A diferença é que este erro deve ser gerado pela classe de
> banco e tratado (env por email ou apresent na tela) pela classe de
> visualização. Foi isto que entendi da conversa, se for isto então posso
> dizer que sei MVC :) Eu não conseguia compreender MVC pois ficava
> pensando que o erro deveria ser gerado na classe de banco e a mensagem
> de descrição do erro construída pela classe de visualização, ai ficava
> pensando “a classe de visualização vai ficar gigante!” Um problema que
> ainda penso sobre MVC é que caso eu queira deixar que a classe de
> visualização seja a responsável pela formatação da mensagem esta vai
> exigir um certo nível de padronização das mensagens, o que em certos
> momentos não é algo tão bom assim, mas seriam em casos muito esporádicos.augustowebd escreveu:
> em meu humilde entendimento falta pouco pra vc padronizar esse processo.
>
> 1- vc precisa de uma camada de banco( Dao ),
> http://www.phppatterns.com/docs/design/data_access_object_pattern_more_widgets?s=dao,
>
> que vai fazer o contato direto com o banco, ele e somente ele chega
> ateh o banco.
> entao Augusto, como faco pra enviar os comandos para o banco?
> R: teresmo entao ae a figurada do Contralador, funciona assim,
> hipoteticamente usaremos o login como exemplo.
>
> Login.php (vo) não tem acao nenhum, apenas armazena os dados de login:
> id, login, senha, statusAtivo, deveTrocarSenha, etc…
>
> LoginController.php - geralmente, tem apenas um metodo construtor.
> LoginAutenticaController.php - eh uma especializacao do login, este
> soh sabe pedir para o model enviar um pedido de login para o banco,
> geralmente soh tem o construtor tbm.
>
> LoginModel.php - este fica a regra de negocio. ela eh quem manda o Dao
> incluir alterar, pesquisar, etc., na tabela de Login, somente nela!
> entao o controller solicita um novo login, o model vai no Dao e fala
> inserir.
>
> LoginView.php - Após o controlador ter solicitado ao Model alguma acao
> o Model retorna o resultado desta acao para o controlador e
> controlador, baseado no resposta do Model( geralmente: true or false )
> vai escolher o tipo de view adequado para mostrar para o usuário.
>
> Mas Augusto e em caso de erro mesmo, como fica?
> R: ae vc lança uma excessao e tratando esta excessao vc chama um outro
> objeto: Notificador, por exemplo, que soh sabe enviar notificacoes.
>
> analisa o processo e veja como vai ficando cada um em sua tarefa.
>
> kra da uma navegada com bastante carinho neste site, que tem muita,
> mas muita coisa boa:
> http://www.phppatterns.com/docs/design/archive/model_view_controller_pattern
>
Da conversa vale ainda adicionar alguns links como …
http://en.wikipedia.org/wiki/Architectural_pattern_%28computer_science%29
http://en.wikipedia.org/wiki/Model-view-controller
http://en.wikipedia.org/wiki/Talk:Model-view-controller
Comments
7 Responses to “Entendendo Model-View-Control (MVC)”
Leave a Reply

very nice great article thanks
very nice great article thanks
thank you for share
perfect thank you
thank you for share
Sounds interesting. Thanks for info .I like You Now! (sounds weird.. should say I follow you Now!.. ) :)
i don’t understand :S but I go to the links that you post there xD
Thanks for you share :D