जहां मैं काम कर रहा हूं, हम मेवेन 2 का उपयोग कर रहे हैं और हमारे पास हमारी परियोजनाओं के लिए एक बहुत अच्छा आर्केटाइप है। लक्ष्य चिंताओं का एक अच्छा अलगाव प्राप्त करना था, इस प्रकार हमने कई मॉड्यूल (प्रत्येक एप्लिकेशन 'परत' के लिए एक) का उपयोग करके एक परियोजना संरचना को परिभाषित किया:
- आम: अन्य परतों द्वारा उपयोग किया जाने वाला सामान्य कोड (उदा।, i18n)
- संस्थाएं: डोमेन इकाइयां
- भंडार: इस मॉड्यूल में दास इंटरफेस और कार्यान्वयन शामिल हैं
- सेवाएं-intf: सेवाओं के लिए इंटरफेस (उदाहरण के लिए, उपयोगकर्ता सेवा, ...)
- सेवाएं-impl: सेवाओं के कार्यान्वयन (उदाहरण के लिए, UserServiceImpl)
- वेब: वेब सामग्री के बारे में सबकुछ (उदा।, सीएसएस, जेएसपीएस, जेएसएफ पेज, ...)
- डब्ल्यूएस: वेब सेवाएं
प्रत्येक मॉड्यूल की अपनी निर्भरता होती है (उदाहरण के लिए, रिपॉजिटरीज में जेपीए हो सकता है) और कुछ प्रोजेक्ट चौड़े हैं (इस प्रकार वे आम मॉड्यूल में हैं)। विभिन्न परियोजना मॉड्यूल के बीच निर्भरता स्पष्ट रूप से अलग चीजें (उदा।, वेब परत सेवा परत पर निर्भर करती है लेकिन रिपोजिटरी परत के बारे में नहीं जानता)।
प्रत्येक मॉड्यूल का अपना मूल पैकेज होता है, उदाहरण के लिए यदि एप्लिकेशन पैकेज "com.foo.bar" है, तो हमारे पास है:
com.foo.bar.common
com.foo.bar.entities
com.foo.bar.repositories
com.foo.bar.services
com.foo.bar.services.impl
...
प्रत्येक मॉड्यूल मानक मैवेन परियोजना संरचना का सम्मान करता है:
src\
..main\java
...\resources
..test\java
...\resources
किसी दिए गए परत के लिए यूनिट परीक्षण आसानी से \ src \ test के अंतर्गत अपना स्थान ढूंढते हैं ... डोमेन विशिष्टता वाली प्रत्येक चीज यह इकाई मॉड्यूल में है। अब FileStorageStrategy की तरह कुछ रिपोजिटरी मॉड्यूल में जाना चाहिए, क्योंकि हमें यह जानने की आवश्यकता नहीं है कि कार्यान्वयन क्या है। सेवा परत में, हम केवल भंडार इंटरफ़ेस को जानते हैं, हमें परवाह नहीं है कि विशिष्ट कार्यान्वयन क्या है (चिंताओं को अलग करना)।
इस दृष्टिकोण के कई फायदे हैं:
- चिंताओं को अलग करना
- प्रत्येक मॉड्यूल एक जार (या वेब मॉड्यूल के मामले में एक युद्ध) के रूप में पैकेज करने योग्य है और इस प्रकार आसान कोड पुन: उपयोग करने की अनुमति देता है (उदाहरण के लिए, हम मॉड्यूल भंडार में मॉड्यूल स्थापित कर सकते हैं और इसे किसी अन्य प्रोजेक्ट में पुन: उपयोग कर सकते हैं)
- परियोजना के प्रत्येक भाग की अधिकतम आजादी
मुझे पता है कि यह आपके सभी सवालों का जवाब नहीं देता है, लेकिन मुझे लगता है कि यह आपको सही रास्ते पर डाल सकता है और दूसरों के लिए उपयोगी साबित हो सकता है।