Как изменить функцию, чтобы удовлетворить OCP?

В C реализована следующая функция:

function(struct_XX *p)
{
    if(p->A)
    {
        if(p->B)
        {
            do something0;
        }
        if(p->C)
        {
            do something1;
        }
        if(p->D && p->E)
        {
            do something2;
        }
          if(p->Z)
        {
            do something3;
        }
    }
}

каждая ветвь имеет свои задачи: она не удовлетворяет принципу Open-Closed (поскольку структура, на которую указывает p, нестабильна, новые поля будут часто добавляться в нее, что означает, что новые коды процессов будут часто добавляться в функцию); как это можно изменить, чтобы удовлетворить OCP?

1 ответ

Вы не дали много, чтобы пойти, у вас есть куча условий, и куча "делать" на основе этих условий.

Итак, учитывая, что... вы можете сделать что-то, что хранит наборы условий и обратных вызовов....

void ocpfunction(struct struct_XX *p)
{
   int i;
   for(i=0; i<p->conditions_count; i++) 
   { 
      if(p->conditions[i].evaluate(p))
      {
          p->conditions[i].callback(p, p->conditions[i].context);
      }
   }
}
Другие вопросы по тегам