Metodologia

26 respostas
D

Bem… devo ser como muitos que chegam no TCC e começam a ter q correr atrás de informações!

Preciso da ajuda do pessoal mais experiente porque não consigo achar a melhor maneira de trabalhar com o meu projeto…

Na minha faculdade meu curso é dividido em 2 semestres.
O primeiro semestre para o projeto escrito
E o segundo semestre para o projeto lógico

O projeto escrito está parcialmente feito. Não desenvolvi nada dos diagramas ainda porque sei que certamente terei q mudar tudo na hora do desenvolvimento… isso é errado?

Continuando…

Escolhi um tema de forma que assim que eu terminar a faculdade, pretendo dar continuidade no sistema a nivel comercial.

Meu primeiro passo foi imaginar como seria ele para os usuários e tentar fazer com que fosse bem intuitivo.

Por ser um sistema aonde existe um administrador e vários usuários… acabei deduzindo que o correto seria fazer praticamente 2 sistemas, um com as funções pra administrador e um com as funções para usuários comuns e certamente interligados através do banco… isso também é correto? Qual seria a maneira correta quando se trata de usuários com permissões distintas (digo em questão de acesso aos menus).

Continuando…

Acreditando que a maneira correta seria criar dois sistemas… montei todo os protótipos de telas em jsp para ambos os sistemas (Administrador e Usuário)…
Ficou bonitinho e tals… mas agora travei…
O que devo fazer? Criar todas as tabelas no banco de dados conforme as telas de cadastro? Começar a implementar os servlets? os DAO?

Meu orientador falou que a maneira correta seria usar MVC… ok! sendo q ele é professor de outra matéria, quanto mais sabe programar em java…
Entendi como funciona usando MVC… mais seria praticamente um desperdício de tempo pra um projeto tão pequeno…

Usar somente JSP + Servlets não seria o suficiente?

Recomendam eu usar algum framework pra facilitar meu trabalho?

Se alguem puder dar respostas pra alguma das minhas perguntas…
Ajudaria e muito…
Antes que eu desista de tudo =P

26 Respostas

R

Primeiramente, qual é o tema do seu trabalho? O que vc tem que fazer mais exatamente?

D

É um sistema pra gerenciamento de condomínio.

Síndico, faz todos os cadastros e lançamentos.
Usuário, faz consultas e reservas do salão de festas.

A faculdade exige que seja um sistema orientado a objetos e web.

O que vou fazer e como vou fazer sou eu que escolho!

henriqueluz

Explica isso melhor, posso não estar entendendo exatamento como você fez.

D

Assim Henrique…

Tenho dois grupos de usuários ( Administradores e Usuários )

Os Administradores tem acesso as seguintes funções do sistema:

  • Cadastros (aqui existem varios sub-menus pra cadastros)
  • Lançamentos (aqui tem lançamentos de caixa especificamente)
  • Consultas (aqui são relatórios, tanto de cadastros como de lançamentos)
  • Agenda (aqui é o controle do salão de festas)
  • Mural (aqui é tipo um sisteminha de blog - permissão pra fazer novos posts)

Os usuários tem acesso as seguintes funções do sistema:

  • Consultas (aqui são relatórios, tanto de cadastros como de lançamentos)
  • Agenda (aqui é o controle do salão de festas)
  • Mural (somente leitura dos posts e comentarios)

Como se tratam de menus diferentes de permissões…
acabei criando como se fosse dois sistemas a partes…
mais que acessam o mesmo banco de dados…

marcio_de_jesus_sant

ai meu amigo da uma olhada no curso de t2ti.com. que tem uma video aula de condominio e no final ele monta pra web,

henriqueluz

Beleza, deixa eu ver se entendi.
Como você controla o acesso/permissões aos módulos seguintes:

  • Consultas
  • Agenda
  • Mural

Já que tanto Admin como Usuario tem acesso a eles. Você criou dois(um para cada)? Ou criou apenas um e controla de acordo com o nível de permissão?

nel

Oi!

