0

基本上,我想使用我正在编写的 SDK 进行 api 调用。

我有以下课程:

  • CarData(存储创建模型、品牌等汽车所需的输入值)

基本上要创建汽车,我会执行以下操作:

[Car carWithData: cardata onSuccess: successHandler onError: errorHandler] 

这基本上是一个工厂方法,它在发出 API 调用请求并使用响应填充新的 Car 类并将该实例传递给 successHandler 之后创建 Car 的实例。

所以“汽车”具有上述创建汽车的静态方法,但也有编辑、删除汽车的非静态方法(这将对服务器进行编辑、删除 API 调用)

因此,当 Car create 静态方法通过执行以下操作将新车传递给 successHandler 时:

successHandler([[Car alloc] initWithDictionary: dictionary)

成功处理程序可以继续使用该新车执行以下操作:

[car update: cardata]
[car delete]

考虑到新的汽车对象现在每辆车都有一个 ID,它可以传递给更新和删除 API 调用。

我的问题:

  • 我是否需要一个 cardata 对象来存储用户输入,或者我可以将它们存储在 car 对象中,以便稍后存储来自所有 api 调用的响应?
  • 我该如何改进这个模型?

关于 CarData,请注意,不同的 API 调用可能有不同的输入。因此创建函数可能需要知道型号、品牌等,但查找函数可能需要知道要查找的项目数、限制、起始 ID 等。

4

1 回答 1

5

首先,名称在构建 SDK 时非常重要。你的名字有点混乱。CarData听起来很像它与NSData. “一个包含另一个类信息的类”的典型名称是“描述符”。所以,我会称之为CarDescriptor. 见UIFontUIFontDescriptor寻求灵感。

接下来,你的carWithData:onSuccess:onError:非常听起来应该返回 a Car,但它似乎是void。我推荐以下内容:

+ (void)createCarWithDescriptor:(CarDescriptor *)descriptor 
                     completion:(void (^)(Car *car, NSError *error))completion;

最好有一个完成块,而不是两个。不要在完成处理程序前加上on.

CarDescriptor课程也应帮助您解决搜索问题,但不应包括限制之类的内容。您应该将其包装在 a CarSearchRequest(或可能只是 a CarSearch)中。见NSFetchRequest灵感。您是否通过CarDescriptor或需要一个完整的谓词取决于您的服务如何管理搜索。(当然,您总是可以有将 aCarDescriptor转换为谓词的代码。)再一次,看看如何UIFontDescriptor用于搜索字体以获取灵感。

于 2013-10-18T16:10:28.663 回答