Как изменить функцию, чтобы удовлетворить 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);
}
}
}