Я бы разделил правила и их применение, чтобы ваш код стал
For all Rules
if ThisRule.Applies(activity) then
ThisRule.ApplyActions(email);
break;
Тогда правила будут классом, в котором каждое правило имеет Applies и ApplyActions или ConstructEmail или что-то в этом роде.
Вы строите список правил в приоритетном порядке. Как только это будет сделано, вам нужно будет только перебрать список.
Суть этого в том, что Правилам не нужно знать о других правилах или заботиться о них, все правила фактически независимы, им нужно только знать, являются ли они правилом для выполняемой им деятельности, и следуют ли они затем действия для этого правила.
Сложность состоит в разделении различных правил,
Например, если у вас есть правило, в котором новый статус отменяется, поэтому вы должны поместить отмененный в заголовок, но у вас есть другое правило, которое также применяется, тогда вам нужен механизм для применения нескольких правил, таких как:
For all Rules
if ThisRule.Applies(activity) then
ThisRule.ApplyActions(email);
if ThisRule.TerminalRule then
break;
так что простые правила, такие как изменение темы, позволяют применять и другие правила.