gpt4 book ai didi

iphone - 数据库层设计

转载 作者:搜寻专家 更新时间:2023-10-30 19:41:38 25 4
gpt4 key购买 nike

我在我的一个项目中遇到了设计级别问题。我正在处理一个项目,我需要在其中使用 REST 获取一些对象。举例来说,获取客户并将其显示在列表中。

可以对 Customer 进行以下操作,

  • 添加客户
  • 编辑客户详细信息
  • 删除客户

所以我想到了包含一个名为“CustomerManager”的类,包含以下方法,

  @interface CustomerManager
- (CustomerManager *)sharedManager;

- (BOOL)addCustomer:(Customer *)customer;
- (BOOL)deleteCustomer:(Customer *)customer;
- (BOOL)updateCustomer:(Customer *)customer;

@end

@implementation CustomerManager

- (BOOL)addCustomer:(Customer *)customer;
{
NetworkManager * manager = [NetworkManager manager] addCustomer:customer ];
}
@end

在我需要执行客户相关操作的ViewController中,我曾经这样做过,

 Customer * manager = [Customer sharedManager];
[manager addCustomer:customer];

//fetch customer
[manager customers];

//While deleting
[manager deleteCustomer:customer];

一切看起来和工作正常,直到我收到一个设计级别的问题,为什么中间有一个经理。所有工作都是在 Customer 对象上完成的,因此您需要在 Customer 类中进行所有与 Customer 相关的操作,如下所示。

  @interface Customer

+ (BOOL)addCustomer:(Customer *)customer;
+ (BOOL)deleteCustomer:(Customer *)customer;
+ (BOOL)updateCustomer:(Customer *)customer;
+ (NSArray *)customers;

@end

这里的问题是,即使在单独的类中与网络相关的代码,我也需要在我的所有模型类中有一个网络管理器的具体引用。迷茫,选哪个。

哪种方式最好?我想对此有一些详细的回答。

最佳答案

我认为这里没有正确答案。我个人反复研究如何让我的网络服务与我的模型交互。但我可以为您提供一些建议:

  1. CustomerManager 太过分了。 Customer 模型负责 self 管理——您可以在其中放置与 Customer 相关的方法。此处不需要单独的对象。
  2. 我通常为我的模型使用父类(super class)。因此,例如,您可以拥有一个名为 ApplicationModel 的类,Customer 和您的所有其他模型都将从该类继承。这是 DRY up 模型中代码的好方法。如果您确实决定在您的模型中包含与网络相关的代码,我建议将它放在这个父类(super class)中。这样,如果您需要更改 Web 服务的工作方式,您只需更改一处代码。
  3. 一般来说,我建议将与网络相关的代码与您的模型分开。我喜欢尽可能隔离我的网络逻辑。与网络相关的代码很容易发生变化,您希望尽量减少网络变化影响代码的地方。例如,我通常创建一个作为 API 包装器服务的类,它提供一个用于进行 API 调用的公共(public)接口(interface)。此类还负责解析这些方法的响应并与模型交互(即解析 JSON 自定义数组并与客户交互以将这些对象添加到数据库中)。

关于iphone - 数据库层设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16666845/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com