基本上,我想使用我正在编写的 SDK 进行 api 调用。
我有以下类(class):
- 汽车
- CarData(存储创建汽车所需的输入值,如型号、品牌等)
基本上,为了创建一辆汽车,我执行以下操作:
[Car carWithData: cardata onSuccess: successHandler onError: errorHandler]
这基本上是一个工厂方法,它在发出 API 调用请求并使用响应填充新的 Car 类并将该实例传递给 successHandler 之后创建 Car 的实例。
所以“Car”有上面的静态方法来创建那辆车,但也有非静态方法来编辑、删除汽车(这将对服务器进行编辑、删除 API 调用)
因此,当 Car create 静态方法通过执行以下操作将新汽车传递给 successHandler 时:
successHandler([[Car alloc] initWithDictionary: dictionary)
成功处理程序可以继续使用那辆新车执行以下操作:
[car update: cardata]
[car delete]
考虑到新的汽车对象现在每辆汽车都有一个 ID,它可以传递给更新和删除 API 调用。
我的问题:
- 我是否需要一个 cardata 对象来存储用户输入,或者我可以将它们存储在 car 对象中,该对象稍后还会存储所有 API 调用的响应?
- 我该如何改进这个模型?
关于 CarData,请注意不同的 API 调用可能有不同的输入。所以 create 函数可能需要知道型号、品牌等,但 find 函数可能需要知道要查找的项目数、限制、起始 ID 等。
最佳答案
首先,名称对于构建 SDK 非常重要。你的名字有点困惑。 CarData
听起来很像是与 NSData
相关。 “一个包含另一个类信息的类”的典型名称是“描述符”。所以,我将其称为 CarDescriptor
。请参阅 UIFont
和 UIFontDescriptor
以获取灵感。
接下来,您的 carWithData:onSuccess:onError:
听起来很像它应该返回一个 Car
,但它似乎是 void
。我推荐以下内容:
+ (void)createCarWithDescriptor:(CarDescriptor *)descriptor
completion:(void (^)(Car *car, NSError *error))completion;
最好有single completion block, rather than two.不要使用 on
作为完成处理程序的前缀。
CarDescriptor
类也应该可以帮助您解决搜索问题,但它不应该包括诸如限制之类的内容。您应该将其包装在 CarSearchRequest
(或者可能只是一个 CarSearch
)中。请参阅 NSFetchRequest
以获取灵感。您是传递 CarDescriptor
还是需要完整谓词取决于您的服务如何管理搜索。 (当然,您始终可以使用将 CarDescriptor
转换为谓词的代码。)再次查看 UIFontDescriptor
是如何用于搜索字体以获取灵感的。
关于ios - 在 Objective-C 中编写 SDK,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19451663/