Nascendo meu 1º projeto Java web - Que Deus e vocês me ajudem!

Há alguns meses fiz o treinamento FJ-11 da Caelum e agora estou me planejando para fazer o FJ-21 (Dezembro agora ou em Janeiro no máximo). Mesmo sem ter feito o FJ-21, estou iniciando o meu primeiro projeto Java web até para gerar dúvidas para eu aproveitar melhor o próximo treinamento.
Tenho bastante experiência com SQL e desenvolvimento procedural, mas nenhuma experiência em Java.

Inicialmente, estou trabalhando na funcionalidade de logar no sistema, para tal, pensei da seguinte forma:

Classes
:arrow: classe Pessoa, com os atributos da pessoa (CPF/CNPJ, nome/razão social, etc.)
:arrow: classe PessoaUsuario extends a classe Pessoa, portanto, com os atributos da classe Pessoa, mais um método que será responsável pela autenticação do usuário e senha.
Pensei desta forma pois toda PessoaUsuario é uma Pessoa e nem toda Pessoa é uma PessoaUsuario.

Banco de Dados
:arrow: uma tabela PESSOA
Ainda não sei se o que identificará uma pessoa ser ou não um usuário será uma flag (S/N) numa coluna da tabela pessoa ou se farei uma tabela PESSOA_USUARIO

O que acharam até aqui quanto ao planejado !?!?

Seguindo, surgiu mais dúvida:

Existirão usuários internos (eu e pessoas da minha empresa que farão a administração do sistema) e usuários externos (pessoas funcionários de meus clientes que usarão o sistema).
A administração do sistema não terá nenhuma relação direta com o sistema, ou seja, terá o papel de cadastrar os meus clientes que farão uso do sistema que vou desenvolver, configurações de banco de dados, entre outros.
A dúvida é a seguinte: vou utilizar a mesma tela de login para todas as pessoas, porém, como seria melhor fazer essa separação entre administrador do sistema e usuários do dia-a-dia?
Teria que ter uma página HTML com as funcionalidades de administrador do sistema e outra página HTML para os demais usuários? E nesse caso teria que colocar um IF para redirecionar a página.
Teria alguma forma mais elegante de se fazer essa divisão de papéis no sistema?

Desculpa pela extensão do post, mas não ví outra maneira de explicar a situação em que estou de dúvida e de planejamento.

Agradeço desde já a participação.

Renato Cerullo

Na minha humilde opnião acho que vc não precisa usar herança nesse caso, acho que só o relacionamento entre as classes pessoa e usuário já é o suficiente. E vc poderiam usa Filter para controlar o acesso no seu sistema da uma pesquisada aqui no fórum, acho que tem um tutorial sobre Filter.

Boa tarde!

Aqui tem um material bem legal do blog do Hebert Coelho membro aqui do guj, é uma aplicação completa que aborda entre outras coisas tela de login e a lógica de autenticação, da uma olhada que vc pode tirar algumas idéias pra complementar seu sistema.

http://uaihebert.com/?p=836

Att.

Obrigado pelas considerações vicenthy vou pensar no que você falou sobre não ter necessidade da herança.
Acho que você tem razõa… pelo menos até esse ponto do projeto que eu estou… o de login… pode ser que mais para frente do projeto faça mais sentido.

Vou dar uma olhada nesse material que você sugeriu ManoJava, obrigado !!!

ManoJava

Lí o material que você indicou e achei muito avançado para o meu conhecimento… preciso de alguma coisa mais simples… mesmo que seja uma tecnologia mais antiga, pois como falei, sou iniciante de tudo em Java.

[quote=rcerullo]ManoJava

Lí o material que você indicou e achei muito avançado para o meu conhecimento… preciso de alguma coisa mais simples… mesmo que seja uma tecnologia mais antiga, pois como falei, sou iniciante de tudo em Java.[/quote]

Entendo o que vc precisa, porém esse material do blog aborda técnicas usando JPA que é bem atual, dessa maneira vc fica por dentro do que ta sendo utilizado hj em dia em termos de consulta e persistência de dados, mas se vc quer algo mais básico procure pelo livro “Use a Cabeça” da Kathy Sierra, é uma abordagem diferente e menos técnica do java, mas se vc ja leu a apostila da Caelum, acho que vc está pronto para subir um nível no seu aprendizado.

Bom qualquer dúvida estamos a disposição!

Att.

[quote=rcerullo]ManoJava

Lí o material que você indicou e achei muito avançado para o meu conhecimento… preciso de alguma coisa mais simples… mesmo que seja uma tecnologia mais antiga, pois como falei, sou iniciante de tudo em Java.[/quote]

Na própria apostial fj-21 você aprenderá fazer isso. Pq não vai estudando ela até você começar o curso? No primeiros capítulos vc já conseguirá fazer um crud usando JBDC.

É essa a minha intenção norbAns

O que estou querendo com este post é verificar se o meu planejamento está de acordo com a orientação a objetos, entende !?!?
Não estou preocupado nesse momento no “como fazer” a aplicação.
Quero ver se estou no caminho certo ou mais adequado possível da minha modelagem de dados e principalmente da minha orientação a objetos.

Exemplo:
Como disse no começo deste post e pensando em tecnologia mais básica (tipo o material da Caelum FJ-21), como faria o redirecionamento de um usuário administrador e de um usuário comum de forma elegante.

Teria que ser um IF no método de autenticação ou tem alguma outra forma?

Não quero pensar em desenvolvimento procedural e fico com receio desses IF’s

