एकाधिक Zend आवेदन कोड संगठन


10

पिछले एक साल से मैं Zend फ्रेमवर्क पर आधारित सभी अनुप्रयोगों की एक श्रृंखला पर काम कर रहा हूं और एक जटिल व्यावसायिक तर्क पर केंद्रित हूं, जो सभी अनुप्रयोगों तक पहुंच होनी चाहिए, भले ही वे सभी का उपयोग न करें (प्रत्येक के लिए कई पुस्तकालय फ़ोल्डर्स होने से आसान) आवेदन क्योंकि वे सभी एक आम केंद्र के साथ जुड़े हुए हैं)।

परियोजना विशेष रूप से किस बारे में है, इसके बारे में अधिक विस्तार में जाने के बिना, मुझे अपने कोड को "समूहीकृत" करने के तरीके पर कुछ इनपुट की तलाश है (जैसा कि मैं अकेले परियोजना पर काम कर रहा हूं)। मैंने इसे इस तरह से विभाजित करने की कोशिश की है कि यह यथासंभव निर्भरता को हटा दे।

मैं इसे तार्किक रूप से जितना हो सके उतना कम रखने की कोशिश कर रहा हूं, इसलिए 12 महीने के समय में जब मेरा समय किसी और के पास है, तो मेरे पास जो कुछ भी पैदा हुआ है, उस पर विस्तार करने में कोई समस्या नहीं हो सकती है।

उदाहरण संरचना:

applicationStorage\ (contains all applications and associated data)
applicationStorage\Applications\ (contains the applications themselves)

applicationStorage\Applications\external\ (application grouping folder) (contains all external customer access applications)
applicationStorage\Applications\external\site\ (main external customer access application)
applicationStorage\Applications\external\site\Modules\ 
applicationStorage\Applications\external\site\Config\
applicationStorage\Applications\external\site\Layouts\
applicationStorage\Applications\external\site\ZendExtended\ (contains extended Zend classes specific to this application example: ZendExtended_Controller_Action extends zend_controller_Action )
applicationStorage\Applications\external\mobile\ (mobile external customer access application different workflow limited capabilities compared to full site version)

applicationStorage\Applications\internal\ (application grouping folder) (contains all internal company applications)
applicationStorage\Applications\internal\site\ (main internal application)
applicationStorage\Applications\internal\mobile\ (mobile access has different flow and limited abilities compared to main site version)

applicationStorage\Tests\ (contains PHP unit tests)

applicationStorage\Library\
applicationStorage\Library\Service\ (contains all business logic, services and servicelocator; these are completely decoupled from Zend framework and rely on models' interfaces)
applicationStorage\Library\Zend\ (Zend framework)
applicationStorage\Library\Models\ (doesn't know services but is linked to Zend framework for DB operations; contains model interfaces and model datamappers for all business objects; examples include Iorder/IorderMapper, Iworksheet/IWorksheetMapper, Icustomer/IcustomerMapper)

(नोट: मॉड्यूल, कॉन्फ़िगरेशन, लेआउट और ZendExtended फ़ोल्डर प्रत्येक एप्लिकेशन फ़ोल्डर में डुप्लिकेट हैं, लेकिन मैंने उन्हें छोड़ दिया है क्योंकि उन्हें मेरे उद्देश्यों की आवश्यकता नहीं है।)

पुस्तकालय के लिए इसमें सभी "सार्वभौमिक" कोड शामिल हैं। ज़ेंड फ्रेमवर्क सभी अनुप्रयोगों के दिल में है, लेकिन मैं चाहता था कि मेरा व्यावसायिक तर्क ज़ेंड-फ्रेमवर्क-स्वतंत्र हो। सभी मॉडल और मैपर इंटरफेस में Zend_Db का कोई सार्वजनिक संदर्भ नहीं है, लेकिन वास्तव में इसे निजी रूप में लपेटते हैं।

इसलिए मेरी आशा है कि भविष्य में मैं अपने व्यवसाय तर्क (सेवाओं) को स्थानांतरित करना चाहता हूं, तो Zend_Db_Table_Abstract (जो एक मॉडल तर्क-युक्तियों को स्थानांतरित करना चाहते हैं) से अपने व्यवसाय तर्क को हटाने के क्रम में (एक Model_DbTable_Abstract) को जोड़ने वाले मैपर्स और dbtables को फिर से लिखने में सक्षम हो जाएगा। गैर-Zend फ्रेमवर्क वातावरण (शायद कुछ अन्य PHP फ्रेमवर्क)।

एक सेवा-प्रदाता का उपयोग करना और प्रत्येक एप्लिकेशन के बूटस्ट्रैप के भीतर आवश्यक सेवाओं को पंजीकृत करना, मैं अनुरोध के आधार पर एक ही सेवा के विभिन्न संस्करणों का उपयोग कर सकता हूं और कौन सा एप्लिकेशन एक्सेस किया जा रहा है।

उदाहरण: सभी बाहरी अनुप्रयोगों में एक service_auth_External कार्यान्वयन सेवा_auth_Interface पंजीकृत होगी।

Service_Auth_Internal कार्यान्वयन सेवा_auth_Interface Service_Locator :: getService ('प्रामाणिक') के साथ आंतरिक व्यवहार के साथ ही।

मुझे चिंता है कि मुझे इसके साथ कुछ संभावित समस्याएं याद आ रही हैं।

मैं जिस बारे में आधा सोच रहा हूं, वह सभी बाहरी लोगों के लिए एक config.ini फ़ाइल है, फिर एक अलग एप्लिकेशन config.ini ओवरराइडिंग या वैश्विक बाहरी config.ini को जोड़ रहा है।

अगर किसी के पास कोई सुझाव है तो मैं बहुत सराहना करूंगा।

मैंने व्यक्तिगत अनुप्रयोगों के भीतर AJAX फ़ंक्शंस के लिए contextswitching का उपयोग किया है, लेकिन एक बड़ा मौका है कि बाहरी और आंतरिक दोनों को उनके लिए बनाई गई वेब सेवाएं मिलेंगी। फिर, इन्हें प्राधिकरण और विभिन्न उपलब्ध सेवाओं के कारण अलग किया जाएगा।

\applicationstorage\Applications\internal\webservice 
\applicationstorage\Applications\external\webservice

जवाबों:


1

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

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

यदि आपके पास अपने मेजबान पर नियंत्रण है, तो आप लाइब्रेरी के सामान को शामिल पथ पर ले जाने के बारे में सोच सकते हैं - और इसे एक अलग दीर्घकालिक परियोजना के रूप में बनाए रख सकते हैं।

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