2015-10-21 137 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