2010-03-08 84 views
2

我正在使用MVC设计模式创建一个简单的应用程序,其中我的模型从Web访问数据并使其可供我的控制器进行后续显示。MVC模型实现?

经过一番研究,我决定一种方法是将我的模型作为单例实现,以便我可以将其作为来自任何控制器的共享实例进行访问。

说了这么多,我读到的关于单身人士的信息越多,我注意到有人说有几种情况下没有更好的解决方案。

如果我不使用单身人士,我很困惑我在哪里可以创建我的模型类。我不太乐意通过appDelegate来完成它,并且将它放在任何viewControllers中似乎都不可行。

任何意见或指针将不胜感激。

EDIT_001:

TechZen,非常感谢(梦幻般的回答总是)我可以使它接受前加一个进一步有点问题。当应用程序退出时,您如何解除分配单身人士的想法如何?我不确定这是多么重要,因为我经常知道对象释放不会在应用程序拆卸时被调用,因为当应用程序退出时它们将被清除。显然我可以使用NSApplicationWillTerminateNotification注册共享实例,这是否值得做,只是好奇?

加里

+0

我想我找到了答案EDIT_001:“单身的目标C通常意,直到内存是由OS进程终止时回收从实例化生活”,因此将迎来答案接受。再次感谢。 – fuzzygoat 2010-03-08 15:56:44

回答

8

有很多推回到了单身的使用,因为他们经常被滥用。懒惰的编码器(1)在单例中没有提供足够的功能,导致逻辑在其他对象(如意大利面条)中散布,或者(2)他们投入了很多功能,使得单例变成了整个程序。懒惰的编码器经常使用单例,而不是进行数据验证,对象测试和对象跟踪。人们厌倦了试图解开和保持懒惰的单身人士使用,所以他们试图压制单身人士的使用。

我完全理解冲动,而我自己在仪式上警告反对单身人士的虐待。

但是,数据模型是单身人士少数合法用途之一。对于那些在手机上运行的小应用程序尤其如此。最后,您将为数据模型使用单例,或者将其附加到单例。

例如,假设您决定将您的非单例数据模型对象放在应用程序委托中。那么,你已经这样做了:dataModel - > appDelegate - > application(singleton)。要访问它,你会叫:

[[[UIApplication sharedApplication (a singleton)] delegate] theDataModelObj]; 

即使你通过它周围像从对象令牌对象,你仍然必须有数据模型OBJ开始作为一个单独的属性。

当一个对象真的必须满足“汉兰达”模式(“只能有一个!”)时,单身是最好的选择。除了应用程序对象之外,您还将用户默认设置为单例以及文件管理器。显然,在所有这三种情况下,您都希望整个应用程序只有一个实例存在。例如,如果您有多个用户默认对象,那么您的应用程序将成为试图追踪所有首选项设置的列车残骸。如果您有多个文件管理器,则文件操作可能会互相踩在一起。

正确设计的用户数据模型仅仅是一个更大的用户默认值的版本。它应该是直接操纵用户数据的唯一对象。应用程序中没有其他对象应该至少具有该任务。这使得单例设计模式成为这种特殊情况下最好的模式。

单身是一个非常强大的工具,但就如同一个物理的工具,他们给你更多的权力,他们创造了更多的机会让你砍你的头掉,如果你不小心使用它们。出于这个原因,单身人士应该很少成为你的首选。通常使用更好的设计模式。

但是,当你真的需要一个单身,你不应该使用它们只是因为其他人的懒惰给了他们一个坏名声避而远之。

知道什么时候,当不使用一个强大的和危险的工具是直觉,你有经验的开发程序员的一部分。你不能通过公式。这是使得良好的编码成为艺术和程序员成为工匠的因素之一。