Olá,
Estou desenvolvendo um projeto onde tenho (pequeno exemplo do contexto para facilitar compreensão):
-
Cliente publica Anuncio gera Cobranca
-
Cliente contrata Plano gera Cobranca
Tenho dúvida sobre onde posicionar os atributos para representar a Cobranca, tipo:
-
Adicionar atributo Cobranca nas classes que geram cobranca
-
Criar classes que herdam de Cobranca, exemplo: CobrancaAnuncio para relacionar com Anuncio
-
Adicionar atributo na classe Cobranca para identificar a origem da cobrança
-
Enfim, um sugestão de como modelar para que possa gerar cobrança ára o cliente de qualquer associação
OBS: Segue imagem em anexo

- Adicionar atributo Cobranca nas classes que geram cobranca
- Acho uma boa opção. [=
- Criar classes que herdam de Cobranca, exemplo: CobrancaAnuncio para relacionar com Anuncio
- Pq você faria isso? CobrancaAnuncio vai ter comportamento diferente de CobrancaPlano? Se seu relacionamento não for bidirecional (cliente.cobranças e cobrança.cliente) vc não precisaria fazer isso. Bastaria um Enum para dizer se é cobrança de Anuncio ou de Plano
- Adicionar atributo na classe Cobranca para identificar a origem da cobrança
- Acho uma boa opção. [= Crie um enum boladão e coloque lá.
Anuncio não seria um tipo de Plano???
Teoricamente que não, pois plano tem pagamento mensal e anúncio é avulso.
Depende dos requisitos né? Vamos esperar ele responder.
Plano tem e 1…N Cobrança
Plano do tipo Anuncio pode se encaixar nessa situação.
Sei lá, só um brain storm.
A regra de negócio é:
Anúncio gera Cobranca (1:1)
Cliente ao contratar Plano gera Cobranca (1:1), pois o a contratação terá data inicio e data fim, ao expirar, ele faria nova contratação
Realmente não vão ter comportamento diferentes, a única justificativa para essa idéia foi para poder através da cobrança chegar até a classe que gerou a mesma
Outros itens importantes da regra de negócio é:
- Permitir que consulte todas as consultes todas as cobranças do cliente
- Ao fazer uma consulta de por exemplo, cobranças do mês, permitir saber o cliente do cobrança, fica a dúvida:
Dúvida: Vocês colocariam um atributo Cliente em Cobranca? Mesmo sendo redundante, pois o Cliente já está associado a Anúncio ou ClientePlano, se não como faria para ter essa consulta