Swift (iOS/macOS) के लिए ORM: तुलना और उदाहरण
iOS और macOS के लिए एप्लिकेशन विकसित करते समय, अक्सर स्थानीय डेटाबेस के साथ काम करने की आवश्यकता होती है। ORM (Object-Relational Mapping) आपको SQL क्वेरी से अलग होकर, प्रोग्रामिंग भाषा की वस्तुओं के माध्यम से डेटा के साथ काम करने की अनुमति देता है। Swift इकोसिस्टम में कई लोकप्रिय समाधान हैं। इस लेख में हम Core Data, Realm, GRDB और SwiftData की तुलना करेंगे, कोड उदाहरण प्रस्तुत करेंगे और आपके प्रोजेक्ट के लिए उपयुक्त टूल चुनने में मदद करेंगे।
1. Core Data
Core Data एक अंतर्निहित Apple फ्रेमवर्क है जो न केवल ORM प्रदान करता है, बल्कि एक पूर्ण ऑब्जेक्ट प्रबंधन स्टैक (ऑब्जेक्ट ग्राफ, lazy loading, undo/redo) भी प्रदान करता है। यह 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 समर्थन।
नुकसान: जटिल प्रवेश सीमा, एडिटर में डेटा मॉडल बनाने की आवश्यकता, बहुत सारा boilerplate कोड।
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 के लिए अंतर्निहित समर्थन (UI का स्वचालित अपडेट)।
नुकसान: मालिकाना लाइसेंस (2020 से खुला, लेकिन सीमाओं के साथ), बड़ा बाइनरी आकार, माइग्रेशन में कठिनाइयाँ।
3. GRDB
GRDB Swift पर SQLite के साथ काम करने के लिए एक हल्की लाइब्रेरी है। यह SQL तक निम्न-स्तरीय पहुँच और Record-प्रकारों के साथ उच्च-स्तरीय ORM दोनों प्रदान करता है। यह उन लोगों के लिए एक उत्कृष्ट विकल्प है जो SQL क्वेरी को नियंत्रित करना चाहते हैं, लेकिन उन्हें मैन्युअल रूप से लिखना नहीं चाहते।
कोड उदाहरण (GRDB)
import GRDB
// संरचना परिभाषाstruct User: Codable, FetchableRecord, PersistableRecord { var id: Int64? var name: String var age: Int}
// DB से कनेक्शन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: