[Resolvido] Meu pesadelo não acaba, agora é a vez do MVC

30 respostas
F

Resolução: Com a ajuda de todos que aqui participaram coletei o material que me faltava e montei minha estratégia de estudo. Agradeço a todos pela ajuda!

Post original:

Caros amigos,

Quando eu achava que ia ter um pouco de paz e facilidade após ganhar confiança e começar a por em prática meus conhecimentos de banco de dados, veio mais uma coisa para complicar minha vida.

Para tentar criar uma interface simples para interagir com meu banco e ir ajustando a modelagem, escolhi PHP achando que era mais fácil de aprender e ganhar produtividade, já que meu sonho de consumo (Java EE) parece ainda bem distante!

Pelo que sei, MVC é um padrão de desenvolvimento de software, e ao estudar esses últimos 4 dias sobre ele vi que não há exatamente um consenso sobre como implementá-lo, e a coisa se complica um pouco mais quando tento aplicar esse padrão no que eu queria fazer inicialmente.

Basicamente minha ideia inicial é uma tela de login e quando logado carregaria menus de acordo com o perfil do usuário que logou.

Queria discutir possíveis soluções baseado em tudo que li, MVC não é exclusivo do PHP, certo?

No aguardo dos conselhos valiosos dos senhores :slight_smile:

30 Respostas

H

Não, não é.

Te aconselho a ler os livros do Use a Cabeça. Eles ensinam a base de OO e abordam esses tipos de assunto, inclusive o livro de Serlvet e JSP que mostram essa parte.

O MVC em java (sem framework) poderia ser JSP (View), Servlet (Controller), Classes java (Modelo).

É possível ter MVC em java sem problemas.

F

Obrigado pela resposta Hebert!

Só para eu tentar visualizar o fluxo, no caso de um formulário de login, o form ficaria no JSP, a validação na classe Java e o Servlet chamando a classe, mais ou menos isso?

Depois de logado, outro JSP que seria montado pelo Servlet através da classe Java do menu.

O caminho é mais ou menos esse?

J

Basicamente minha ideia inicial é uma tela de login e quando logado carregaria menus de acordo com o perfil do usuário que logou.
Essa dúvida não tem haver diretamente com MVC. Antes de seguir a arquitetura MVC, experimenta fazer puramente uma tela de login e carregamento de menu. Você provavelmente vai passar antes por assuntos como HTTP, Session, Cookie, Forms, Post, etc. Se a dúvida fosse sobre MVC acredito que você estaria apresentando uma questão mais direta sobre MVC.

H

fggs:
Obrigado pela resposta Hebert!

Só para eu tentar visualizar o fluxo, no caso de um formulário de login, o form ficaria no JSP, a validação na classe Java e o Servlet chamando a classe, mais ou menos isso?

Depois de logado, outro JSP que seria montado pelo Servlet através da classe Java do menu.

O caminho é mais ou menos esse?


Exato.

