Eu tenho duas classes base, Operation
e Trigger
. Cada um possui várias subclasses especializadas em certos tipos de operações ou gatilhos. A Trigger
pode disparar um específico Operation
. Enquanto um Operation
pode ser acionado por um específico Trigger
.
Preciso escrever o código que mapeia um dado Operation
a um dado Trigger
(ou vice-versa), mas não tenho certeza de onde colocá-lo.
Nesse caso, o código não pertence claramente a uma classe ou a outra classe. Portanto, em termos de um princípio de responsabilidade única, não tenho certeza de onde o código deve pertencer.
Eu posso ver três opções que funcionariam. Enquanto 1 e 2 parecem ser apenas uma opção de semântica, 3 representa uma abordagem totalmente diferente.
- No gatilho, por exemplo
bool Triggers(Operation o)
. - Na operação, por exemplo
bool TriggeredBy(Trigger t)
. - Em uma classe inteiramente nova que gerencia o mapeamento, por exemplo
bool MappingExists(Trigger t, Operation o)
.
Como devo decidir onde colocar o código de mapeamento compartilhado em relação a um único princípio de responsabilidade?
Como gerenciar uma responsabilidade única quando a responsabilidade é compartilhada?
Editar 1.
Portanto, o código real se parece com isso. Todas as propriedades, são ou um string
, Guid
, collection<string>
, ou enum
. Eles são basicamente apenas pequenos pedaços de dados.
Editar 2.
O motivo do tipo de retorno de bool. Outra classe consumirá uma coleção de Trigger
e uma coleção de Operation
. Ele precisa saber onde existe um mapeamento entre a Trigger
e an Operation
. Ele usará essas informações para criar um relatório.