Eu tenho duas classes base, Operatione Trigger. Cada um possui várias subclasses especializadas em certos tipos de operações ou gatilhos. A Triggerpode disparar um específico Operation. Enquanto um Operationpode ser acionado por um específico Trigger.
Preciso escrever o código que mapeia um dado Operationa 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 Triggere uma coleção de Operation. Ele precisa saber onde existe um mapeamento entre a Triggere an Operation. Ele usará essas informações para criar um relatório.
