Classe que possui 2 associações, onde posicionar atributo

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