Para de duvidar de você mesmo. (:

V

O MVC é um modelo de divisão de camadas, não um padrão de projeto. Não há consenso na sua implementação pois padrões arquiteturais, como ele, são de mais alto nível e, realmente, não discutem sobre implementações.

Modelos arquiteturais são legais pois eles podem ser aplicados em diversas linguagens. O MVC existe no PHP, Java, Groovy, C#, etc… Há frameworks inteiras implementadas para dar suporte nessas linguagens como a CakePHP, Spring, Grails, MS MVC, respectivamente.

Quanto a literatura, siga a dica do Herbert. :wink:

L

Cara se você gosta de Java porque estuda Php ?
Alguns conceitos a base é praticamente a mesma como OO,MVC,HTTP,Cookies …
Estuda Java já que tu gosta têm muito material na internet.
E sim o MVC como os amigos falaram pode usar em diversas linguagens…
Se você pular assuntos básicos vai ficar cada vez mais complicado.

I

MVC é um padrão arquitetural. Isso significa que ele está embutido em frameworks comerciais como Swing (java) & Cocoa (objective-c).

Você (digo, o programador final) não devia estar “implementando” MVC.

F

Pessoal, muito obrigado pelas respostas!

@javaflex: Foi o que fiz, mas seguindo as más práticas e fui crucificado ao pedir ajuda no canal #php da freenode quando fui extender a aplicação, sendo assim resolvi seguir as boas práticas. Realmente não era bem MVC diretamente, mas acho que todo o conteúdo necessário para aplicá-lo corretamente é que me enrolou um pouco!

@Hebert Coelho: Maravilha! Ao menos entendi o conceito básico hehehe

@ViniGodoy: Perdão pelo erro, MVC é uma arquitetura como foi dito, certo? Com certeza seguirei as dicas de leitura do Hebert! Obrigado!

@lucasvvasconcelos: Na verdade eu não estou “estudando” PHP, foi algo que eu achei que seria uma solução rápida para depois aplicar o Java com calma, já que ainda não terminei nem de estudar Java SE, quanto mais tudo que envolve Java EE. Por exemplo, fiz Lógica de Programação no Alura usando Javascript, tentei usar o mesmo conceito com o PHP, aprender conceitos para depois aplicar em outra linguagem, mas pelo jeito falhei feio heheheh

@ImpossiveI: Exato, me equivoquei ao tentar falar sobre MVC, quis dizer arquitetura. Corrigindo novamente, onde você ler implementar, quis dizer utilizar! Obrigado pelas explicações!

J

fggs:
Pessoal, muito obrigado pelas respostas!

@javaflex: Foi o que fiz, mas seguindo as más práticas e fui crucificado ao pedir ajuda no canal #php da freenode quando fui extender a aplicação, sendo assim resolvi seguir as boas práticas. Realmente não era bem MVC diretamente, mas acho que todo o conteúdo necessário para aplicá-lo corretamente é que me enrolou um pouco!


Não ligue muito pra esses puristas de arquitetura, modas vem e vão. Importante é ter a base da tecnologia web. Como falaram aqui, pular etapas complica o entendimento, acaba que fazendo as coisas só porque seguiu frameworks. A galera do PHP era bem humilde e com soluções direcionadas, agora está bem escrota e com milhares de opções de frameworks, cada hora inventam uma moda nova.

F

@javaflex: Pois é! Até que o pessoal que tem me ajudado é mais humilde e contra framework, além da arquitetura MVC, queriam que eu usasse Front Controller, com router e dispatcher, mas imagina entender tudo isso quando não tava entendendo nem MVC direito. Ouvi bastante “Você está fazendo isso errado! Dessa forma você vai demorar séculos pra terminar e vai se atrapalhar com a quantidade de arquivos! Reaproveite seu código com o framework tal”, até que esses que estão me ajudando atualmente me disseram: Calma, monta só o login com a triade até você pegar o jeito, nem pense em router e dispatcher agora.

I

Talvez vc esteja indo rápido demais, por isso que palavra do tipo router e dispatcher te assusta, e seja melhor vc aprender primeiro a programar, depois melhorar seu código. Voce sabendo programar e criando seus primeiros sistemas/site, voce reconhecerá onde poderia estar menos acoplado e quando ler sobre MVC novamente, vai ver que faz sentido.

I

Alguém ainda usa MVC na web em pleno 2015?

Achei que com a popularidade de APIs REST o interesse por essa bizarrice* tivesse diminuído, mas pelo visto sempre vai ter um programador web tentando copiar soluções efetivas em outras plataformas para adaptar no mundo web.

  • real MVC requer que as partes (Model-View-Controller) estejam separadas, mas ao mesmo tempo próximas, para a comunicação ser efetiva. Isso não acontece na web, onde a view e o controller podem estar a km de distância um do outro.
F

@igor_ks: Pois é Igor, diminui o ritmo de aprendizado para fixar esses conceitos, quando estiver enxergando melhor o fluxo das coisas, dai parto para router/dispatcher.

@ImpossiveI: Olha, se ainda usa não sei, mas foi a exigência para que eu continuasse sendo ajudado lá com o PHP. Não vi e não pesquisei nada de REST ainda, mas como disse no começo, minha ideia pra agora é usar esse PHP só para uma interação inicial com o banco, para validar os meus conceitos de modelagem. Minha ideia final é usar PrimeFaces ou ZK para a interface final. Sendo bem sincero, depois de ler muito e avaliar algumas coisas, o que eu gostaria mesmo era HTML5 + CSS3 + Javascript/jQuery para elementos mais complexos da interface, só não sei o que usaria “de baixo dos panos” para interagir com o banco. Não sei se isso faz sentido para você ou vocês.

D

Olá @op,

eu acredito que usar o seu tempo agora para aprender MVC seja desnecessário. Primeiro estude o que o Hebert falou, através dos livros “use a cabeça”. É importante voce saber coisas como HTTP, Session, Cookie, Forms, Post, GET etc. É importante você conhecer bem também o fluxo de qualquer página web (seja em java, php ou outro…)

Depois dê uma olhada no REST. Resumindo bem porcamente, o REST é uma forma de separar COMPLETAMENTE a camada de View da sua aplicacao (a sua tela de login, o html dela) da regra de negocio (o servidor, que faz o select e manipula dados/sessoes etc,). Porque hoje em dia está assim? Pq as tecnologias de visualização estao evoluindo mto rapido. Ontem era flex, hoje é javascript, e tem mobile na parada… e amanhã não sabemos. Entao é fundamental que o seu servidor seja ele em Java ou PHP saiba lidar com esse tipo de coisa.

Vou deixar 2 artigos para vc ler a respeito:

http://imasters.com.br/gerencia-de-ti/tendencias/a-evolucao-do-mvc-para-rest/ (muita teoria blablabla)
http://imasters.com.br/desenvolvimento/exemplo-de-integracao-rest-entre-servidor-e-cliente/ (um exemplo mais pratico)

Entenda que, primeiro você deve conhecer o basicao (OO, Alguns padrões, HTTP, Sessão, Requisição etc) e depois vc pode partir para entender as tecnologias que pipocam por ai. Vai acostumando ai que essas tecnologias vem e vao a todo momento, o desenvolvedor hoje precisa estar atento para conhecer o que é melhor pra si e mais atento ainda para não ficar muito tempo em uma tecnologia somente.

[]s

I

Se você pretende focar em web no momento, conhecimento de MVC é desnecessário. Conhecimento de MVC é básico no entanto, se você pretende desenvolver uma aplicação não-web (Swing, Android, iOS, MacOS).

Enfim, estudar pelo que é básico de acordo com o plano de estudo de outra pessoa pode ser um problema, melhor é aprender aonde usar as coisas de acordo com cada situação, e depois escolher baseado na suas própria escolhas profissionais.

F

@DanielSchmitz: Obrigado pela ajuda, estou correndo atrás dos livros agora. Dediquei muito tempo estudando banco de dados por achar que a parte mais difícil era lá, mas realmente, a partir dessas últimas semanas os desenvolvedores front-end ganharam mais meu respeito. Agora é correr atrás e estudar bem essa parte também, com certeza vou olhar REST depois com mais calma, assim que eu fixar os outros conceitos. Aliás, acabei de entrar numa discussão onde a pessoa disse que pode-se usar os dois em conjunto, já que REST não tem relação direta com MVC, já que cada um opera partes diferentes da aplicação. Obrigado também pelos links!

@ImpossiveI: Pode deixar, vou deixar isso anotado que MVC deve ser usado em aplicações desktop (inclusive, pelo que li, essa arquitetura foi criada pelo Smalltalk-80).

F

Pessoal, encontrei o livro aqui, mas não ficou claro se é um livro “físico” ou e-book: http://www.altabooks.com.br/use-a-cabeca-servlets-and-jsp-2o-edicao.html

Sabem dizer?

Dito isso, acho que na parte de banco de dados já tenho um começo que pode evoluir, mas partindo para a interface estou bem perdido como podem ver, então gostaria da opinião de vocês sobre essas opções:

  • Comecei minha “formação” Java SE pelas video-aulas do canal de youtube chamado Universidade XTI e parei para estudar banco de dados, fiz basicamente um terço das 116 aulas, continuo isso e parto para o livro?

  • Possuo conta no Alura, lá vi que existem 7 cursos de Java, 11 cursos de Java Avançado (mas entre eles talvez apenas 3 que se encaixam a novatos) e mais 8 cursos de Java Web onde 2 me interessam mais que é um de Servlet 3 e Fundamentos Web e outro de JSF 2, não sei se os 7 de Java são suficientes para me “formar” em Java SE ou se devo continuar com as video-aulas acima, o que acham?

  • Como podem ver no link, o livro custa R$ 125,91 (mais frete?!), ele traria mais coisas do que os cursos de Servlet 3 e JSF 2 do Alura? Digo, compensa comprar de qualquer forma?

Estou fazendo faculdade, mas esse semestre tá sendo só frustração, já que não tô vendo nada de programação prática, mas também acho que não é papel só da faculdade de me passar conhecimento, eu também tenho que correr atrás.

Aguardo a opinião de vocês! Muito obrigado!

A

Anteriormente, nesse post, o Viny colocou o seguinte pra você

REST, muita gente ainda não entendeu e os conceitos são os mais variados. Indo bem pelo começo, REST (REpresentional State Transfer) essa sigla já nos diz muito sobre REST.

http://www.infoq.com/br/articles/rest-introduction
Esse trecho do artigo acima

Eu vejo como algo próximo do que eu fui capaz de entender sobre REST. As pessoas vão florear, nomear de forma diferentes, tentar vender suas ferramentas como REST, etc. mas no final das contas, REST está mais para, como diz sua própria sigla, uma representação mesmo do HTTP. Ele define uma pancada de princípios que você deve definir para usar todo o poder do HTTP ao seu favor ao expor suas APIs.

Resumindo, MVC e REST não são concorrentes. Se você colocar toda a sua regra de negócios em um servidor, quer seja ele PHP, Java, Ruby, etc. ou que quer que mais você possa usar aqui, você ainda terá que ter o MVC para manter sua API fácil de se adaptar.

A grande diferença é que o REST só vem pra somar nessa divisão e ainda é em sua forma pura o melhor meio de usá-la.

M <-> V <-> C significa que você está deixando sua aplicação pronta pra mudar a qualquer momento a estrutura de qualquer uma das siglas sem mexer com as demais.

REST veio exatamente para dinamizar o V (View) dessa divisão. Você pode fazer sua Aplicação PHP, que lá na ponta, comunica em formato JSon e recebe informações no mesmo formato. Em outro servidor, temos uma aplicação, em AngularJS por exemplo, que tem toda a estrutura WEB de visualização desses dados. Isso é uma View, se comunicando com seu Model-Controller.

Seguindo essa arquitetura, você também pode ter o seu Smartphone Android ou IOs ou Windows Phone ou etc. também comunicando com o seu Model-Controller, e o melhor, sem precisar saber se ele está escrito em Java, PHP, C#, Ruby, Python, etc. Basta que ele saiba comunicar em JSon (aqui pode ser também qualquer formato em comum, sendo que JSon é o mais famoso e o mais leve atualmente, além de ser padrão da indústria) e seja capaz de ler retornos em JSon.

Então, até onde tenho estudado, REST veio pra turbinar o MVC e não para substituí-lo… Você pode até não usar MVC diretamente, mas o usará através de frameworks, portanto é importante conhecê-lo.

Só que como último conselho, é que ele, nesse momento do seus estudos, não é mandatório. Faça que nem os colegas já falaram, aprenda session, request, response, cookies, HTTP, etc. MVC virá depois, com a sua própria vivência no dia-a-dia…

Ah e também, no dia-a-dia você pode precisar "quebrar" alguns padrões pra fazer sua aplicações funcionarem… Quebre com moderação, mas não emperre sua aplicação por isso. :wink:

I

Se você colocar toda a sua regra de negócios em um servidor, quer seja ele PHP, Java, Ruby, etc. ou que quer que mais você possa usar aqui, você ainda terá que ter o MVC para manter sua API fácil de se adaptar.

MVC existe na camada da view. Se REST separou a camada view do servidor, isso significa que MVC não é mais usado no servidor, ou entendi errado?

API são interfaces progamáveis e não possuem View, logo não faz sentido usar ModelViewController?

I

fggs:
Pode deixar, vou deixar isso anotado que MVC deve ser usado em aplicações desktop (inclusive, pelo que li, essa arquitetura foi criada pelo Smalltalk-80).

Bom, você pode usar MVC na web, o problema é que o model não pode notificar a view porque o servidor não pode iniciar uma requisição para um browser, então é uma versão limitada. Mas como falado, hoje em dia existem servidores que não publicam views, mas uma API, no meu entendimento não faz sentido usar MVC nesses casos.

F

Obrigado pelas respostas pessoal!

@adriano_si: Eu acho que entendi o que o Vini falou, mas tentei também interpretar os links do DanielSchmitz, que diz, se eu entendi corretamente, que o REST separa a camada view do servidor, logo, tá mais pra MC do que pra MVC, como disse o ImpossiveI, mas posso estar redondamente enganado.

Entendi também que não se deve seguir nada à risca uma arquitetura/modelo fizer emperrar o desenvolvimento da aplicação, acho que isso vem com a experiência que eu ainda não tenho, mas li muito sobre quando uma arquitetura/modelo não funciona, deve-se entender o porque não funciona e gerar uma nova arquitetura/modelo, afim de cobrir a necessidade, é mais ou menos assim? O único problema que vejo nisso é que surgem muitas correntes.

@ImpossiveI: Entendi, é a visão que eu tive dos links do DanielSchmitz, REST seria o “modo web” do MVC, se entendi corretamente.

Gente, e sobre as coisas que coloquei no último post? O livro e as opções, algum comentário?

Vou dar quote pra facilitar hehe

Pessoal, encontrei o livro aqui, mas não ficou claro se é um livro “físico” ou e-book: http://www.altabooks.com.br/use-a-cabeca-servlets-and-jsp-2o-edicao.html

Sabem dizer?

Dito isso, acho que na parte de banco de dados já tenho um começo que pode evoluir, mas partindo para a interface estou bem perdido como podem ver, então gostaria da opinião de vocês sobre essas opções:

  • Comecei minha “formação” Java SE pelas video-aulas do canal de youtube chamado Universidade XTI e parei para estudar banco de dados, fiz basicamente um terço das 116 aulas, continuo isso e parto para o livro?

  • Possuo conta no Alura, lá vi que existem 7 cursos de Java, 11 cursos de Java Avançado (mas entre eles talvez apenas 3 que se encaixam a novatos) e mais 8 cursos de Java Web onde 2 me interessam mais que é um de Servlet 3 e Fundamentos Web e outro de JSF 2, não sei se os 7 de Java são suficientes para me “formar” em Java SE ou se devo continuar com as video-aulas acima, o que acham?

  • Como podem ver no link, o livro custa R$ 125,91 (mais frete?!), ele traria mais coisas do que os cursos de Servlet 3 e JSF 2 do Alura? Digo, compensa comprar de qualquer forma?

Estou fazendo faculdade, mas esse semestre tá sendo só frustração, já que não tô vendo nada de programação prática, mas também acho que não é papel só da faculdade de me passar conhecimento, eu também tenho que correr atrás.

Aguardo a opinião de vocês! Muito obrigado!

I

Não sei cara, se você acha que esta sabendo de banco de dados, então onde está o código?

Livros e cursos são bons complementos, mas não vai avançar tão rápido quanto se estiver praticando.

A

+1

F

@ImpossiveI e adriano_si: Certo, pelo que entendi, qualquer uma das opções é valida desde que eu as use para praticar depois, é isso?

Sobre a pergunta “cade o código?”, é o que eu me pergunto diariamente heheheh

A

ImpossiveI:

Livros e cursos são bons complementos, mas não vai avançar tão rápido quanto se estiver praticando.

Na verdade, vai avançar mais rápido se praticar usando como base o que estudou em cursos ou livros. Se não fizer isso, pode estar reinventando a roda.

Mas, é fundamental que você 'imagine" uma solução e codifique para praticar programação e testar a funcionalidade do que planejou. Mesmo que a solução não seja a mais adequada ou de acordo com as melhores práticas, ou padrões. No início, o importante é que você consiga fazer a sua solução funcionar.

F

@A H Gusukuma: Obrigado pela resposta, sei que não foi diretamente para mim, mas tem alguma opinião dentre as opções que postei? Termino Java SE? Se sim, pelo Alura ou as video-aulas? Começo o curso de Servlet antes de terminar Java SE? Se sim, começo pelo livro ou pelo Alura? São basicamente as dúvidas que tenho para traçar um plano.

Obrigado mais uma vez por ajudar

J

Como o foco é web, inicialmente pegaria o direcionamento dado por essa apostila: http://www.caelum.com.br/apostila-java-web/ e em paralelo muito google conforme for praticando. Depois conseguirá se virar para encontrar onde aprender sobre REST e assuntos mais avancados da parte front end.

F

@javaflex: Valeu! Ai vou eu para os estudos! Acho que posso usar os cursos do Alura também para me apoiar, não? Maravilha! Exatamente o que eu queria, um ponto de entrada! Só não sei como você encontrou essa apostila pois vasculhei o site inteiro atrás dela e nada, mas que bom que achou! Acredito agora ter material suficiente pra me virar, só falta “mostrar código!” hehehe

Obrigado pessoal!

A

Música tema do padrão:
MVC song

F

@A H Gusukuma: Valeu pela música! Bem didática! hahaha

Aproveitando o agradecimento, me surgiram dúvidas nos exercícios opcionais da apostila recomendada pelo javaflex, como não sabia se as dúvidas deviam ir no Java Básico, Java Avançado, Desenvolvimento Web ou aqui, acabei por experimentar o GUJ Perguntas, mas acho que não entendi bem o conceito ou não fui claro quando postei minha dúvida lá, 35 visualizações e nenhum comentário, se puderem dar uma olhada ficarei grato!

Link: http://www.guj.com.br/38908-duvidas-sobre-tratamento-de-excecoes-e-mais-alguns-detalhes

Criado 6 de abril de 2015
Ultima resposta 19 de abr. de 2015
Respostas 30
Participantes 10