使用ActiveRecord设计REST适配器?

时间:2013-12-06 04:04:36

标签: unit-testing design-patterns activerecord language-agnostic dependency-injection

我正在连接到REST服务。它是QuickBlox,具体而言,除了REST API被定义为SQL查询(但特别是减去连接)之外,它应该无关紧要,我可以对它进行CRUD。

QuickBlox提供iOS SDK,它为我提供了一个使用回调构建REST查询的界面。

在我的程序中,我想要UserUserResourceTableCard等对象。 (它不像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();

几个问题:

  1. 将read作为实例方法是一个好主意吗?
  2. ActiveRecord适合我的情况吗?也许是一个更好的模特?
  3. 现在,UserUserResourceTableCard都直接使用QuickBlox sdk(或者更确切地说,通过瘦包装器)。我打算将UserResourceTable注入User。我还想将Quickblox的界面(或瘦包装器)注入UserUserResourceTableCard。我会有一些工厂来做这件事。听起来有什么好处吗?

0 个答案:

没有答案