Как реализовать многопользовательскую базу данных области в iOS? - PullRequest
0 голосов
/ 09 января 2019

Я новичок в программировании и особенно в разработке под iOS

В настоящее время я пытаюсь использовать область в качестве локальной базы данных в приложении электронной коммерции. У меня есть объект Realm Product и WishList, как показано ниже

Продукт:

class Product : Object {

    @objc dynamic var productID : Int = 0
    @objc dynamic var name : String = ""
    @objc dynamic var categoryID : Int = 0
    @objc dynamic var categoryName : String = ""
    @objc dynamic var unitPrice: Double = 0.0
    @objc dynamic var quantityInCart = 0
    @objc dynamic var quantityFromServer = 0
    @objc dynamic var descriptionProduct : String = ""
    @objc dynamic var hasBeenAddedToWishList : Bool = false
    @objc dynamic var hasBeenAddedToCart : Bool = false
    @objc dynamic var isNewProduct : Bool = false
    @objc dynamic var productWeight : String = ""
    @objc dynamic var weightUnit : String = ""
    @objc dynamic var minimumOrderQuantity = 0
    @objc dynamic var maximumOrderQuantity = 0

 override static func primaryKey() -> String? {
        return "productID"
    }
}

Список желаний:

class WishList : Object {
    var products = List<Product>()
}

мое приложение может изменить пользователя. скажем, если пользователь А поместил некоторые товары в список желаний (заполняет объект WishList товаром), после этого он выполняет Log Out,

тогда он сделает объект списка желаний пользователя B уже имеющим объект после входа пользователя B.

поэтому я думаю, что мне нужно вставить userID как в объект Product, так и в Wishlist, а также удалить первичный ключ в объекте Product.

override static func primaryKey() -> String? {
        return "productID"
    }

поэтому, когда я выполняю запрос или фильтрую из базы данных области, я могу фильтровать на основе productID, а также userID.

у меня есть правильный подход, использующий такой путь? или есть лучший подход? потому что мне неудобно иметь userID как свойство объекта Product, как показано ниже:

class Product : Object {
        @objc dynamic var userID : Int = 0 <--- like this
        @objc dynamic var productID : Int = 0
        @objc dynamic var name : String = ""
        @objc dynamic var categoryID : Int = 0
        @objc dynamic var categoryName : String = ""
        @objc dynamic var unitPrice: Double = 0.0
        @objc dynamic var quantityInCart = 0
        @objc dynamic var quantityFromServer = 0
        @objc dynamic var descriptionProduct : String = ""
      }

class WishList : Object {
        @objc dynamic var userID : Int = 0 <--- and like this
        var products = List<Product>()
    }

и при таком подходе у меня также будут «дубликаты» данных Product для объекта Product с тем же productID, но userID для свойства Product отличается

1 Ответ

0 голосов
/ 09 января 2019

Вы не должны добавлять userID к Product или Wishlist. Product должен быть независимым от конкретных пользователей, поэтому он не должен иметь отношения к пользователю. С другой стороны, Wishlist является специфическим для пользователя, но вместо того, чтобы вручную запрашивать свойство userID определенного Wishlist, вы должны воспользоваться встроенными отношениями Realm и объявить однозначный -онное отношение между User и Wishlist (вы можете объявить отношение либо на WishList, либо на User, оба работают нормально).

Таким образом, ваше определение Product должно быть оставлено без изменений, а primaryKey также остается неизменным. Ваш Wishlist должен выглядеть следующим образом:

class WishList : Object {
    @objc dynamic var user: User?
    let products = List<Product>()
}

Или, если вы хотите получить доступ к WishList определенного User от пользователя, вы можете изменить свой User следующим образом:

class User: Object {
    @objc dynamic var wishList: WishList?
    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...