Приложение, над которым я работаю, обрабатывает рабочие элементы. В зависимости от состояния рабочего элемента доступен ряд действий. «Завершить» «Отменить» «Переназначить» и т. Д.
Чтобы обеспечить функциональность для действий, у меня в настоящее время есть интерфейс, который выглядит примерно так ...
public interface IActionProvider{
public void Complete(WorkItem workItem);
public void Cancel (WorkItem workItem);
public void Reassign(WorkItem workItem);
}
Затем на основе других деталей рабочего элемента, который у меня есть конкретные реализации интерфейса. Например ...
public class NormalActionProvider :IActionProvider
{
...
}
и
public class UrgentActionProvider : IActionProvider
{
....
}
Проблема в том, что если я хочу добавить новое действие, скажем ... «Делегировать», мне нужно обновить интерфейс, что, конечно же, влияет на все реализации.
Нарушает ли это принцип открытия / закрытия? Можете ли вы порекомендовать шаблон проектирования или рефакторинг, которые могут мне здесь помочь?