Intereting Posts
Как сделать фотографию по электронной почте с помощью анимации? угловое приложение 2 на ios не отображает связанные данные правильно Cocos2D – Сделать спрайт гладко следовать и вращаться Как вы воспроизводите звук на петле в фоновом режиме, не прерываясь? Связывание свойства с ViewModel с MvvmLight и Xamarin.iOS iOS Universal Links: как исключить определенные пути из URL? Если возможно, как программно подключить iPhone к внешнему устройству и маршрутизатору, оба WiFi Почему этот ключ NSUserDefaults содержит точку? NSString to std :: string заменяет символы, используемые в шифровании Обнаружение начала телефонного звонка для отправки JSON в фоновом режиме Как перейти на страницу PDF в UIWebView? Обработка ошибок класса модели Swift Изменение размера AVPlayer в ландшафтном режиме Неизвестный тип неизвестного процесса IOS Crashlog Обнаруживать последний элемент при использовании NSFastEnumeration?

Должен ли я использовать репозиторий для Realm (ios)

Прежде всего, я относительно новичок в ios и не имею никакого опыта использования мобильных dbs.

Хотелось интегрироваться в мое приложение Realm (swift) и задаться вопросом, имеет ли смысл разделять сервисный уровень и репозиторий или просто включать в сервис.

В качестве примера можно привести хороший обзор.

class UserService { var userRepository: UserRepository! func findById(userId: String) -> User? { return userRepository.findById(userId: userId) } } class UserRepository { private let realm = try! Realm() func findById(userId: String) -> User? { return realm.object(ofType: User.self, forPrimaryKey: userId) } } 

Добавление уровня абстракции поверх API баз данных довольно распространено. Многие другие разработчики обернули Realm в своих классах, чтобы скрыть API от их кода бизнес-логики.

Есть несколько соображений, в которых нужно знать:

  1. Вы должны быть осторожны, чтобы не повредить производительность. Некоторые пользователи дошли до того, что копируют данные из объектов Realm в свои собственные объекты. Это нарушает цель механизма «нулевой копии» Realm, поэтому приложение теперь по своей сути выполняет хуже, чем использование Realm изначально.
  2. Это «упреждающая работа». Вы делаете много работы впереди, на всякий случай, если вы можете передумать по очереди. Я преобразовал Core Data в Realm в довольно большое приложение некоторое время назад, и это заняло всего несколько часов. Попытка архитектовать «универсальное» решение для базы данных, которое вы никогда не сможете использовать, используя звуки, которые могут не окупиться.
  3. Вы увеличиваете сложность приложения. Это означает больше возможностей для ошибок, и потребуется более тщательное тестирование, чтобы убедиться, что API и API баз данных синхронизированы.

Пока новая база данных, к которой вы должны перемещаться, состоит также в управлении объектами (например, Core Data), преобразование из одной базы данных в другую обычно не так много. Поэтому я рекомендую избегать ненужной работы до тех пор, пока это станет необходимым.

Отказ от ответственности: я работаю в Realm, но это мое мнение как человека, который отправил личные приложения с использованием Core Data, raw SQLite и Realm в прошлом.

Вы можете использовать расширения, чтобы добавить свои методы выборки. Вы добавляете подклассы Object для каждого объекта в вашей базе данных и затем при необходимости добавляете расширения для каждого из этих методов. Пример:

 import RealmSwift // Dog model class Dog: Object { dynamic var name = "" dynamic var owner: Person? // Properties can be optional } 

Для ваших методов получения:

 extension Dog { class func fetch(with name: String) -> Dog? { return try! Realm().objects(Dog.self).filter("name == %@", name).first } }