उपयोग-मामला और रिपॉज़िटरी पैटर्न
उपयोग-मामलों को Swift प्रोटोकॉल के रूप में परिभाषित करें और रिपॉज़िटरी इंटरफ़ेस लागू करें।
उपयोग-मामला और रिपॉज़िटरी पैटर्न, CoddyKit पर Swift Academy का एक निःशुल्क पाठ है। यह 4 में से 2वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह Swift Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Swift Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
उपयोग-प्रकरण क्या है
उपयोग-प्रकरण (इंटरैक्टर) किसी एक व्यावसायिक क्रिया को समाहित करता है और डोमेन इकाइयों तथा रिपॉज़िटरी का समन्वय करता है।
struct PlaceOrderUseCase {
let cart: CartRepository
let payment: PaymentService
let orders: OrderRepository
func execute(userId: Int) async throws -> Order {
let items = try await cart.items(for: userId)
let receipt = try await payment.charge(items: items)
return try await orders.create(receipt: receipt)
}
}एकल ज़िम्मेदारी
हर उपयोग-प्रकरण ठीक एक कार्य करता है। अनेक ज़िम्मेदारियों का अर्थ है कि अनेक उपयोग-प्रकरण होने चाहिए।
// One use case per business action:
struct FetchUserUseCase { ... }
struct UpdateUserUseCase { ... }
struct DeleteUserUseCase { ... }प्रोटोकॉल के रूप में उपयोग-प्रकरण
उपयोग-प्रकरण के लिए एक प्रोटोकॉल परिभाषित करें, ताकि प्रस्तुति परत के परीक्षणों में उसका नकली कार्यान्वयन किया जा सके।
protocol PlacingOrder {
func execute(userId: Int) async throws -> Order
}
struct PlaceOrderUseCase: PlacingOrder { ... }रिपॉज़िटरी क्या है
रिपॉज़िटरी डेटा स्रोत को अमूर्त बनाती है। कॉल करने वाले Swift प्रोटोकॉल के साथ काम करते हैं; कार्यान्वयन नेटवर्क, Core Data या मेमोरी में हो सकता है।
protocol OrderRepository {
func create(receipt: PaymentReceipt) async throws -> Order
func list(userId: Int) async throws -> [Order]
func cancel(orderId: Int) async throws
}रिपॉज़िटरी का कार्यान्वयन
ठोस रिपॉज़िटरी डोमेन की कॉल को नेटवर्क या डेटाबेस की क्रियाओं में बदलती है।
struct RemoteOrderRepository: OrderRepository {
func create(receipt: PaymentReceipt) async throws -> Order {
let dto = receipt.toDTO()
let data = try await api.post("/orders", body: dto)
return try JSONDecoder().decode(OrderDTO.self, from: data).toDomain()
}
func list(userId: Int) async throws -> [Order] { ... }
func cancel(orderId: Int) async throws { ... }
}परीक्षणों के लिए मेमोरी-आधारित रिपॉज़िटरी
इनपुट/आउटपुट के बिना तेज़ और नियतात्मक परीक्षणों के लिए मेमोरी-आधारित रिपॉज़िटरी प्रदान करें।
final class InMemoryOrderRepo: OrderRepository {
var orders: [Order] = []
func create(receipt: PaymentReceipt) async throws -> Order {
let order = Order(id: orders.count + 1, items: receipt.items)
orders.append(order)
return order
}
func list(userId: Int) async throws -> [Order] { orders }
func cancel(orderId: Int) async throws { orders.removeAll { $0.id == orderId } }
}उपयोग-प्रकरणों का संयोजन
हर उपयोग-प्रकरण को केंद्रित रखने के लिए वह साझा उप-कार्यों हेतु अन्य उपयोग-प्रकरणों को कॉल कर सकता है।
struct CheckoutUseCase {
let validateCart: ValidateCartUseCase
let placeOrder: PlaceOrderUseCase
let notifyUser: NotifyUserUseCase
func execute(userId: Int) async throws -> Order {
try await validateCart.execute(userId: userId)
let order = try await placeOrder.execute(userId: userId)
try await notifyUser.execute(order: order)
return order
}
}रिपॉज़िटरी बनाम सेवा
रिपॉज़िटरी: एक ही इकाई प्रकार पर निर्माण, पठन, अद्यतन और विलोपन की क्रियाएँ। सेवा: अनेक इकाइयों का समन्वय करती है या बाहरी एपीआई को कॉल करती है, लेकिन सीधे संग्रहण नहीं करती।
// Repository: single entity
protocol UserRepository { func getUser(id: Int) async throws -> User }
// Service: cross-entity operation
protocol AuthService { func login(email: String, password: String) async throws -> Session }रिपॉज़िटरी में कैशिंग
रिपॉज़िटरी उपयोग-प्रकरण को कार्यान्वयन का विवरण जाने बिना परिणामों को पारदर्शी रूप से कैश कर सकती हैं।
struct CachedUserRepository: UserRepository {
private var cache: [Int: User] = [:]
private let remote: UserRepository
func getUser(id: Int) async throws -> User {
if let cached = cache[id] { return cached }
let user = try await remote.getUser(id: id)
cache[id] = user
return user
}
func saveUser(_ user: User) async throws { try await remote.saveUser(user) }
}परीक्षण-योग्यता
क्योंकि उपयोग-प्रकरण प्रोटोकॉल-आधारित रिपॉज़िटरी पर निर्भर करते हैं, आप व्यावसायिक तर्क का अलग से परीक्षण करने के लिए स्थानापन्न कार्यान्वयन डाल सकते हैं।
let repo = InMemoryOrderRepo()
let sut = PlaceOrderUseCase(orders: repo, ...)
let order = try await sut.execute(userId: 1)
XCTAssertEqual(repo.orders.count, 1)त्रुटि रूपांतरण
रिपॉज़िटरी को लौटाने से पहले डेटा परत की त्रुटियों (नेटवर्क, डेटाबेस) को डोमेन त्रुटियों में बदलना चाहिए।
func getUser(id: Int) async throws -> User {
do {
let data = try await api.get("/users/\(id)")
return try decode(data)
} catch let e as URLError where e.code == .notConnectedToInternet {
throw DomainError.offline
}
}त्वरित जाँच
क्लीन आर्किटेक्चर में रिपॉज़िटरी और सेवा के बीच मुख्य अंतर क्या है?
पाठ का पुनरावलोकन
उपयोग-प्रकरण एकल व्यावसायिक क्रियाओं को समाहित करते हैं और रिपॉज़िटरी प्रोटोकॉल पर निर्भर होते हैं। रिपॉज़िटरी प्रोटोकॉल के पीछे डेटा स्रोतों को अमूर्त बनाती हैं। तेज़ परीक्षणों के लिए मेमोरी-आधारित रिपॉज़िटरी का उपयोग करें। रिपॉज़िटरी आधारभूत संरचना की त्रुटियों को डोमेन त्रुटियों में बदलती हैं। सेवाएँ अनेक इकाइयों वाली क्रियाओं का समन्वय करती हैं।
एआई शिक्षक के साथ Swift सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 122
- पाठ
- 409
अक्सर पूछे जाने वाले प्रश्न
क्या “उपयोग-मामला और रिपॉज़िटरी पैटर्न” पाठ निःशुल्क है?
हाँ — Swift Academy अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “उपयोग-मामला और रिपॉज़िटरी पैटर्न” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। Swift Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“उपयोग-मामला और रिपॉज़िटरी पैटर्न” में मैं क्या सीखूँगा?
उपयोग-मामलों को Swift प्रोटोकॉल के रूप में परिभाषित करें और रिपॉज़िटरी इंटरफ़ेस लागू करें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Swift Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या Swift Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Swift Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 2वाँ पाठ है।
“उपयोग-मामला और रिपॉज़िटरी पैटर्न” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस Swift Academy पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर Swift Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- परतें: डोमेन, डेटा और प्रेज़ेंटेशन
- उपयोग-मामला और रिपॉज़िटरी पैटर्न
- प्रोटोकॉल अमूर्तताओं से निर्भरता उलटाव
- DI फ़्रेमवर्क के बिना परतों को जोड़ना