ORM لـ Swift (iOS/macOS): مقارنة وأمثلة استخدام

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

ORM لـ Swift (iOS/macOS): مقارنة وأمثلة

عند تطوير تطبيقات iOS وmacOS، غالبًا ما تنشأ الحاجة للعمل مع قواعد البيانات المحلية. يسمح ORM (تعيين الكائنات العلائقية) بالعمل مع البيانات عبر كائنات لغة البرمجة، متجاهلاً استعلامات SQL. في نظام Swift البيئي، توجد عدة حلول شائعة. في هذه المقالة، سنقارن بين Core Data وRealm وGRDB وSwiftData، وسنقدم أمثلة كود ونساعدك في اختيار الأداة المناسبة لمشروعك.



1. Core Data

Core Data هو إطار عمل مدمج من Apple، لا يوفر ORM فحسب، بل يوفر أيضًا مجموعة كاملة لإدارة الكائنات (رسم بياني للكائنات، تحميل كسول، تراجع/إعادة). يعمل مع SQLite أو XML أو التخزين الثنائي. الفكرة الأساسية هي العمل عبر NSManagedObjectContext.



مثال كود (Core Data)

import CoreData

// إنشاء السياقlet container = NSPersistentContainer(name: "Model")container.loadPersistentStores { _, error in if let error = error { print(error) }}

// حفظ الكائنlet context = container.viewContextlet user = User(context: context)user.name = "إيفان"user.age = 30

try? context.save()

// استعلامlet request: NSFetchRequest<User> = User.fetchRequest()let users = try? context.fetch(request)


الإيجابيات: تكامل كامل مع Xcode، إدارة تلقائية للترحيلات، دعم iCloud.

السلبيات: منحنى تعلم معقد، الحاجة لإنشاء نموذج البيانات في المحرر، الكثير من الكود النمطي.



2. Realm

Realm هو ORM عبر المنصات، يعمل على محرك خاص به (ليس SQLite). إنه أسرع من Core Data في معظم العمليات وله API أبسط. يدعم Swift وObjective-C وKotlin وJava.



مثال كود (Realm)

import RealmSwift

// تعريف النموذجclass User: Object { @Persisted var name: String = "" @Persisted var age: Int = 0}

// الحفظlet realm = try! Realm()let user = User(value: ["name": "ماريا", "age": 25])try! realm.write { realm.add(user)}

// الاستعلامlet users = realm.objects(User.self).filter("age > 18")


الإيجابيات: أداء عالٍ، API مريح، دعم مدمج لـ Live Objects (تحديث تلقائي لواجهة المستخدم).

السلبيات: ترخيص مملوك (منذ 2020 مفتوح ولكن مع قيود)، حجم ثنائي كبير، صعوبات في الترحيلات.



3. GRDB

GRDB هي مكتبة خفيفة الوزن للعمل مع SQLite على Swift. توفر وصولاً منخفض المستوى إلى SQL وORM عالي المستوى مع أنواع السجلات. إنه خيار ممتاز لمن يريد التحكم في استعلامات SQL ولكن لا يريد كتابتها يدويًا.



مثال كود (GRDB)

import GRDB

// تعريف الهيكلstruct User: Codable, FetchableRecord, PersistableRecord { var id: Int64? var name: String var age: Int}

// الاتصال بقاعدة البياناتlet dbQueue = try DatabaseQueue(path: "/path/to/database.sqlite")

// الحفظtry dbQueue.write { db in var user = User(name: "أليكسي", age: 28) try user.insert(db)}

// الاستعلامlet users = try dbQueue.read { db in try User.filter(Column("age") >= 18).fetchAll(db)}


الإيجابيات: وزن خفيف، تحكم كامل في SQL، توثيق ممتاز، دعم Combine وSwift Concurrency.

السلبيات: يتطلب إدارة يدوية للترحيلات، ليست "سحرية" مثل Realm.



4. SwiftData (الجديد من Apple)

SwiftData هو ORM حديث، تم تقديمه في WWDC 2023. مبني فوق Core Data، ولكن باستخدام ماكروات Swift (@Model, @Attribute, @Relationship). يسمح بوصف النماذج مباشرة في الكود.



مثال كود (SwiftData)

import SwiftDataimport SwiftUI

@Modelclass User { var name: String var age: Int init(name: String, age:

توصيات