2009-12-30 61 views
0

我想学习我的第一个编程语言。不幸的是我选择了Iphone开始。认为这很容易...... ooops。无论如何,4周后,我实际上已经有几个工作的应用程序!那种......正确的面向对象的应用程序设置

我的一个应用程序,有一对夫妇的文本框和一对夫妇的标签。 每个人都有一个按钮,可以启动一个计时器,递减倒数的标签文本。

我有火递增的变量两种不同的方法2个独立的计时器,播放一首歌曲,更新一些相对于每个人的标签等。不代表大量的代码发生战争,但足以不想在每次我想出如何去做新的事情时都不得不改变这两套。

什么是更好的方式来设置这使我可以只用一组每人代码工作?我把整个“人”看作一个对象的想法,它应该是它自己的类,并且我应该从我所做的所有阅读中对它进行分类。我只是不知道如何实际应用它与实际的代码。

回答

2

我觉得第一个开始的地方是实现一个网络接口的定时器(几乎总是)的一部分,而不是数据模型的一部分。除非你有一些非常奇怪的要求,否则定时器不应该与你的人员数据对象相关。

您希望在数据和界面之间保持严格的分离。这是严重错误Model-View-Controller模式背后的关键想法。它应该被称为Model-Controller-View来反映控制器在模型和视图之间进行调解。

就你而言,这听起来像你有一个人物对象,它是你的数据模型。理想情况下,该模型不会直接链接到任何特定的界面。一个好的数据模型可以与标准视图,Web视图甚至基于文本的命令行界面一起工作。它与模型无关,因为它只涉及存储或操作数据,而不考虑如何显示或使用数据。

更新接口的定时器属于控制器,因为它们与数据无关。显示在不同接口中的相同数据需要不同的定时器。您可能只需要一个定时器,它只是在控制器中调用一个方法,根据需要更新所有界面元素。在该方法中,控制器从数据模型中的相应对象(您的案例中的人员类的实例)中获取它需要显示的数据。

例如,假设您有多个人物对象,每个人都有自己的倒数数字。您将倒数值存储在人物对象中作为属性。控制器中的单个计时器每秒会触发一次,并在控制器中调用一个方法。然后该方法会询问每个人的倒计时值。在被询问值时,人物对象会自动递减倒数值。

使用此设计,您可以处理任意数量的人物对象,每个人物都有自己的倒数属性,控制器中只有一个计时器和一个方法。

+0

这就是我正在寻找的答案!非常感谢! – 2009-12-31 12:10:22

+1

如果是这样的答案,您应该点击旁边的复选标记,以便系统知道问题得到了解答。 – TechZen 2009-12-31 16:30:06

+0

感谢您的领导!这是我问过科技网站的第一个问题!我应该在几周前来这里! – 2009-12-31 16:34:22

0

我们可以谈几个小时甚至几个月和几年的面向对象设计。设计原则的存在是因为他们最好的学习和掌握,通过经验和大量的实践。

如果您需要2个定时器,每一个调用1种方法发挥了独特的作用,那么你很可能受困于2个定时器。如果您的两个计时器中有共同的任务/职责,您可以创建一个抽象计时器来实现这些常见任务,并将其扩展为更具体的行为(方法实现)。

我发现基于角色的设计在许多情况下,有益的,但正如我所说的,你将不得不练,当然知道面向对象和继承的基础知识。

相关问题