我正在连接到REST服务。它是QuickBlox,具体而言,除了REST API被定义为SQL查询(但特别是减去连接)之外,它应该无关紧要,我可以对它进行CRUD。
QuickBlox提供iOS SDK,它为我提供了一个使用回调构建REST查询的界面。
在我的程序中,我想要User
,UserResourceTable
,Card
等对象。 (它不像User
那样存在于特殊的QuickBlox模块中,但为了问题,可以忽略它。)
我构建了一些我认为类似于ActiveRecord模式的东西(我希望)。所以在我的User
课程中,我有CRUD方法,Card
课程也是如此。而且这些CRUD有回调(或者更确切地说,是关闭的Objective-C块)。
最初我已经“读取”了类方法(就像Java静态方法一样),因为在调用read
之前没有任何关于读取的对象,所以我想我会在上述类中提供静态工厂方法
UserResourceTable
不会直接暴露给使用User
类的人。它是在创建User
时创建的,并在读取User
时读取。
现在一切顺利,直到我开始考虑单元测试。我最终决定进行依赖注入(DI),然后我希望将UserResourceTable
注入到User中。但是现在看来很难做DI而read
是一个类方法/静态方法,我现在认为我希望read
是一个实例方法。 (特别是在Objective-C中没有静态变量,即使我可以在文件中使用静态变量来使用它,我也不知道何时注入它。它对我来说味道不好。)
现在阅读将是这样的(伪代码):
User user = User(); // user just so we can call read()
User userFetched = user.read();
几个问题:
User
,UserResourceTable
和Card
都直接使用QuickBlox sdk(或者更确切地说,通过瘦包装器)。我打算将UserResourceTable
注入User
。我还想将Quickblox的界面(或瘦包装器)注入User
,UserResourceTable
和Card
。我会有一些工厂来做这件事。听起来有什么好处吗?