我正在制作一个计算器应用程序来学习 Objective-C 并且可能会提高我的 OO 设计技能。为了做更多类似 MVC 的事情,我将实际的计算器代码与视图控制器分开。对于每个动作,视图控制器所做的几乎所有事情都是告诉“模型”执行针对该动作的操作。
问题是,这给了我一堆方法,这些方法基本上什么都不做,只是将动作转发给模型,如下所示:
- (IBAction)clearAll:(id)sender {
[self.model clearAll];
}
- (IBAction)clearDisplay:(id)sender {
[self.model clearDisplay];
}
- (IBAction)clearMemory:(id)sender {
[self.model clearMemory];
}
- (IBAction)storeMemory:(id)sender {
[self.model storeMemory];
}
- (IBAction)addMemory:(id)sender {
[self.model addMemory];
}
- (IBAction) subtractMemory:(id)sender {
[self.model subtractFromMemory];
}
- (IBAction)recallMemory:(id)sender {
[self.model recallMemory];
}
到目前为止,Objective-C 在动态转发消息方面似乎非常灵活,而且这些方法非常相似,看起来很容易自动化。他们真的必须在那里吗?还是有一种不那么重复的方法来告诉控制器只将某些消息传递给模型(理想情况下,同时剥离sender
arg)?
我一直在寻找并尝试使用选择器和 的一些东西,但是通过删除所有让我将按钮连接到操作NSInvocation
的标记,这似乎会使 Interface Builder 混乱。(IBAction)
(在这些情况下,如果视图不必知道或关心控制器只是转发到模型,我会更喜欢。)
那么,有没有更少重复和/或骇人听闻的方式?还是不值得麻烦?(或者这首先是一个坏主意?或者这是试图让模型做太多事情?或者......)