Desculpem se estou tentando abrir um assunto que já tenha sido muito discutido e eu não saiba. Se esse for o caso, peço que uma alma caridosa me indique o link para a discussão, pois preciso muito estudar isso, urgente.
No meu ponto de vista esse é um assunto muito relevante para quem vai desenvolver um sistema, seja ele qual for. Quero falar sobre a estratégia utilizada para se criar entidades em um modelo de domínio. Pelo que eu saiba, salvo grotesco engano, devemos trabalhar para tirar o máximo de proveito dos recursos de OO para fazer com que as entidades representem o domínio do negócio de forma mais próxima da realidade possível. Pois bem, caso eu esteja enganado, peço que alguém me corrija. Mas se isso representa a verdade, vou apresentar o seguinte senário, onde tenho entidade Systemuser, que representa um usuário do sistema e tenho as entidades Employee, Customer e Vendor. No meu entendimento, todos essas entidades estenderiam direta ou indiretamente de uma entidade Person, pois no mundo real elas representam a entidade (pessoa), apenas com caracterísitcas a mais. Por exemplo, um cliente e um fornecedor são pessoas. O funcionário também, mas podemos considerar que o usuário do sistema, por sua vez, é um funcionário.
Acredito que nessas situações mencionadas acima, a herança representaria muito melhor o mundo real do que o encapsulamento e convido os amigos a pensarem comigo. É diferente dizer que um funcionário é uma pessoa e dizer que um carro tem um motor. O encapsulamento representa muito melhor o segundo cenário.
Quando a chave primária de uma tabela é uma chave estrangeira apontada para a chave primária de outra tabela, entende-se automaticamente que uma entidade é uma extensão da outra. E não consigo imaginar diferente, a menos que haja uma mudança de conseito que eu não esteja entendendo.
Todavia, ferramentas IDE de criação automática de entidades através de JPA, como Netbeans ou Eclipse, quando solicitado para gerar entidades automaticamente com base em um banco já existente, o mesmo não cria as entidades extendendo uma das outras. Ele cria como objetos encapsulados em atributos. Alguém saberia dizer porque?
E se meu raciocínio está errado, alguém poderia me ajudar a ver isso?
Grato.