Porque acha que MVC seria uma perda de tempo? Porque considera que o seu sistema será “pequeno”?
Então pretendes fazer um trabalho de conclusão de curso de qualquer forma, desde que ele esteja apresentavél e você se forme, é isso?

É uma ótima oportunidade para melhorar/usar teus conhecimentos em desenvolvimento. Não deixe de usar MVC.
JSP com Servlets com certeza supri sua ncessidade, mas eu recomendaria utilizar JSF, é simples e muito eficiente.

Sobre o controle de acesso, o Henrique lhe fez algumas perguntas, mas minha recomendação é que faça o controle de acesso a páginas de acordo com o nível de login do usuário. Não tente separar tudo e etc. Por exemplo, em JSF tu podes usar um f:subview indicando quando uma tela deve ou não ser apresentada ao usário.
Isso é algo bem básico e por cima que estou falando, se der uma pesquisa de no máximo 1 dia, verás ótimas implementações disso.

E outro detalhe, dependendo o container Web que utilizar, até ele mesmo com algumas configurações faz o controle de login para você, depois você apenas administra a questão de acesso as telas.

Pense com calma, lembre-se que TCC é TCC meu caro.
Abraços.

D

@henriqueluiz

a principio não tenho o controle ainda

na verdade vai ser feito através do banco de dados (mysql)
tenho uma tabela com os usuários e uma coluna diz se ele é administrador ou não…
se for… pode ver tudo… se não for… não pode!

@nel

é sistema é simples! mas são muitas telas… muitos cadastrinhos básicos…
cada tela teria q ter uma view, um modelo e um controller…
isso demandaria tempo… e só tenho praticamente 4 meses pra concluir tudo!
minha preocupação está no tempo mesmo…

não entendi como funciona o JSF… seria como…
o menu tem 10 campos…
mas conforme a permissão ele mostra ou não o campo?
mais dai o menu não seria feito em “dhtml”, certo?

Sobre o container… uso tomcat…
também não entendi como seria esse controle de login…


parece q tem inumeros caminhos… mas sempre q olho pareçe q to indo pelo errado e mais complicado!

coloquei uma imagem da tela já logada como administrador…
talvez clareie um pouco a minha idéia!

nel
Por se ter várias telas é mais um motivo para se utilizar o MVC. Ele traz muito beneficíos e você pode começar a ter do de cabeça se por um select da vida dentro de uma Servlet ao invés de concentrar isso em um DAO, por exemplo. Imagine replicar o mesmo select ou boa parte deles em 10 telas distintas, sendo que basta um ou dois atributos dentro de um método para diferenciar um select do outro.

Sobre o login, tranquilo. Faça a consulta no banco de dados e verifique se o Login e Password estão corretos, não precisa complicar ou exigir demais nesse quesito. O que você precisa verificar é como irá fazer o controle de restrição de acesso a determinadas páginas. Eu já usei algo parecido com JSP e Struts, mas infelizmente faz mais de um ano que fiz isso e agora, com certeza, não me recordo, senão poderia lhe dar uma dica.

Mas pesquise, na net tem zilhões de exemplos.
Abraços.

D

Mas não entendi uma coisa ainda!

Se eu utilizar JSF as paginas que criei em JSP ainda vão ser aproveitadas?

Posso usar MVC sem precisar usar o JSF né?

Os controles de usuários seria feito por session…
mas cada tela teria que validar a session criada no login!
é certo fazer assim?

henriqueluz

Se eu utilizar JSF as paginas que criei em JSP ainda vão ser aproveitadas?

Posso usar MVC sem precisar usar o JSF né?


Sim e sim.

Os controles de usuários seria feito por session…
mas cada tela teria que validar a session criada no login!
é certo fazer assim?

Usando o padrão MVC fica facinho porque você faz a validação não na propria tela, mas sim no seu Controller que é uma classe responsavel por direcionar o fluxo entre suas Views(tela).

Dá uma estudada nisso, cara. É muito importante, compensa e você ainda vai gostar de fazer.

Abração

nel

