Я пытаюсь реорганизовать данный фрагмент кода, как указано ниже:
ИСХОДНЫЙ КОД:
Method(URL link)
{
if(ConditionA(link))
{
MehodA(link);
}else if(ConditionB(link))
{
MehodB(link);
}else if(ConditionC(link))
{
MehodC(link);
}else if(ConditionD(link))
{
MehodD(link);
}
}
приведенный выше код может увеличиваться по мере появления новых условий в будущем. После рефакторинга я могу разделить код на несколько классов, каждый из которых отвечает за одну задачу, тем самым уменьшив первоначальную сложность следующим образом:
ПОСЛЕ РЕФАКТОРИНГА:
METHOD(URL link)
{
ConditionalHandlerClass obj = new ConditionalHandlerClass(link);
ConditionalHandlerClass.HandleLinkProcessing();
}
Class ConditionalHandlerClass
{
URL link;
IConditionalProcess process;
public ConditionalHandlerClass(URL _link)
{
link = _link;
}
public void HandleLinkProcessing()
{
if(ConditionA(link))
{
process = new ProcessA(link);
}else if(ConditionB(link))
{
process = new ProcessB(link);
}else if(ConditionC(link))
{
process = new ProcessC(link);
}else if(ConditionD(link))
{
process = new ProcessD(link);
}
process.Handle();
}
}
interface IConditionalProcess
{
void handle();
}
class ProcessA() : IConditionalProcess
{
void handle()
{
// Business Logic here
}
}
class ProcessB() : IConditionalProcess
{
void handle()
{
// Business Logic here
}
}
class ProcessC() : IConditionalProcess
{
void handle()
{
// Business Logic here
}
}
class ProcessD() : IConditionalProcess
{
void handle()
{
// Business Logic here
}
}
Но я вижу, что метод HandleLinkProcessing() в классе ConditionalHandlerClass будет по-прежнему увеличиваться по мере добавления нового условия.
Можете ли вы предложить, как я могу улучшить эту реализацию, чтобы класс, такой как ConditionalHandlerClass, не изменялся при добавлении нового потока вызовов ConditionE() и MethodE(). Следовательно, снижается сложность в одном классе, даже если добавляются новые условия.
Я пишу этот код в объективе c.