मैं एक आर्किटेक्चर में काम कर रहा हूं, यह वेब क्लाइंट और मोबाइल एप्स के लिए आराम एपी पेश करने जा रहा है। मैं स्प्रिंग (स्प्रिंग mvc, स्प्रिंग डेटा jpa, ... आदि) का उपयोग कर रहा हूं। डोमेन मॉडल को जेपीए विनिर्देश के साथ कोडित किया गया है।
मैं स्वच्छ वास्तुकला ( https://8thlight.com/blog/uncle-bob/2012/08/13/the-clean-Healthecture.html ) की कुछ अवधारणाओं को लागू करने की कोशिश कर रहा हूं । सभी नहीं, क्योंकि मैं jpa डोमेन मॉडल रखने जा रहा हूं।
परतों के माध्यम से वास्तविक प्रवाह यह है:
फ्रंट एंड <-> एपीआई सर्विस -> सर्विस -> रिपोजिटरी -> डीबी
- फ्रंट एंड : वेब क्लाइंट, मोबाइल ऐप्स
- API सेवा : बाकी नियंत्रकों, यहाँ मैं कन्वर्टर्स और dto's और कॉल सेवाओं का उपयोग करता हूँ
- सेवा : कार्यान्वयन के साथ इंटरफेस और उनमें व्यावसायिक तर्क होते हैं
- रिपोजिटरी : रिपोजिटरी इंटरफेस स्वचालित रूप से कार्यान्वयन (स्प्रिंग डेटा जपा द्वारा किया गया) के साथ होता है, जो सीआरयूआईडी ऑपरेशन और शायद कई एसक्यूएल प्रश्न होते हैं।
मेरा संदेह: क्या मुझे सेवा और भंडार के बीच एक अतिरिक्त परत का उपयोग करना चाहिए?
मैं इस नए प्रवाह की योजना बना रहा हूं:
सामने का छोर <-> एपीआई सेवा -> सेवा -> दृढ़ता -> भंडार -> DB
इस दृढ़ता परत का उपयोग क्यों करें? जैसा कि स्वच्छ वास्तुकला लेख में कहा गया है कि मैं एक सेवा कार्यान्वयन (व्यावसायिक तर्क या उपयोग का मामला) करना चाहूंगा जो एक अज्ञेयवादी निरंतर परत तक पहुंच सके। और परिवर्तनों की आवश्यकता नहीं होगी यदि मैं एक और "डेटा एक्सेस" पैटर्न का उपयोग करने का निर्णय लेता हूं, उदाहरण के लिए यदि मैं रिपॉजिटरी का उपयोग बंद करने का निर्णय लेता हूं।
class ProductServiceImpl implements ProductService {
ProductRepository productRepository;
void save(Product product) {
// do business logic
productRepository.save(product)
}
}
तो मैं सोच रहा हूँ कि इस तरह एक दृढ़ता परत का उपयोग करें:
class ProductServiceImpl implements ProductService {
ProductPersistence productPersistence;
void save(Product product) {
// do business logic
productPersistence.save(product)
}
}
और इस तरह दृढ़ता परत का कार्यान्वयन:
class ProductPersistenceImpl implements ProductPersistence {
ProductRepository productRepository;
void save(Product product) {
productRepository.save(product)
}
}
इसलिए मुझे केवल दृढ़ता परत के कार्यान्वयन को बदलने की आवश्यकता है, बिना परिवर्तन के सेवा छोड़ दी। इस तथ्य के साथ कि रिपॉजिटरी ढांचे से संबंधित है।
तुम क्या सोचते हो? धन्यवाद।