Стендап Сьогодні 📢 Канал в Telegram @stendap_sogodni
🤖🚫 AI-free content. This post is 100% written by a human, as is everything on my blog. Enjoy!05.02.2024
Особливості ORM CoreData/SwiftData
Робота з ORM на платформах Apple дуже відрізняється від ActiveRecord, до якого я звик. Йдеться про CoreData - офіційну ORM від Apple, яка може синхронізуватися через iCloud, проміж інших переваг рішення “від першої сторони”.
-
CoreData - це справжня обʼєктна база даних. Це попри тому, що як сховище вона використовує SQLite. Але шар SQL повністю схований під абстракцією — та, до речі, має незручну в прямому доступі структуру, якщо вже знайти базу на диску та відкриті в клієнті SQLite.
-
А так, все, що ми робимо в CoreData, робиться через обʼєкти. Створення, видалення, асоціації. Атрибути обʼєктів не обмежені примітивними типами.
-
Для взаємодії з базою використовується контекст моделі. Це клас, який вміє як діставати з бази обʼєкти, так і зберігати. Але більше цікаво те, що контекст є ніби вікном в базу. Зберігання обʼєктів відбувається не по одному, в ActiveRecord, а всім контекстом. Аналогія така, що база — як шафа, а контекст — як робочий стіл: дістали зі шафи все потрібне, обробили, та повернули назад.
-
Через це CoreData виглядає більш… цілісно; код більше займається бізнес-логікою, ніж механікою роботи з базою. Це мені подобається. Втім на початку трохи лячно, бо будь-яка ненавмисна зміна до об’єкта буде збережена. Інтуїція працює зворотно від ActiveRecord: там треба не забути зберегти, а тут — не проґавити зайву зміну.
-
Якщо без оцінювальних суджень, то просто цікаво мати досвід з різними системами, щоб уявляти що взагалі можливо. Наприклад, думаю, на фронтенді підхід з контекстом був би досить зручним.