У меня есть два базовых класса, Operation
и Trigger
. У каждого есть несколько подклассов, которые специализируются на определенных типах операций или триггеров. А 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
и a Operation
. Он будет использовать эту информацию для создания отчета.