我有一个问题需要了解如何根据我的应用程序中的MVC架构将数据从数据库正确下载到我的模型对象。
以下是该应用的外观:
/ NavigationController -> ViewController -> ...
TabBarController - NavigationController -> ViewController -> ...
\ NavigationController -> ViewController -> ...
所以TabBarController
是带有3个标签的初始控制器。在每个标签下,UIViewController
中嵌入了NavigationController
链。由特定UIViewController
控制的每个视图都显示来自数据库的数据。这些数据经常更新,所以我需要定期从数据库下载它们。
然后我有一个模型对象。在我的应用程序中,我只有这一个模型对象,因此所有UIViewController
都可以访问相同的模型对象(我知道每个UIViewController
应该有自己的模型对象,但我有理由这样做) 。
据我了解MVC,沟通应该是这样的:
UIViewController
会向模型对象发送数据请求UIViewController
UIViewController
将数据从模型对象更新为View 这应该没问题。但我不知道应该在哪里放置一个连接到数据库并向其发送请求的DatabaseController
。这应该是分离的控制器和模型对象必须有一个引用它,因为他需要告诉他,他需要更新其数据。
我找到了一些博客,其中包含应在模型对象中创建DatabaseController
并使用类别与模型对象代码分开的信息。我的观点是,这是一个坏主意,因为它破坏了MVC架构。
DatabaseController
放入应用程序的最佳解决方案是什么?我应该把它放在对象模型中还是外面......
答案 0 :(得分:1)
我以前从未使用过Objective-C,但一般来说OOP,访问数据库的代码肯定应放在一个单独的地方 - 除此之外,这使得维护和修改变得更容易将来访问数据库的代码,并使代码更加清晰。
一种众所周知且广泛使用的方法是Data Access Object (DAO)模式,它允许您从其余逻辑中抽象出应用程序的持久性详细信息。
Repository模式也经常用于此目的。
在您的情况下,如果您有一个名为Thing
的模型类,则可以使用ThingDAO
等方法创建getAllThings()
, getThingById(id)
,updateThing(thing)
,deleteThing(id)
等
然后,您可以从Controller
调用此对象,或者在我看来,更好地从您的模型类调用此对象。
您可能会认为,当我们添加另一个图层时," 会破坏MVC架构" - 在我看来,实际上DAO层是模型的一部分。我认为你的模型的概念可能不太正确 - 请记住,模型不是一个类,而是一组(可能是数千个)类。在一个大型应用程序中,您的模型将包含实体,DAO,EventListeners,处理程序,管理器,命令,变形金刚,助手等许多其他内容......
答案 1 :(得分:0)
数据访问等等,就像业务逻辑应该是模型的一部分,我将尝试解释原因:
当然这适用于MVC,但是由于这种模式在iOS开发中被大量使用,因此主要关注它是有意义的。
答案 2 :(得分:-1)
我的建议是转向MVOC架构,其中O代表其他人。其他人将是一个不适合M,V或C的图层。这里的O将是您的网络层。控制器调用的单例对象,用于获取数据并获取填充的模型对象。