如何根据洁净原则处理按钮水龙头?
问题描述:
我有以下的,看似简单的代码处理按钮水龙头iOS应用程序:如何根据洁净原则处理按钮水龙头?
- (IBAction)tapKeypadButton:(UIButton *)sender {
NSString *buttonLabel = sender.titleLabel.text;
if ([buttonLabel isEqualToString:@"<"]) {
[self _tapBackButton];
} else {
[self _tapDigitButton:buttonLabel];
}
}
要由罗伯特C.马丁完全遵循清洁守则原则,我需要在同一个ButtonTapFactory什么线?
答
你有两种类型的按钮,具有不同的行为(后退按钮和数字按钮)。为了使这段代码干净,每种类型都应该有两个动作。类型不应该由按钮内部的文本内容决定,而应该通过语义上有意义的方式来确定。 (即子类)。 此外,一个动作方法应该只包含对另一个执行实际逻辑的方法的调用。其他一切都是不可测试的。在代码:
- (IBAction) tapBackButton:(id) sender
{
[self _tapBackButton:sender];
}
- (IBAction) tapDigitButton:(id) sender
{
[self _tapDigitButton:sender];
}
这种方式,您可以有单元测试调用你的方法,而你的UI代码干扰。另请注意,我从拨打_tapDigitButton
的电话中删除了该标签。该数字不应该从标签中解析出来,而应该以更加语义稳定的方式传递,例如使用tag
属性。
你试图遵循什么原则?你为什么认为你需要一个'ButtonTapFactory'? – 2012-04-25 15:24:03