Bom dia pessoal.

Ainda não consegui retirar as minhas dúvidas… vou tentar explicar de outra forma:

Banco de Dados
:arrow: tabela PESSOA
:arrow: coluna tipo de pessoa
1) usuário interno
2) usuário externo
dentre outros tipos de pessoa
:arrow: tabela USUARIO
finalidade de relacionar com a tabela USUARIO_SENHA e outra tabela (PESSOA_USUARIO), pois um usuário poderá estar associado a mais de uma pessoa
:arrow: tabela USUARIO_SENHA
finalidade de armazenar a senha válida do usuário e seu histórico de alterações

Classes
:arrow: classe Pessoa
:arrow: classe Usuario
:arrow: método de autenticação
responsável por validar o usuário e senha informados na tela de login com os dados que estão armazenados no banco de dados

Regras
:arrow: se a pessoa for do tipo 1 (usuário interno) o sistema deverá mostrar a página de administração do sistema (ex.: adm0000.html ou adm0000.jsp)
:arrow: se a pessoa for do tipo 2 (usuário externo) o sistema deverá mostrar a página do sistema em si (ex.: sis0000.html ou sis0000.jsp)

Dúvidas
:arrow: para fazer esse direcionamento de página, o código da funcionalidade tem que fazer parte do método de autenticação ou teria que ser um método a parte?
:arrow: teria que ter um IF no método para fazer o direcionamento; isso é correto ou teria alguma forma mais elegante?

Importante
não quero que vocês passem o código, pois isso vou pensar mais adiante… estou no planejamento das funcionalidades.
sei que tem tecnologias novas que facilitam esse trabalho, mas como sou iniciante, quero aprender desde o básico e a medida que vou crescendo em termos de conhecimento e entendimento, vou atualizando a tecnologia.
vou me basear no padrão MVC da apostila FJ-21 da Caelum, até porque farei o curso a curto prazo.

Obrigado

Meu caro, na minha humilde opinião, você está começando de maneira errada. Se você ainda está aprendendo a desenvolver pra Web, questões como autenticação do usuário são itens que podem ser deixados pra frente.

Acredito que você irá aprender bem mais se começar pensando que o sistema terá usuário único sem nenhuma autenticação e partir para as funcionalidades de fato.

Por exemplo, você disse que haverá uma área de administração. Administração do quê? Se não tem o que administrar, pra que fazer autenticação?

Portanto, sugiro a você que pegue a(s) funcionalidade(s) que você acha mais complicada e comece a desenvolver agora. Assim, depois que você tiver um bom rol de funcionalidades implementadas e funcionando, comece a adicionar autenticação, log, essas coisas acessórias.

Obrigado pelas considerações ruivo

Quando digo administração, me refiro a administração do sistema mesmo. Exemplo:

tipos de pessoas
se surgir um tipo de pessoa que não está cadastrado no sistema, quem fará esse cadastro será o usuário interno (de administração do sistema) e não o usuário externo (usuário que fará uso do que está cadastrado)

Concordo com o ruivo vc pode modelar esse sistema de autenticação e implementar depois que o sistema já estive funcionando, assim vc já estará familiarizado com a linguagem e os framaworks que são muitos.

A autenticação não é também uma funcionadlidade do sistema !?!?

A autenticação não deixa de ser uma entrada de valores, uma consulta no banco de dados, uma comparação de valores e no retorno de uma informação.

O que tem de diferente na autenticação por vocês aconselharem a implementação mais adiante?

Veja, eu penso que um administrador pode também ser um usuário, eu nao gostaria de entrar no sistema e ser direcionado para a página de adminstração…
Em minha opnião, você deve criar uma página de login, e a página home ter um menu para as paginas, neste menu somente irá aparecer o que o usuário pode visualizar, de acordo com seu “papel”, desta forma o Administrador pode acessar tanto as paginas normais quanto a pagina de administraçao…

Desta forma eu criaria uma tabela de permissões, onde constaria todas as permissões do usuário…

Quaquer dúvida tamo ae.

[quote=rcerullo]A autenticação não é também uma funcionadlidade do sistema !?!?

A autenticação não deixa de ser uma entrada de valores, uma consulta no banco de dados, uma comparação de valores e no retorno de uma informação.

O que tem de diferente na autenticação por vocês aconselharem a implementação mais adiante?[/quote]

Bem, vou tentar ser mais claro. Digamos que você está construindo um Painel de administração de servidores virtualizados. Será possível reiniciar, criar novas instâncias, desligar outras, aumentar o tamanho de memória, essas coisas.
Você está procurando um financiador para esse projeto. Se você apresentar uma funcionalidade, digamos, criar novas instâncias de servidores, o seu possível financiador verá muito mais valor no projeto, mesmo que não tenha autenticação nesse primeiro momento, do que ele só conseguir logar no sistema e não poder fazer nada. Ou pior, imagine que você levou uns 2 meses criando a parte de autenticação mais linda do mundo, com cadastro de usuários, permissões, autenticação ultra-segura… Que leva a nada. Ele não pode fazer nada mais que criar usuário e logar. O valor do seu software é muito próximo de zero e você investiu 2 meses que no final o valor total é isso, perto de zero.

Eu, como desenvolvedor que também sou, entendo que é mais cômodo começar pelo mais fácil. Mas infelizmente, isso não gera retorno, nem pra você, nem para seu cliente. É mais interessante começar pelas funcionalidades mais hardcore do sistema que ficar nesse de CRUD de usuários e autenticação.