dombeck:
Mas não entendi uma coisa ainda!

Se eu utilizar JSF as paginas que criei em JSP ainda vão ser aproveitadas?

Posso usar MVC sem precisar usar o JSF né?

Os controles de usuários seria feito por session…
mas cada tela teria que validar a session criada no login!
é certo fazer assim?

JSF é um framework MVC (mas há aqueles que conseguem programar sem que isso seja verdade). O contrário não é verdadeiro, ou seja, MVC não é uma implementação de JSF por exemplo. MVC é um padrão (sem entrar em detalhes) que pode ser aplicado a sistemas Desktop, Web e sem que isto esteja ligado ao framework em questão. Eu programava com Struts, JSP e DAO, e tudo em MVC. A camada de Servlet era responsavél somente por questões ligadas a tela, tinha outras camadas responsavéis por comunicação com base de dados, regras de negócios e etc.

Se vai usar JSP e Servlets ou JSF, não faz a menor diferença no que diz respeito ao MVC, entende?
Sobre buscar o usuário da sessão, eu vejo que está correto. No logout não pode esquecer de remover o mesmo da sessão. Há outras formas, mas acredito que essa seja uma forma simples e que realmente funcione.

Abraços.

D

@henrique

no caso o controller vai ser um conjunto de classes que validam várias informações antes de me passar pra uma próxima pagina!

ex.: valida a session, conecta no banco, insere no banco, se tiver tudo ok ele retorna o destino da proxima pagina

@nel

camadas que vc se refere são classes certo?
cada classe fazendo sua função…
no caso uma controller fazia a chamada de cada uma delas…

henriqueluz

@dombeck
Você pegou o espirito. Quase, isso.
As classes responsaveis por conectar ao banco e fazer as outras operações são as classes que implementam o padrão DAO.
No Controller você tera um objeto DAO e é ele quem acessa. O Controller é que faz a comunicação entre a camada de visão e a camada do seu model. Direcionando o fluxo junto com os dados vindo dela ou para ela.

Entendeu?

D

Mais ou menos!

Vou ver se acho um projetinho básico na internet que mostre bem como funciona MVC.

Acho que olhando direto na minha IDE fica mais facil entender o fluxo.

Se souber algo pra me indicar =)

henriqueluz

Claro,
Apostila do Curso FJ-21 da Caelum:

Bons Estudos :wink:

nel

Só para que entenda…

Imagine que você fez um Select x, porém, precisou replicar ele em 10 classes (Servlets, por exemplo) distintas, porque tem 10 páginas que usam a mesma Query.
Já começou muito errado, não acha? Repetir código dessa forma em Java…bom, ok.

Agora pega esse cenário e imagine que em um determinado momento, uma ação em sua página causa erro no seu select, você vai ter que propagar isso novamente em suas 10 classes e assim por diante. Consegue visualizar a situação!?

Abraços.

M

Vamos ver se consigo te ajudar…

Qual caminho ? depende (esta resposta mata ne…rs )

Se seu usuário for um usuário real, começar pelas telas é algo bacana, pois ele vai conseguir ver e já ir falando o que deve ser diferente, isso ajuda você a entender o que deve ser feito, mas este não é o seu caso.

Um outro caminho seria começar por onde for o seu forte, se modelar o banco, inicie por banco, se for interface, pela interface, e assim por diante…

Mas no seu caso é um trabalho acadêmico, então comece pelo banco… faça funcionar e depois gaste um tempo na interface para ficar bonita.

D

o bom é que todas as telas estão praticamente prontas.
Com excessão as que buscam informações no banco.
pq não esta montado ainda e nao criei a estrutura das tabelas ainda.

@nel

eu entendi…
na verdade eh tentar criar classes de forma que sempre eu possa estaciar objetos dela…
sem precisar ficar implementando na mão elas toda vez que precisar usar.

Um exemplo bobo mas que serve é o caso da conexão com o banco.
Criei uma classe que faz a conexão com o Mysql e agora só precisa chamar ela!

