समान नाम (भिन्न पैकेज) वाली कक्षाओं से कैसे निपटें


9

मैं और मेरी R & D टीम एक बड़े कोडबेस को बनाए रखती है। हमने अपने व्यावसायिक तर्क को कई पैकेजों में विभाजित किया है। जिनमें से कुछ समान नाम वाले वर्ग हैं

जैसा कि आप अनुमान लगा सकते हैं, जब दोनों वर्गों को एक ही जावा फ़ाइल में संदर्भित किया जाता है तो नाम संघर्ष।


उदाहरण के लिए:

com.myapp.model (package)
 - Device (class)
 - ...

com.myapp.data (package)
 - Device (class)
 - ...

इन मामलों के इलाज के लिए सबसे अच्छा अभ्यास क्या है, इस पर हमारी बहस हुई और निम्नलिखित विकल्प सामने आए:

पहला विकल्प

  • एक उपसर्ग जोड़ते हुए, कक्षा का नाम बदलना

    ModelDevice
    DataDevice

दूसरा विकल्प

  • दोनों संदर्भित होने पर पूर्ण पैकेज + वर्ग नाम का उपयोग करना

    com.myapp.model.Device
    com.myapp.data.Device

कोड प्रबंधन और मापनीयता के संदर्भ में अधिक सही क्या है?

वर्तमान में हम दोनों दृष्टिकोणों को मिला रहे हैं और असंगतता शुरू कर रहे हैं


अगर यह कभी-कभार होता है तो शायद कोई फर्क नहीं पड़ता है - अगर यह एक आवर्ती पैटर्न है तो मैं शायद इसे ठीक से रोकने के लिए कक्षाओं को अधिक सटीक नाम दूंगा।
अस्सलास

आपको इस बात का कोई अंदाजा नहीं है कि मैं कितना लथपथ java.util.Dateऔर java.sql.Date- विशेष रूप से चूंकि java.sql.Dateउप java.util.Dateपरतों का एक उपवर्ग है और इसलिए यह डेटा लेयर्स से बाहर निकल जाता है (और JSON को अच्छी तरह से अनुक्रमित नहीं करता है)।

विकल्प 2.1 हमेशा पूरी तरह से योग्य नाम का उपयोग करें, भले ही दूसरा संदर्भित न हो
Caleth

जवाबों:


18

पैकेज नाम का उपयोग करें। इस प्रकार की समस्या ठीक है क्यों जावा पैकेज नामकरण सम्मेलन का उपयोग करता है जो यह करता है। यह इस तरह की समस्याओं को रोकता है, चाहे वह एक ही कंपनी की दो टीमें हों या दो टीमें पृथ्वी के विपरीत छोर पर हों।


1

अब तक आपके पास एक मॉडलडेविस क्लास (मॉडल पैकेज में डिवाइस) है। क्या होगा यदि आपके पास एक अलग वर्गीकरण के लिए एक और ऐसा मॉडलडाइसिस है? समस्या अभी भी बनी रह सकती है और ओवरहेड्स भी बढ़ते रहेंगे।

हालाँकि, जब आप पाते हैं कि पुनर्नामकरण कक्षाएं कुछ अच्छी मदद के लिए हो सकती हैं, तो लंबे समय तक सुझाए गए विकल्प पैकेज के नामों को उपसर्ग करके जाना है, जो कि उद्योग मानक है।


0

बस एक पहलू जोड़ने के लिए जिसका अभी तक उल्लेख नहीं किया गया है:

उपयोग के पैटर्न, यानी जावा स्रोतों पर एक नज़र डालें जो एक या दोनों वर्गों का संदर्भ देते हैं।

IMHO, अधिकांश मामलों में, स्रोत फ़ाइलों को परस्पर विरोधी वर्गों में से केवल एक का संदर्भ देना चाहिए, और संदर्भ से यह स्पष्ट होना चाहिए कि वे मॉडल या डेटा की दुनिया से निपटते हैं या नहीं। यदि किसी कारण से यह मुश्किल है, तो मैं कक्षाओं का नाम बदल दूंगा, क्योंकि आम तौर पर मुझे स्रोत कोड में पैकेज-उपसर्ग वर्ग के नाम पसंद नहीं हैं (यह पठनीयता को कम करता है)।

यदि आपके पास स्रोत फाइलें हैं जो दोनों दुनिया के साथ काम करती हैं, तो वे दुनिया के दो अलग-अलग विचारों के बीच अनुवाद करने के लिए पुनर्जीवन के साथ कक्षाएं लगा सकते हैं, और यहां मैं पैकेज-प्रीफ़िक्स किए गए वर्ग नाम ढूंढना पसंद करूंगा।

लेकिन दोनों डिवाइस कक्षाओं को एक स्रोत में देखने से यह संकेत मिल सकता है कि स्रोत मॉडल और डेटा की दुनिया से कार्यों को मिलाकर एकल जिम्मेदारी सिद्धांत का उल्लंघन करता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.