2010-06-17 65 views
1

所以我一直在试图设计一种干净的方式来为我的模型在iPhone land中抓取数据。我的应用程序的所有数据都来自JSON API。为iPhone开发设计一个适用于JSON API的DAO

所以现在当一个VC需要某些模型时,它会自己执行JSON调用(异步),当它接收到数据时,它会建立模型。它的工作原理,但我试图想一个更清洁的方法,即DAO为我检索信息并返回模型,全部以异步方式。

我最初的想法是为我的DAO构建一个协议,这样VC会实例化一个DAO并将其自己作为委托。当您请求数据[DAOinstance getAllUsers]时,DAO将执行所有的网络请求,然后当它有数据时,它会调用其代理(VC)上的一个方法来传递数据。

所以我认为这是一个很酷的解决方案,但意识到如果我需要在同一个VC中为不同的目的使用相同的DAO,我的委托方法将不得不根据哪个DAO实例发起请求来分支逻辑。

所以我的第二个想法是能够将'处理程序'选择器传递给DAO对象一个典型的JavaScript模式。因此,而不是官方协议,我会说[DAOinstance getAllUsersWithSelector:“TheHandlerFunctionOnMyVC:”]然后,当DAO完成其网络活动时,它会调用VC上传递的选择器,并将数据传回。

那么我在这里完全走错了方向吗?似乎也许是一个好方法。

设计这种数据层的任何指针或文章都会很好。

谢谢! Bob

回答

2

当您需要回调并且不想在处理程序方法调用者上分支时,传递目标(您的VC在这里)和选择器(处理程序方法)是很常见的。这被称为目标选择器模式。

除此之外,您可能想查看关于此可能设计的RestfulCoreDataCoreResource框架。

另外着名的ObjectiveResource框架可能会提供一个很好的见解。