Dúvida com modelagem dos objetos

Salve turma. Já apareci aqui algumas vezes sapiando os posts, mas acho que chegou a hora de participar efetivamente do ambiente, se é que me permitem :slight_smile:

bom, vamos lá… estava eu aqui pensando em um probleminha na modelagem dos meus objetos, e daí resolvi perguntar a opinião dos senhores, para talvez me indicar algo.

Tudo começa com um Médico. Ele é uma classe no meu sistema, isto é fato. Só que ele pode manipular sua agenda de atendimentos aos pacientes (outra classe). Legal, só que daí temos:

Ele entra com os dias e horas que irá atender pacientes (disponibilidade). Com isto fechado, ele poderá criar agendamentos para atender os pacientes somente dentro desses dias/horários.

Pensando uma arquitetura correta, eu penso que teria:

classe Agenda que irá controlar as adições/alterações na agenda (seja disponibilidade, seja agendamentos).
classe Disponibilidade para armazenar informações sobre as disponibilidades dele.
classe Agendamento para armazenar as informações sobre so agendamentos dele.

Parece meio óbvio, porém, nesse modelo eu tenho a classe Agenda executando mais de uma ação (gerenciar ações das Disponibilidades e ações dos Agendamentos).

Eu havia pensado em trabalhar diretamente com os objetos, tipo, ações de disponibilidade na Disponibilidade, e o mesmo no Agendamento, entretanto me pareceu estranho eu buscar as disponibilidades do Médico usando o objeto Disponibilidade e retornar um List de Disponibilidade. Afinal eu não entrego um “objeto Disponibilidade” para receber a lista de disponibilidade dele, entrego especificações - por isso eu tenho a classe DisponibilidadeSpec que trata disso para mim.

O que vocês acham ? Trabalhar centrado na classe Agenda e esta retornar objeto Disponibilidade ou/e Agendamento dependendo do caso ? Se for, penso que eu teria que abstrair algo na classe Agenda para evitar que ela faça duas funções (o que é totalmente pecado em OO).

abraços!

Lendo rapidamente o seu post, entendo que agenda é um atributo de medico, e atendimento como um atributo de agenda, ou uma lista de atendimentos como atributo de agenda. Poderia haver uma classe disponibilidade quer seria um atributo como lista ou não dessa classe medico, mas o fato é que a disponibilidade não pode ser ligada diretamente com agenda ou atendimento.

tarcisio.filo,

Certo. É realmente tem sentido a disponibilidade não ser atrelada à agenda. Eu poderia na rotina de agendamento delegar para a Disponibilidade a tarefa de verificar se o horário está disponível, acho que seria uma solução. Haveria um contato (troca de informações) entre Agendamento e Disponibilidade, mas elas estariam meio que “livres” uma da outra.

Veja, tentei especificar no diagrama minha idéia com as dicas do tarcisio.filo em relação ao Agendamento:

Se eu precisasse puxar algum agendamento do Médico, alimentaria a AgendamentoSpec e essa seria a chave para carregar o objeto Agenda que me retornaria objetos Agendamento com os horários encontrados. Penso que faça sentido, mas gostaria da opinião da galera por aqui :slight_smile:

Pensei em algo similar na Disponibilidade. Irei pensar para ver se sai algo :slight_smile:

Agradeço a força :smiley:

Abraço!