Pra cada botão na tela, tenho que ter um servlet e pra cada servlet tenho que ter um modelo?

Botão que tenha alguma ação no caso!

nel

Oi!

Não necessariamente. Você pode ter um Servlet para concentrar todos os tipos de cadastros, outro para remoção, outro para lidar com eventos, enfim, isso fica a seu critério. O ideal, na minha opinião, é não criar absolutamente um, tendo em vista as diversas manipulações de dados que terá.

Sim, você tem a classe que realiza a conexão ao banco de dados mas ela não será invocada dentro de sua Servlet.
Quando se realiza conexão ao banco? Quando se precisa executar alguma ação sobre ele, seja consulta, inserção, atualização e etc.
O que você vai fazer é ter uma classe “Intermediária”, o seu DAO, em que vai simplesmente fazer algo assim:

DAO dao = new DAO(); dao.insert(seuObjeto);

Esse é um código que pode estar em sua Servlet, por exemplo.
Lá no seu DAO, mais especificamente no método insert, você fará a conexão ao banco de dados, montar a query de inserção, inserir, criar os PreparedStatement e etc que é necessário, fechar a conexão e pronto. Toda a manipulação de dados referente ao banco foi fora de sua Servlet. Sendo assim, se precisares alterar algo na inserção, basta alterar o seu método e não várias Servlets e etc, entende?

Forte abraço!

D

perfeitamente!

essa tua explicação me deu uma boa clareada.

então na real as servlets é só quem fazem todas as chamadas pras outras classes que realmente executam as tarefas.
mas e quem informa a minha view que o cadastro foi executado com sucesso…
suponhamos q estou no mesmo ambiente q vc explicou acima…

a servlet chama a DAO, que conecta no banco, insere e ai… ?
retorna uma informação pro servlet dizendo q teve sucesso e o servlet gera uma resposta de saída?

vlw pelas ajudas =)

lendo apostila recomendada pelo henrique

nel

Exato.

Vamos supor que o retorno do seu método seja um booleano. Ocorreu uma exceção na inserção, por exemplo, você gera um log e retorna um false ao Servlet.
Você tem um false que indica “Houve algo de errado na inserção, preciso comunicar ao cliente”. Pois bem, com esse tratamento, sua Servlet apenas informa na tela que não foi possível inserir as informações devido a um erro interno, entende? (SQLException é complexo de tratar, por exemplo. Pode ser problemas na tabela, sem conexão, falta de campo, bla bla bla…).

Se retornou true, opa, agora eu sei que foi inserido no banco! Vou avisar que houve sucesso!
Pronto, sua Servlet simplesmente fez uma invocação simples, mais nada. Você pode fazer nelas as validações de campo, não vejo problema algum.
Só sou expressamente contra manipula de dados referentes ao banco, por exemplo.

Espero ter ajudado.
Abraços.

D

De uma forma grosseira de falar…
O Servlet faz com que as Views (JSP) conversem com as Model (DAO, entre outras).

Como faço os métodos retornarem um resultado booleano…
me da um exemplo simples!

henriqueluz
public Boolean inserir(Objeto oj){
     /*Manipula seus dados, e insere
        Se deu tudo certo
     */ 
       return Boolean.TRUE;
    //Caso contrario, se der algum tipo de erro
    return Boolean.FALSE;
}

Clareou?

D

Perfeitamente!

Passo o Objeto pra DAO que insere ou não e me retorna com true ou false.
Com essa resposta na servlet eu decido o que fazer!

Já que estão me ajudando…
vou abusar mais um pouco!

no caso da autenticação do login…
preciso ter um objeto pra login ?

ou simplesmente jogo pra uma string o valor dos getparameter e chamo uma DAO pra validar e me retornar a informação!?

henriqueluz

Lembra-se da coesão entre classes?
Se você lembrar disto sua pergunta é respondida automaticamente.
Mas adiantando, eu criaria sim.

Criado 4 de agosto de 2011
Ultima resposta 5 de ago. de 2011
Respostas 26
Participantes 6