Iphone 数据库层设计
我的一个项目中有一个设计级别的问题。我正在处理一个项目,其中我需要使用REST获取一些对象。比如说,获取客户并将其显示在列表中 可在客户机上执行的以下操作Iphone 数据库层设计,iphone,objective-c,class,oop,ooad,Iphone,Objective C,Class,Oop,Ooad,我的一个项目中有一个设计级别的问题。我正在处理一个项目,其中我需要使用REST获取一些对象。比如说,获取客户并将其显示在列表中 可在客户机上执行的以下操作 添加客户 编辑客户详细信息 删除客户 所以我想包括一个名为“CustomerManager”的类,包括以下方法 @interface CustomerManager - (CustomerManager *)sharedManager; - (BOOL)addCustomer:(Customer *)customer;
- 添加客户
- 编辑客户详细信息
- 删除客户
@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类中拥有所有与客户相关的操作,如下所示
@interface Customer
+ (BOOL)addCustomer:(Customer *)customer;
+ (BOOL)deleteCustomer:(Customer *)customer;
+ (BOOL)updateCustomer:(Customer *)customer;
+ (NSArray *)customers;
@end
这里的问题是,即使网络相关代码在一个单独的类中,我也需要在所有模型类中具体引用我的网络管理器。
困惑,选择哪一个
哪种方法最好?。我想得到一些详细的答案。我认为这里没有正确的答案。我个人就如何让我的web服务与我的模型交互进行了反复讨论。但我可以给你一些建议:
我不同意迈克尔·弗雷德里克的第一点 与将客户CRUD操作放在客户模型对象本身上相比,CustomerManager是一个更好的主意。第一个也是最重要的原因是,客户模型类的单一职责应该是代表单个客户;不另外管理一组客户(单一责任原则)。在DDD术语中,我希望Customer类是一个 请注意,模型对象(如MVC模式中)和域对象之间有很大的区别。关键的区别在于,模型对象的职责是提供具有某些数据表示形式的视图,而域对象的职责是,而且不应该超过,作为域概念的逻辑转换,独立于表示形式 正如我从你的控制器中可以看出的那样,你的模型应该能容纳一组客户。因此,我会让CustomerModel保存一组Customer对象。控制器的职责是处理请求并根据请求适当地操纵模型,以便结果是应用程序状态的一致视图。它不是,也不应该对CRUD操作本身负责。通常情况下,应用层服务将负责此类操作,这可能会将其委托给基础结构层(或DAO)。总而言之,我的设计至少看起来像: 所有CRUD(请求处理和状态管理)都在这个UML图的左侧执行 另一种看问题的方式是,用最简单的术语来说,所有这些可能相当于几行代码。假设您在阵列上执行相同的CRUD操作。数组元素本身是否应该负责操纵数组?当然不是。CustomerRepository是数组,NetworkManager是其持久性(即内存),controller是使用数组的参与者,CustomerModel是本地副本或子集,Customer是数组元素