2011-09-17 21 views
6

मैं वर्तमान में एक PHP वेब अनुप्रयोग में स्थानीयकरण से निपटने के लिए कुछ कक्षाएं लिख रहा हूं।इस परिपत्र निर्भरता से कैसे छुटकारा पाएं?

वर्ग हैं:

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

पूरा एप्लिकेशन ठीक से काम करता है, लेकिन मुझे टाइमज़ोन में कुछ और चीजें जोड़ने की आवश्यकता है।

इस समस्या में परिणाम: लोकेल को टाइमज़ोन के तरीकों की आवश्यकता होती है जिसके लिए लोकेलडेटा के तरीकों की आवश्यकता होती है जिसके लिए लोकेल के तरीकों की आवश्यकता होती है।

मैं इस परिपत्र निर्भरता को कैसे तोड़ सकता हूं? क्या मुझे अपनी कक्षाओं को छोटे टुकड़ों में तोड़ना चाहिए? क्या इससे निपटने के लिए कोई पैटर्न हैं?

चीयर्स :)

उत्तर

2

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

यदि आपको अन्य कक्षाओं को विस्तारित कक्षाओं के आधार पर परिपत्र निर्भरताएं मिल रही हैं, तो आपको पूरे सेटअप पर पुनर्विचार करना होगा।

+0

जिस मुद्दे का सामना करना पड़ रहा था वह वर्ग एक दूसरे के साथ कॉलिंग विधि के कारण था। चूंकि मैं एक डी ढांचे का उपयोग कर कन्स्ट्रक्टर इंजेक्शन का उपयोग कर रहा हूं, निर्भरताएं DI ढांचे द्वारा तत्काल हैं। समाधान यह है कि टाइमज़ोन में एक विधि है जो एक फॉर्मेटर की तरह व्यवहार करती है, इसलिए मैंने इसे लोकेलफॉर्मैट में ले जाया। – F21

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