none
Qual é a melhor estrutura de implementação do MVC? RRS feed

  • Discussão Geral

  • Com a permissão do moderador, gostaria de iniciar uma discussão sobre maneiras de se implementar o MVC em nosso desenvolvimento.

    Tenho lido vários artigos, lido livros, foruns, sites, e percebo que existem várias formas de se implementar o MVC, uma das grandes vantagens que colocam sobre este padrão é a possibilidade de testar de forma mais específica partes do sistema aumentando grandemente a qualidade do software, porém, outros dizem que a produtividade cai drasticamente por termos que criar as camadas e tudo o mais que é preciso para o mvc funcionar.

    Eu, por exemplo, estou fazendo um sistema utilizando como base o tutorial do NerdDinner, que usa o template padrão do ASP.NET MVC do visual studio, com suas pastas e arquivos padrão. Entretanto, estou lendo o livro do Steven Sanderson (Pro ASP.NET MVC Framework) e de cara, ele elimina os arquivos padrão e cira um projeto para a camada de modelo e um web user interface para as camadas de controle e visual, enquanto no nerddinner utilizam apenas um projeto com as tres camadas.

    Alguns utilizam arquivos de repositorio, outros acessam os dados diretamente pela camada de controle.

    Em alguns, que utilizam uma classe viewmodel, a utilizam na camada de controle, outros na de modelo...

    Enfim, parece que cada um escolhe sua melhor ideia de como implementar e simplesmente implementa. Mas e se este sistema cair na mão de outra pessoa que não faz a mesma implementação? a manutenção pode ficar prejudicada, certo?

    Bem, acho que é isso, bora discutir!!!

    Eu, hoje, desenvolvo um sistema utilizando o template do ASP.NET MVC e seus arquivos.
    Tenho uma pasta de modelo com arquivos de repositório e das classes.cs, tenho uma pasta para a camada de controle com os arquivos de controle de cada entidade, e uma pasta de views com subpastas para cada entidade que terá suas informações exibidas.
    Para mim que sou novato em desenvolvimento com C#, ASP.NET e MVC, estou apanhando muito, mas estou aprendendo, e as coisas tem funcionado na medida que encontro respostas, informações, tutoriais, e ajuda da comunidade, é claro.
    Bem, esta é minha experiência com o MVC, e estou esperançoso que possa evoluir melhor, e que este tipo de implementação possa chegar a uma "padronização" mais coerente balançando a qualidade sem perder também a produtividade, pois trabalhamos a toque de caixa...
    terça-feira, 15 de setembro de 2009 14:38

