Uma classe serve várias

Certo, não sei se o título foi feliz, mas veja o cenário:

Algo bem comum: Categoria. Ela serve em alguns momentos diferentes do meu domínio. Como por exemplo, Produto e FAQ. Um Produto está associado à uma Categoria. Um “FAQ” (pergunta e resposta) está associado à uma Categoria.

O modelo “Categoria” é universal. O mesmo funcionamento para Produto e FAQ. Daí vem duas questões:

  1. em qual pacote ela deve ficar ? no “catalogo” ou em “faq” ou tanto faz ?
  2. ela poderá servir ambos tranquilamente ? Ou seja, apenas o Repositório terá que se virar com o ORM para buscar as informações corretas (porque lá na persistência será dois lugares diferentes, como categoria_produto e categoria_faq, por exemplo). E como poderia ser feito isto ? Penso em passar algo ao Repositorio para orientá-lo sobre qual “tipo” de categoria estamos tratando…

O que acham ?
Abraços !

Por que nao CategoriaDeProdutos e CategoriaDeFAQs? O numero de categorias é muito alto? E por que voce quer reaproveitar a mesma em situacoes tao diferentes?

E a principal pergunta: Se é possivel no dominio por que nao é possivel no banco? E se nao é possivel no banco porque voce quer forçar no dominio?

Opa !

Pois eu penso que se separar seria duplicar o código uma vez que ambas categorias fariam a mesma coisa no domínio.

Não, é bem pequeno. Ambas não dariam 100 registros. Huum… são diferentes realmente, mas o funcionamento é idêntico em ambas, por isso eu pensei em deixá-las sendo uma só.

Sendo sincero, pensei em fazê-la entender “tipo” de categoria, assim, seria única classe e única tabela lá no database. Talvez funcionasse e ficasse coerente no sistema, não sei.
Eu só “forcei” no domínio por “medo” de ter um Ctrl + C e V de classes para mudar somente lá o final na persistência. Tirando a persistência, seriam idênticas.