2015-10-21 102 views
0

我已经创建了一个向导,供用户使用我的应用程序注册,但是,我对于如何在应用程序中存储信息存在一些疑问。iOS创建对象最佳实践

我有一个User模型,这是充满了当用户从数据库中抽取,但​​是,也有对这个模型的一些需要领域,如果我要使用它作为对象,不会填写当用户通过向导时传递。

这里是我的User型号:

通知变量idtimeCreated。这些都是在将新行添加到数据库中的Users表时生成的,因此,在实际创建用户之前,我不会为这些变量创建值。

此外,我想添加一些方法到模型,如validateUser这将是一种方法,确保所有的字段填写,validateEmail这将是一种方法,确保电子邮件是在适当的语法,等等...

我的问题是,我应该

A.只是让这些常量可选的,这些方法添加到我目前的User模式
B.使另一个模型称为CreateUserModel只有变量对于该信息的用户将填写并把多余的方法有

UPDATE

我更新了我的User类使用字典作为存储机制,它已经看起来很干净。但是,想到的问题是,另一位程序员如何知道他可以从User模型中获取哪些字段,因为我不再将它们单独存储为变量。他们只需要检查数据库并查看表格的结构?

这是我更新的用户等级:

final class User: NSObject, ResponseObjectSerializable, ResponseCollectionSerializable { 

    var properties = NSDictionary() 

    init?(response: NSHTTPURLResponse, representation: AnyObject) { 
     if let dataRepresentation = ((representation as! NSDictionary).valueForKey("data") as? [String: AnyObject]) { 
      properties = dataRepresentation 
     } 

     properties = representation as! NSDictionary 
    } 

    static func collection(response response: NSHTTPURLResponse, representation: AnyObject) -> [User] { 
     var users: [User] = [] 

     if let dataRepresentation = ((representation as! NSDictionary).valueForKey("data") as? [NSDictionary]) { 
      if let dataRepresentation = dataRepresentation as? [[String: AnyObject]] { 
       for userRepresentation in dataRepresentation { 
        if let user = User(response: response, representation: userRepresentation) { 
         users.append(user) 
        } 
       } 
      } 
     } 

     return users 
    } 
} 

回答

5

我会让他们选配。这是Optionals的美妙之处 - 你可以使用nil来表示“没有数据”。

想到的另一个宏大策略是使用字典作为模型中的存储机制,因为这种方式要么是有一个特定的密钥,要么是它没有。通过将密钥传递给字典,您可以使您的用户对象键值编码符合标准,从而实现高效透明。

+0

并将验证方法添加到用户模型是这样的最佳实践,对吗?或者我应该将它添加到控制器? – Thomas

+0

@Thomas唯一的问题是:你认为应该如何_体验用户认为有效的知识?这听起来像你认为这是用户本身,这也是我的直觉本能。 - 查看它的一个好方法是:假设我们改变了我们的规范,或者假设我们想在另一个应用中重用用户。当然,让用户知道如何验证自己会给我们最大的灵活性来做到这一点。 – matt

+0

谢谢@matt。关于你的答案我只有最后一个问题,我更新了我的问题以显示它。谢谢! – Thomas