Todas as Respostas

  • João,

    O problema é que o Asp Net MVC de M não tem nada.
    Isto não é necessariamente ruim, mas traz como consequẽncia este tipo de "confusão".

    A verdade é que não existe a melhor estrutura, nem a melhor solução, no tocante ao modelo.
    Fica a critério do desenvolvedor escolher por exemplo um ORM, e uma solução interessante para organizar os objetos de negócio.
    Uma sugestão seria aprofundar os conhecimentos relacionados a este tipo de problema: objetos de negócio, domain model, etc.

    Em relação a Controllers e Views, aí sim existe o jeito certo.

    Os Controllers só cuidam do fluxo de requisições, e as Views só cuidam do html.
    []'s
    Rafael Noronha
    http://rafanoronha.net/
    @rafanoronha
    quarta-feira, 16 de setembro de 2009 01:09
  • João,

    Não existe UMA melhor maneira. Cada um vai trabalhar um pouco diferente para entregar o projeto.
    A questão é que um time tem que padronizar como vai trabalhar num projeto, e seguir esse padrão.
    Num nível acima, a empresa também deve buscar algum tipo de recomendação. Eu evitaria qualquer tipo de "trava", que diz "não pode criar do jeito x", porque cada projeto é único. Trabalharia apenas para evitar práticas ruins, ou que quebram padrões reconhecidos.

    Quanto a um desenvolvedor que não conhece uma maneira de implementação, ou que trabalhar de outra forma, ter que lidar com um código legado... isso faz parte. Ele deve ter conhecimento no framework e nos padrões, e então vai entender o que foi feito e poderá prosseguir. Aí cabe à equipe anterior ter feito o projeto de forma que fosse fácil de entender.

    Quanto aos críticos do MVC que dizem que tem que criar muitas camadas, etc... eles não são críticos ao MVC, mas à engenharia de software. Desenvolver sem camadas, sem responsabilidades definidas, etc, etc, é uma prática ruim, independente de você usar ASP.Net MVC, Webforms, Windows Forms, ou o que for...

    Giovanni Bassi, Microsoft MVP, MCSD, MCPD, CSM, Arquiteto de software - http://www.giovannibassi.com
    quarta-feira, 16 de setembro de 2009 01:57
    Moderador
  • Muito bom, gente, legal mesmo.

    Então um bom "início" para utilizarmos MVC, independente de templates do .net ou seja onde ele for utilizado (Java, por exemplo), para se entender este padrão (MVC) é preciso primeiro entender o framework o qual voce usará no projeto, saber utilizar a linguagem que voce utilizará, e conhecer de programação em camadas, certo? sabendo isso, aí sim você terá um melhor aproveitamento das facilidades que o (por exemplo) ASP.NET MVC traz para este tipo de projeto, certo?
    Eu estou estudando C#, ASP.NET, e comprei um livro de MVC do Steven Sanderson, e neste livro diz que MVC não é um livro para programadores inexperientes, voce precisa ter um nível considerável de conhecimento para "manusear" esta ferramente de forma adequada.
    No caso, além do que eu estou estudando (C# e ASP.NET), o que voces indicariam para eu aprender mais sobre programação em camadas? Ou será que programação em camadas eu só deveria pegar quando eu estiver mais à vontade com c# e ASP.NET? que "passos" voces indicariam?

    Estou pensando em fazer o seguinte: C#, ASP.NET, depois AJAX, depois Banco de dados. Depois... camadas???

    O que foi dito sobre as peculiaridades de cada sistema é uma realidade, mas como o Giovanni disse, boas práticas de desenvolvimento precisam ser adotadas para que o sistema possa receber manutenção e que o código seja inteligivel.

    Muito bom, pessoal, obrigado por ajudarem nesta discussão.
    quarta-feira, 16 de setembro de 2009 11:36
  • João,

    É por aí sim.

    Talvez exista um assunto que possa te ajudar a enxergar a importância de desenvolver software utilizando este tipo de padrão.
    Pesquise por princípios S.O.L.I.D.
    São algumas guidelines para chegar a uma boa modelagem de objetos.
    Não está diretamente relacionado ao assunto, mas pode ser uma boa fonte de inspiração.
    []'s
    Rafael Noronha
    http://rafanoronha.net/
    @rafanoronha
    quarta-feira, 16 de setembro de 2009 14:18
  • Olá, pessoal.

    Assim como o João, também sou novato no ASP.NET MVC e, não sei se é pertinente, mas existe alguma recomendação de adequação do Domain-Driven Design com a estrutura padrão do ASP.NET MVC?

    Emerson
    domingo, 20 de setembro de 2009 14:34
  • Não. DDD é independente do ASP.Net MVC. O trabalho que você faz no domínio deve ser independente da estrutura do ASP.Net MVC. É o ASP.Net MVC que deve se adequar ao seu domínio, e não o contrário.
    Na prática, a camada de domínio é o "M" do MVC.

    Giovanni Bassi, Microsoft MVP, MCSD, MCPD, CSM, Arquiteto de software - http://www.giovannibassi.com
    segunda-feira, 21 de setembro de 2009 15:58
    Moderador
  • Caro João, muito pertinente seu post. Também estou caminhando com C# e ASP.NET e tenho dúvidas parecidas com as suas, por exemplo, quando desenvolvo em camadas crio uma DAL para acesso a dados, uma ENTITY para modelar os objetos e considero a página.ASPX a camada de apresentação, também  utilizo a pagina.aspx.cs para chamar os métodos criados na DAL enviando e recebendo as entitades. Não sei se essa estrutura pode ser considerada um projeto MVC... mas com certeza sigo boas práticas.
    Se você for como eu, que gosta de estudar na prática, mesmo utilizando como fonte as leituras de livros/site/tutoriais/foruns, então lhe recomendo começar seus projetos já organizando as camadas, estudando C# e ASP.NET para utilizá-las da melhor forma e estudar banco de dados como algo a parte, quanto mais vc souber melhor, ao criar procedures por exemplo, você pode criar regras de negócio dentro do banco...

    Vamos alimentar essa discussão... preciso aprender muito sobre os padrões atuais ainda.

    Abraços
    quarta-feira, 7 de outubro de 2009 14:07
  • Por favor, gente, se as colocações feitas aqui forem uteis para voces, não esqueçam de votar.
    Todas as que tem me acrescentado algo, eu tenho votado.
    quarta-feira, 7 de outubro de 2009 16:33