2013-09-03 8 views
5

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

हम इस मुद्दे को हल करने के बारे में कैसे जा सकते हैं? हम निर्माण प्रक्रिया को यथासंभव सरल रखना चाहते हैं (हम निर्माण के लिए चींटियों का उपयोग कर रहे हैं) कम से कम संभावित निर्भरताओं के साथ।

विकल्प यहां हम अब तक माना गया है और यही कारण है कि हम एक दृष्टिकोण खारिज कर दिया गया है:

  1. दूसरा साझा उपयोगिताएँ परियोजना, जो प्लग इन करने के लिए उपलब्ध कराया जाएगा - तैनाती कठिन कर देगा।
  2. साझा यूटिल्स प्रोजेक्ट से 2 अलग .jar-s बनाएं, जिसमें केवल सभी स्थैतिक उपयोगिताओं और अन्य शामिल हैं - जो भी छिपाने की जरूरत है। यह बिल्डिंग को अधिक जटिल बना देगा, यानी प्लगइन्स की बिल्ड स्क्रिप्ट के लिए अतिरिक्त निर्भरताएं।
  3. प्रत्येक एसडीके में प्रॉक्सी ऑल-स्टेटिक क्लास - डुप्लिकेट विधि परिभाषाएं, लेकिन कार्यान्वयन केवल साझा प्रोजेक्ट से संबंधित स्थिर विधि को कॉल करता है - सबसे दर्द रहित लगता है, नकारात्मक है कि हमें हाथ से जावाडोक की प्रतिलिपि बनाना होगा। क्या कोई साधारण जावाडोक टैग है, जो पीढ़ी पर स्वचालित रूप से ऐसा करेगा?
  4. सभी स्थैतिक वर्गों को "सामान्य" में कनवर्ट करें और बस प्रत्येक एसडीके में अनावश्यक बनाएं (अनावश्यक (मेरे दिमाग में) प्रदर्शन ओवरहेड।
+1

क्या प्रीफॉर्मेंस ओवरहेड का मतलब है? – maks

+0

हमें लगभग हर बार एक नई वस्तु बनाने की आवश्यकता होगी जब हमें उन विधियों में से किसी एक का उपयोग करने की आवश्यकता हो - हाँ, ऑब्जेक्ट सृजन अपेक्षाकृत सस्ता है, क्योंकि ऑब्जेक्ट में कोई गुण नहीं होगा, लेकिन यह अभी भी वहां है। इसके अलावा, यह कोड "uglier" और पढ़ने के लिए कठिन बना देगा। मैं पहले से ही इस तरह के कोड पर अपने सिर खरोंच लोगों को चित्रित कर सकते हैं। :) –

+1

यदि ये उपयोगिता वर्ग हैं तो आप किस तरह के तरीकों को छिपाने की कोशिश कर रहे हैं? लगता है जैसे आपको अलग "उपयोगिता" परियोजनाओं की आवश्यकता है। अपनी एसडीके परियोजनाओं में और केवल प्लगइन में अधिक सार्वजनिक तरीकों के साथ आयात करें। – JohnMark13

उत्तर

0

"प्रॉक्सी कक्षाओं के माध्यम से स्थिर तरीकों का खुलासा करना" मैंने आपका पूरा प्रश्न पढ़ लिया है और मुझे यकीन नहीं है कि आपकी समस्या वास्तव में क्या है। प्रॉक्सी (उदाहरण) के माध्यम से स्थिर (गैर-आवृत्ति संबंधित) विधि का खुलासा करना।

क्या आप वास्तव में क्या छिपाने के लिए नहीं चाहते हैं। आप वास्तव में क्या खुलासा करना चाहते हैं। Controlling Access to Members of a Class:

public class A { 

private A(){} //prevent instanciation 

public static void doSomething(){} //want to expose to some class, hide from other 

} 

प्रदर्शनी DoSomething की आप दृश्यता सेट कर सकते हैं सीमित करने के लिए।

आप स्थिर प्रकृति को हटाने और एक स्थिर कारखाने पैटर्न का उपयोग की तरह वस्तु वापस जाने के लिए कर सकते हैं:

public class A { 

private A(){} 

public void doSomething(){} //want to expose to some class, hide from other 

//the new A can also be set in a member variable and 
//return always the same instance, if it is unmuttable it will be thread safe. 
public static A getInstance(){ return new A();} 

} 

यह "एक ही बात" की तरह लग सकता है, लेकिन अब आप सभी विधि की दृश्यता को नियंत्रित कर सकते हैं ए getInstance() की केवल दृश्यता को नियंत्रित करके, javadoc ए पर रहता है, अब यह नियंत्रित करने के लिए कि getInstance कैसे पहुंचा जा सकता है ... मुझे समझना होगा कि आप वास्तव में क्या करना चाहते हैं।

संबंधित मुद्दे