Skip to content

Instantly share code, notes, and snippets.

@fxcosta
Created November 17, 2015 01:21
Show Gist options
  • Save fxcosta/7654a03e9ecc3ebf6997 to your computer and use it in GitHub Desktop.
Save fxcosta/7654a03e9ecc3ebf6997 to your computer and use it in GitHub Desktop.
Argumentos sobre o MVC não ser ideial para Web direto do PHP Brasil

O "problema" é que MVC foi criado para arquitetar interfaces gráficas. A Controller deveria ouvir eventos de input direto do usuário, sem passar pela View, então alterar a Model e a View ouvir a Model para então atualiza a UI que por sua vez é ouvida pela Controller e assim por diante, sempre num sentido só Controller -> Model -> View.

Na web a Controller não tem a autonomia de ouvir a UI, porque é geralmente um script no servidor e a View não tem autonomia pra ouvir a Model porque a View é um documento no cliente que precisa fazer uma requisição pra Controller pra entender alterações. Acaba ficando Controller -> Model -> Controller -> View -> Controller ->. Tudo vai e volta pela Controller.

Entre outras diferenças... Eu não acho que as implementações de MVC pra web sejam o fim da picada, mas não é uma arquitetura pensada em como a Internet funciona, ela foi pensada em GUIs, não em sistemas baseados em rede. REST é uma arquitetura pensada em como a web funciona e JAX-RS é uma implementação que eu acho bem interessante. Infelizmente não conheço nada assim pra PHP.

• O que é MVC? Deixe me contar uma histórinha boba Um programador chamado Marcos está em sua casa tranquilo. Sentado no sofá sedento de sede, ele levanta-se e vai até a geladeira pegar uma cerveja geladinha. Ao abri-la, consta que sua geladeira queimou :(. Como era um modelo muito antigo, decidido, compra uma nova. A geladeira chega algum tempo depois. Então, como uma pessoa normal, ele resolve ligá-la e desfrutar de sua novíssima compra. De repente ele percebe que o plug da geladeira é aquele de três pinos. Rapidamente ele olha para sua tomada, percebendo que há uma incompatibilidade, pois a tomada dele é de apenas dois pinos. Está feito o caos. Então, como um legítimo Brasileiro, decide arrancar o pino central - fio terra e utilizá-la. Bom, a geladeira é o MVC e a tomada é a Web.

O MVC é um padrão concebido para desktop. Ao tentar trazer ele para web é necessário adaptá-lo. O ambiente é diferente, tomada e web, e o padrão sofre a adaptação, plug e MVC.

No caso da geladeira é fácil enxergar o efeito colateral. Você pode estragar o plug ao tentar remover o pino, no entanto, pensando em um caso favorável, se tudo ocorrer bem e a remoção for um sucesso, você não poderá mais utilizar o isolamento que o "pino terra" proporcionava.

No caso do MVC, você tem uma tentativa de utilizar uma arquitetura que foi concebida para um ambiente que é plano, ou seja, 1 nível, e aplicá-lo em um ambiente linear, 2 níveis. Como é impossível que isso aconteça sem uma modificação, na esperança de resolver o seu problema, você faz uma adaptação para que ele funcione.

A atitude certa sempre é compreender tanto a arquitetura da web quanto o(s) padrão(ões).

• Porque NÃO utilizar o MVC na web? Se você já entendeu a história que contei, você já matou a charada. O MVC é um plug para um pino e a web é uma tomada de 2 pinos. Não existe ponte entre esses dois. Não da forma "comum" do padrão. E aí as pessoas adaptam-o na esperança de resolver o problema. Acham que resolveram. Com essa atitude, eu o declamo MVC como: "O mascara". Ele apenas escondeu o problema. E ele só conseguiu esconder, justamente por causa do desenvolvedor que aplicou ele na web não compreender a arquitetura da web e o padrão. É tipo o Chrome esconder o HTTP da URL. Tem gente que está começando a programar e nunca ouviu falar. Ela vai usar o HTTP sem saber para o que ele foi feito, como funcionar, como é trafegado as mensagens e por aí vai.

É só esses os efeitos colaterais? Não. Diferente da simplicidade do exemplo da geladeira, há muito mais efeitos colaterais

• Arquitetura vs Organização de código Outro ponto interessante de padrões arquiteturais é a confusão com organização de código. A maioria dos desenvolvedores usam o MVC na esperança de organizar o código. Só isso. Não é a separação das camadas por "completo". É apenas um "norte" de como separar as coisas e melhorar o desenvolvimento, e principalmente a manutenção de código. O MVC na maioria das vezes, só foi utilizado porque virou celebridade. Poderia ser qualquer outro. Se alguém chegasse e falasse: "esse é bom, virou celebridade", grande parte dos desenvolvedores iriam usar. Simples assim.

• Para onde estamos indo? E o que usar? Cara, eu não sei se você percebeu, mas ninguém responde isso literalmente. Ninguém vai te dar uma solução pronta. A gente sempre acaba no caso de entender o plug e entender a tomada. Quando os dois forem compatíveis e resolverem os problemas, você apenas "plugálos". Pronto, você usou o padrão adequado no domínio adequado.

Na minha opinião, quando comecei a compreender a web como uma ambiente de dois níveis, virei fã de Javascript. Você começa a trabalhar com os dois níveis sem tentar fazer com que eles sejam um só. Isso é o jeito web de programar.

No final, quem vai dizer isso melhor que qualquer um é o tempo. A web é nova e está evoluindo absurdamente rápido. Quem sabe não surjam padrões extremamente adequados e virem os novos rockstars?!

Enfim, tentei responder suas perguntas. Que são minhas também. :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment