【发布时间】:2016-07-05 21:25:57
【问题描述】:
我正在尝试重构一段给定的代码,如下所述:
原始代码:
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
}
}
但是我看到 ConditionalHandlerClass 类中的 HandleLinkProcessing() 方法仍会随着新条件的不断添加而不断增加。
您能否建议我如何使这个实现更好,以便在添加新的 ConditionE() 和 MethodE() 调用流时不应该更改像 ConditionalHandlerClass 这样的类。因此,即使添加了新条件,也可以降低一次类的复杂性。
我正在目标 c 中编写此代码。
【问题讨论】:
标签: objective-c design-patterns solid-principles