ios - 在 Objective-C 中编写 SDK

标签 ios objective-c

基本上,我想使用我正在编写的 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。请参阅 UIFontUIFontDescriptor 以获取灵感。

接下来,您的 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/

相关文章:

objective-c - 执行选择器 :withObject:afterDelay not working inside viewDidLoad method

ios - YouTube 视频总是以低分辨率在 iFrame 中传输?

iphone - 格式化 NSString(字符替换、UTF、...)

ios - 预期标识符或 ´(´ 括号错误 (?)

ios - 旋转正方形后计算新边界

objective-c - 什么时候可以使用原始数据类型?

ios - 将数据从数组加载到 UITableView 单元格

ios - 类型 'String' 不符合协议(protocol) 'SequenceType' - Swift 2.0

ios - 如何将普通的CGRectMake转换成单位坐标?

objective-c - 如何使用 UIPageViewController 加载单独的 XIB?