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?
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).
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.
[quote]Basicamente minha ideia inicial é uma tela de login e quando logado carregaria menus de acordo com o perfil do usuário que logou.
[/quote]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.
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 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.
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.
@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!
[quote=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![/quote]
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.
@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.
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.
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.
@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.
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.
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.
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.
@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).
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.
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.
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.
[quote]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.
[/quote]
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?