У мене базові два класи, Operationі Trigger. У кожному є ряд підкласів, які спеціалізуються на певних типах операцій або тригерів. A Triggerможе викликати конкретний Operation. У той час як Operationможе бути ініційований певним Trigger.
Мені потрібно написати код, який відображає задану Operationданість Trigger(або навпаки), але я не знаю, куди її поставити.
У цьому випадку код чітко не належить до одного чи іншого класу. Тож з точки зору принципу єдиної відповідальності я не впевнений, куди повинен належати код.
Я бачу три варіанти, які б усі працювали. Хоча 1 і 2, здається, є лише вибором семантики, 3 представляє цілком інший підхід.
- На спусковий гачок, напр
bool Triggers(Operation o). - Про операцію, наприклад
bool TriggeredBy(Trigger t). - У абсолютно новому класі, який управляє картографуванням, наприклад
bool MappingExists(Trigger t, Operation o).
Як я повинен вирішити, де розмістити загальний код картографії стосовно єдиного принципу відповідальності?
Як керувати єдиною відповідальністю, коли відповідальність поділяється?
Редагуйте 1.
Тож власне код виглядає приблизно так. Всі властивості, є або string, Guid, collection<string>або enum. Вони в основному представляють лише невеликі фрагменти даних.
Редагувати 2.
Причина зворотного типу bool. Інший клас буде споживати колекцію Triggerта колекцію Operation. Він повинен знати, де існує відображення між a Triggerі an Operation. Він використовуватиме цю інформацію для створення звіту.
