2011-07-11 8 views
10

हमने अपने आवेदन को विभाजित कर दिया है ताकि पैकेज ए एक बाहरी स्रोत से डेटा संभालता है और दूसरे से पैकेज बी को संभालता है। दोनों स्थितियों में हमें एक डोमेन ऑब्जेक्ट बनाने की आवश्यकता है और ऐसा करने के लिए "ट्रांसफार्मर" होना चाहिए।अलग-अलग पैकेजों में एक ही नाम के दो वर्ग होने का बुरा अभ्यास?

तो मैं com.foo.bar.a.ThingTransformer और com.foo.bar.b.ThingTransformer

मुझे लगता है कि इस गरीब अभ्यास है है, लेकिन देखने के लिए की अच्छे लोगों अतः क्या सोचते हैं।

उत्तर

15

मैं कहता हूं कि यह हमेशा एक बुरा अभ्यास है, लेकिन यह कुछ हद तक code smell है।

हैं दोनों वर्गों अलग बातें, तो क्यों वे अलग-अलग नाम नहीं है करते हैं?

यदि दोनों कक्षाएं एक ही चीज़ करती हैं, तो दो कक्षाएं क्यों हैं?

एक व्यावहारिक दृष्टिकोण यह हो सकता है से

बहुत कष्टप्रद अगर उन दो वर्गों कभी एक ही कक्षा में संदर्भित किया जा करने की जरूरत है: (आप उन में से एक के लिए FQN का उपयोग करना होगा यह शायद सबसे अच्छा यह उपयोग करने के लिए किया जाएगा इस मामले में, स्पष्टता के लिए दोनों)। यदि वे दो वर्ग कोड के पर्याप्त रूप से अलग हिस्सों में हैं कि उन्हें एक ही कोड से संदर्भित नहीं किया जाएगा, तो व्यावहारिक समस्या इतनी खराब नहीं है।

+0

मैं एक परियोजना को बनाए रखने कर रहा हूँ जहाँ उस पैटर्न सब खत्म हो गया है कुछ है। अलग-अलग फ़ोल्डर्स में, समान नाम वाले कई वर्ग। कभी-कभी मुझे लगता है कि उसके लिए ज़िम्मेदार कौन है और उन्हें हराया। – Mirko

3

इसके साथ कुछ भी गलत नहीं है, क्योंकि यह बहुत ही असंभव है कि आप दोनों कक्षाओं को एक ही कोड में एक साथ उपयोग करेंगे। सभी वर्ग नामों में पैकेज से ए/बी भेद को डुप्लिकेट करना बदतर होगा।

+2

+1 सरल नाम में नाम-स्थान जानकारी को डुप्लिकेट नहीं करने के लिए +1! –

5

वास्तव में खराब अभ्यास नहीं है, क्योंकि कई डोमेनों में समान शब्दावली है, इसलिए आप समान नाम रखने वाले हैं। दूसरी तरफ यदि दोनों एक ही डोमेन में हैं, लेकिन केवल अलग-अलग कार्यान्वयन हैं, तो आप (किसी भी तरह) नाम में कार्यान्वयन विनिर्देशों को इंगित कर सकते हैं।
बहुत बदसूरत बात यह होगी कि यदि आपको दोनों को एक ही स्रोत फ़ाइल में उपयोग करना है, तो इस मामले में आपको कम से कम एक के लिए पूरी तरह से योग्य नाम का उपयोग करना होगा।

उदाहरण:

java.util.List java.awt.List

नाम पर कार्यान्वयन से संकेत मिलता है:
java.util.ArrayList
java.util.LinkedList

+0

+1 इस बिंदु को लाने के लिए +1 कि विभिन्न डोमेन की समान शब्दावली है। उदा लुसीन में एक दस्तावेज़ वर्ग है जो मुझे यकीन है कि एक ऐसा नाम है जो आसानी से किसी अन्य एपीआई में दिखाई दे सकता है। – lightalchemist

5

यह ठीक है। यही कारण है कि, डिज़ाइन द्वारा, विभिन्न पैकेजों में अलग-अलग नामस्थान होते हैं।

1

आपको यह तय करना होगा कि यह अधिक सहायक या अधिक भ्रमित है या नहीं। आप एक ही पैकेज में समान नामों का उपयोग करने के साथ एक ही समस्या प्राप्त कर सकते हैं जहां अंतर स्पष्ट नहीं है।

अधिक-भ्रामक से अधिक उपयोगी का एक उदाहरण की तरह

com.sun.corba.se.internal.Interceptors.PIORB extends 
com.sun.corba.se.internal.POA.POAORB which extends 
com.sun.corba.se.internal.iiop.ORB which extends  
com.sun.corba.se.impl.orb.ORBImpl which extends 
com.sun.corba.se.spi.orb.ORB which extends  
com.sun.corba.se.org.omg.CORBA.ORB which extends 
org.omg.CORBA_2_3.ORB which extends 
org.omg.CORBA.ORB 
संबंधित मुद्दे