Swift में डोमेन-ड्रिवन डिज़ाइन: आर्किटेक्चर से लड़ना कैसे बंद करें

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

DDD सिर्फ "एक और पैटर्न" क्यों नहीं है

\n\n

क्या आपने कभी किसी प्रोजेक्ट को शुरू से दोबारा लिखा है सिर्फ इसलिए कि "बिज़नेस लॉजिक सभी कंट्रोलर्स में बिखर गया था"? या हो सकता है, आपका UserManager 2000 लाइनों तक बढ़ गया हो, और कोई नहीं समझता कि वह वास्तव में क्या करता है? परिचित लगता है?

\n\n

Swift डेवलपमेंट की दुनिया में, हम MVC, VIPER या MVVM के आदी हैं। लेकिन ये सभी पैटर्न एक ही समस्या का समाधान करते हैं: UI को लॉजिक से कैसे अलग किया जाए। हालाँकि, वे लगभग कुछ नहीं कहते कि बिज़नेस लॉजिक को स्वयं कैसे व्यवस्थित किया जाए। और यहाँ मंच पर आता है Domain-Driven Design (DDD) — एक दृष्टिकोण जो फ्रेमवर्क को नहीं, बल्कि आपके एप्लिकेशन के डोमेन क्षेत्र को केंद्र में रखता है।

\n\n

इस लेख में, हम वास्तविक उदाहरणों के साथ Swift में Domain-Driven Design को लागू करने का तरीका समझेंगे। आप देखेंगे कि DDD कोई अमूर्त सिद्धांत नहीं है, बल्कि एक शक्तिशाली उपकरण है जो कोड को पढ़ने योग्य, परीक्षण योग्य और परिवर्तनों के प्रति प्रतिरोधी बनाता है।

\n\n

सरल शब्दों में DDD क्या है

\n\n

कल्पना करें कि आप एक ऑनलाइन स्टोर के लिए एप्लिकेशन लिख रहे हैं। MVC आपसे कहेगा: "एक मॉडल Product, एक कंट्रोलर ProductViewController और व्यू बनाओ"। जबकि DDD पूछेगा: "आपके व्यवसाय में 'उत्पाद' क्या है? क्या यह बिना कीमत के हो सकता है? जब इसे कार्ट में जोड़ा जाता है तो क्या होता है?"

\n\n

Domain-Driven Design सॉफ्टवेयर मॉडलिंग का एक तरीका है जिसमें कोड व्यवसाय की भाषा और नियमों को यथासंभव सटीक रूप से दर्शाता है। "तकनीकी" संस्थाओं (जैसे DataManager) के बजाय, आप डोमेन ऑब्जेक्ट्स के साथ काम करते हैं: Order, Customer, Invoice।

\n\n

DDD के मुख्य घटक

\n\n

शब्दों में खो जाने से बचने के लिए, तीन मुख्य अवधारणाओं को याद रखें:

\n\n
    \n
  • Entity (सत्ता) — एक ऑब्जेक्ट जिसकी पहचान होती है। समान फ़ील्ड वाली दो वस्तुएँ अलग-अलग संस्थाएँ हैं (जैसे समान नाम वाले दो अलग-अलग लोग)।
  • \n
  • Value Object (मान-वस्तु) — एक ऑब्जेक्ट जो केवल अपनी विशेषताओं द्वारा परिभाषित होता है। यदि दो वस्तुओं के सभी फ़ील्ड समान हैं, तो वे एक ही वस्तु हैं (जैसे तारीख या धनराशि)।
  • \n
  • Aggregate (समुच्चय) — संबंधित वस्तुओं का एक समूह जिसे एक इकाई के रूप में माना जाता है। समुच्चय का एक मूल (root entity) होता है, जिसके माध्यम से सभी आंतरिक वस्तुओं तक पहुँच होती है।
  • \n
\n\n

सूखा लगता है? आइए Swift पर आते हैं।

\n\n

Swift में डोमेन मॉडल लिखना

\n\n

मान लीजिए हम कार्य प्रबंधन (TODO-लिस्ट) के लिए एक एप्लिकेशन बना रहे हैं। सबसे सरल से शुरू करते हैं — कार्य की स्थिति के लिए Value Object।

\n\n
// Value Object: कार्य की स्थिति\nstruct TaskStatus: Equatable {\n    let rawValue: String\n    \n    static let todo = TaskStatus(rawValue: "todo")\n    static let inProgress = TaskStatus(rawValue: "inProgress")\n    static let done = TaskStatus(rawValue: "done")\n    \n    // बिज़नेस नियम: केवल अगली स्थिति में जा सकते हैं\n    func canTransition(to newStatus: TaskStatus) -> Bool {\n        switch (self, newStatus) {\n        case (.todo, .inProgress), (.inProgress, .done):\n            return true\n        default:\n            return false\n        }\n    }\n}
\n\n

ध्यान दें: हम enum का उपयोग नहीं कर रहे हैं, क्योंकि वास्तविक व्यवसाय में स्थितियाँ सर्वर से आ सकती हैं या डेटाबेस में संग्रहीत हो सकती हैं। TaskStatus एक अपरिवर्तनीय वस्तु है जो अपने नियमों को स्वयं जानती है।

\n\n

अब एक Entity बनाते हैं — स्वयं कार्य:

\n\n
// Entity: कार्य\nfinal class Task {\n    let id: UUID\n    var title: String\n    var description: String\n    private(set) var status: TaskStatus\n    let createdAt: Date\n    \n    init(id: UUID = UUID(), title: String, description: String, status: TaskStatus = .todo) {\n        self.id = id\n        self.title = title\n        self.description = description\n        self.status = status\n                

ब्लॉग

पुस्तक अनुशंसाएँ