MVC e Camadas 

Nov/09
10

Muito simples: MVC não é relacionado a separação em camadas.

Parece simples. √Č simples. Mas causa tremenda confus√£o. Por alguma raz√£o que desconhe√ßo muitas pessoas acham que MVC e separa√ß√£o em camadas s√£o¬†sin√īnimos. Talvez porque est√£o habituados a trabalhar com 3 camadas acham que as tr√™s letras caem que nem uma luva. Mas os sistemas podem ter qualquer numero de camadas. Aplica√ß√Ķes modernas t√™m normalmente cinco camadas.

A confus√£o come√ßa com a palavra “camada”. Normalmente as pessoas se referem √† separa√ß√£o do sistema em regi√Ķes que se montam umas em cima de outras. Cada regi√£o dessas seria uma camada. O nome menos¬†amb√≠guo¬†para essas regi√Ķes √© andar.

As pessoa entendem que existe uma camada perto do usu√°rio que media a intera√ß√£o com ele (gr√°fica ou n√£o), ¬†uma camada na outra ponta , perto dos dados que media a sua organiza√ß√£o, transa√ß√Ķes, etc… e uma camada no meio que cont√©m a l√≥gica que responde aos comandos do usu√°rio e produz altera√ß√Ķes nos dados. O nome destas camadas s√£o respetivamente : cliente, dominio e recursos. Hoje em dia esta simplicidade n√£o mais se identifica com a estrutura de aplica√ß√Ķes orientadas a objetos. Aplica√ß√Ķes OO ¬†focam nas entidades do¬†dom√≠nio¬†e ¬†os bancos de dados s√£o apenas reposit√≥rios burros. Al√©m disso a tecnologia de reposit√≥rios ainda √© a tecnologia usada pelas antigas aplica√ß√Ķes orientadas a dados e como tal √© preciso uma tradu√ß√£o entre os dois mundos. √Č ai que entra a camada de integra√ß√£o. Ela media entre o dominio e os recursos e entre o dominio em uma aplica√ß√£o e o dominio de outras aplica√ß√Ķes. ¬†Por outro lado as interfaces com o usu√°rio se tornaram mais especializadas e inteligentes fornecendo pistas audiovisuais ao usu√°rio que interage com a aplica√ß√£o. Esta¬†riqueza¬†leva √† constante altera√ß√£o e embelezamento destas interfaces por quest√Ķes de gosto ou ergon√īmicas o que obriga a uma camada que traduz tudo isso para a intera√ß√£o com o dominio. Esta √© a camada de apresenta√ß√£o.¬†Aplica√ß√Ķes modernas orientadas a objetos utilizam-se destas cinco camadas.

O design pattern Model-View-Controler , mais conhecido como MVC trata de uma solu√ß√£o para design de componentes que atuam dentro de uma mesma camada , normalmente na de Cliente e/ou na de Apresenta√ß√£o. As outras camadas usam outros padr√Ķes. A de¬†dom√≠nio utiliza ~principalmente os padr√Ķes Entity e Service e o de integra√ß√£o os padr√Ķes Mediator e Bridge.

O MVC trata da separação de responsabilidade entre as classes da camada e não da separação da responsabilidade entre camadas.

camadasMVC

Por algum abuso de linguagem, desconhecimento ou falta de preocupa√ß√£o em verificar as fontes de informa√ß√£o as pessoas come√ßaram a confundir MVC com separa√ß√£o em camadas. J√° √† partida deveria ser √≥bvio que 3 responsabilidades do M-V-C n√£o d√£o conta das cinco ou mais responsabilidades¬†atribu√≠das¬†a camadas. Tamb√©m deveria ser obvio que enquanto no MVC √© necess√°ria a presen√ßa das tr√™s partes, em separa√ß√£o de camadas n√£o √© obrigat√≥ria a presen√ßa de todas as camadas, apenas as necess√°rias. Al√©m disso as camadas podem estar¬†distribu√≠das em v√°rios nodos enquanto que as classes que¬†comp√Ķem¬†uma implementa√ß√£o MVC t√™m que estar fisicamente associadas.

À partida seria óbvio supor que estas diferenças são óbvias e fortemente indicativas de que MVC e separação de camadas não são a mesma coisa, mas por alguma razão perdida no tempo muitas pessoas acham que é a mesma coisa. Pior que isso, ensinam a outros que é a mesma coisa. Espero que tenha deixado claro o absurdo que é misturar os dois conceitos.

Adendo (25/11/2009)

Parece que ainda não ficou claro que MVC não é sobre divisão em camadas (andares). Parece que 5 camadas podem caber em 3 letras.  Alguém duvida que 5 não cabe em 3 ? Matemática elementar. Certo ?  Pelos vistos não.

Ok, tem muito lixo pela internet confundindo as coisas. Mas tem muitas pessoas explicando direito [1,2]. Confundir as coisas é fácil. Não é preciso muito raciocínio para isso.  Alguns pontos para pensar:

  • MVC tem depend√™ncia triangular em que cada elemento faz e recebe chamadas do outro. Camadas s√£o sobrepostas uma por cima da outra n√£o havendo chamadas da camada baixa √† camada alta.
  • Tendo¬†depend√™ncia¬†triangular MVC s√≥ suporta 3 elementos. N√£o mais, n√£o menos. Camadas suporta quantas forem necess√°rias. Basta empilhar mais uma e pronto.
  • MVC √© baseado em eventos (Padr√£o Observer). Comunica√ß√£o entre camadas t√™m v√°rias formas de ser feita.
  • MVC √© um Design Pattern. Camadas √© um Padr√£o de Arquitetura. Bom, tamb√©m √© complexo para as pessoas¬†distinguirem¬†Design de Arquitetura, mas tem que ser mencionado.

Para os desatentos : MVC e Camadas  não são conceitos de Java. São conceito de desenvolvimento de software. São válidos em qualquer linguagem.

Nunca vou entender como as pessoas conseguem dizer que um¬†tri√Ęngulo¬†√© uma pilha e uma pilha √© um tri√Ęngulo.

trianguloPilhaAdendo (06-01-2015)

Este assunto se mostrou muito mais debatido do que esperava o que me levou a escrever outros posts sobre o tema. Para entender melhor e mais profundamente este tema sugiro que leia estes outros posts : MVC-Onde e Como e Arquitetura ECB

 

 

 

58 comentários para “MVC e Camadas”

  1. Fora a parte que considera como um padrão arquitetural, o resto é mais ou menos a mesma lenga-lenga de sempre.
    Para mim padr√Ķes de arquitetura s√£o coisas mais abstratas que MVC. Por exemplo, SOA ou Publish/Subscriber … mas pronto, como digo no texto, √© dificil explicar a diferen√ßa entre design pattern e padr√£o de arquitetura.

    A confus√£o n√£o sei de onde saiu ( no texto exploro algumas op√ß√Ķes poss√≠veis). Agora, eu sei como se alastrou : o cego ensinando o surdo. Pessoas que acham que sabem ensinando pessoas que acham que compreendem. E ai vira essa bagun√ßa.
    Claro que, para a esmagadora maioria das pessoas é irrelevante o que MVC realmente é, mas para pessoa que fazem frameworks e trabalham com estrutura de sistemas é bastante importante ter os conceitos bem alicerçados. Alguns sites de renome e algumas revistas sem uma editorial forte deixam passar muita bobagem , igual ao professor do ensino médio que apenas repete o que sabe sem explicar o por quê.

  2. I admit, I have not been on sergiotaborda.javabuilding.com in a long time however it was another joy to see It is such an important topic and ignored by so many, even professionals. I thank you to help making people more aware of possible issues.

  3. Pra mim a l√≥gica do sergiotaborda faz muito mais sentido que qualquer outra que eu tenha lido sobre MVC. Sempre percebi uma necessidade de ter “outra” camada que possua as regras de neg√≥cio, e que o model (do MVC) usaria essa “interface” que cont√©m as regras. (essa seria a CAMADA de dom√≠nio).

    Outro ponto é que o Framework MVC 3 do .Net cria um projeto MVC onde o View, Controller e Model estão separados por pastas dentro do projeto. Aliás, cheguei nesse post justamente procurando como separar as camadas do MVC. O que agora sei que é um conceito errado.

    Apesar das “trocas de farpas”. Muito boa a discuss√£o.

    Obrigado.

  4. […] Ha algum tempo atr√°s discuti neste blog sobre com o MVC n√£o representa separa√ß√£o em camadas. […]

  5. […] est√° seguindo deve saber da conversa que estava acontecendo no post sobre MVC e Camadas onde se falava sobre a “localiza√ß√£o” , ou melhor, se o Modelo pertence na camada de […]

  6. […] posts anteriores que remontam a 4 anos atr√°s falei sobre como as pessoas confundem o padr√£o MVC com o conceito de Separa√ß√£o de Camadas e o padr√£o ECB. E embora esta confus√£o ainda continue (como mostras posts recentes no GUJ) me […]

  7. Ol√° Sergio, s√≥ quero agradecer-lhe por este artigo de qualidade, ainda n√£o tenho experi√™ncia na √°rea (nunca trabalhei), mas me interesso por esse tema e tento aprender cada vez mais, e melhor que o artigo s√≥ os coment√°rios/discuss√Ķes no artigo, que esclareceram e muito a diferen√ßa entre MVC e Camadas, antes do artigo acreditava que o MVC era tr√™s camadas, acredito fazer parte do 10% que se convencem com argumenta√ß√Ķes (boas). Sou f√£ do seu Blog, espero que continue compartilhando suas experi√™ncias.

  8. Eu estaria certo se separasse o conceito do modelo 3 camadas do MVC assim?

    3 Camadas: são três grupos de objetos onde a apresentação enxerga a de negócios que por sua vez enxerga a de dados, porém a de dados não enxerga a de negócios que por sua vez não enxerga a apresentação.
    MVC: são três grupos de objetos onde a view enxerga a model e a control, a control só enxerga a model e a model só enxerga a view.

Comente

Enquete

Sobre quais assuntos gosta de ler neste blog ?

View Results

Loading ... Loading ...

Artigos