2012-08-12 15 views
11

मैं जावा प्रोग्रामर हूं जो केकेपीएचपी की जांच करने की कोशिश करता है - वर्तमान में मुझे एप्लिकेशन संरचना/डिज़ाइन में समस्या है। मैं समझ नहीं पाया कि आवेदन के मूल तर्क कहां रखा जाए।केकपीएचपी - सेवा तर्क कहां रखा जाए

जब मैं JavaEE में विकासशील कर रहा हूँ, आम दृष्टिकोण ऐसा दिखाई देता है:

  • मॉडल वर्गों सरल सेम जो डेटा संस्थाओं का प्रतिनिधित्व (उत्पादों, लोग आदि) कर रहे हैं - ज्यादातर getters/setters साथ डेटा संरचनाओं की तरह;

  • नियंत्रक कक्षाएं पर्याप्त कक्षाएं हैं जो आवश्यक डेटा एकत्र करती हैं और उन्हें समर्पित दृश्य टेम्पलेट में इंजेक्ट करती हैं जिसे उपयोगकर्ता को भेजा जाता है;

  • डीएओ (डेटाएक्सेसऑब्जेक्ट) या रिपोजिटरी कक्षाएं वे हैं जो इकाइयों को डेटाबेस में लोड और स्टोर कर सकती हैं;

  • सेवा कक्षाएं आमतौर पर सिंगलेट्स होती हैं जिनमें कुछ व्यावसायिक-तर्क विधियां होती हैं - इन्हें अन्य सेवाओं या अनुसूचित कार्यों द्वारा नियंत्रकों द्वारा बुलाया जाता है, दूसरी तरफ वे स्वयं डेटा लाने या संशोधित करने के लिए डीएओ/रिपोजिटरी विधियों को कॉल करते हैं।

उदाहरण के लिए अगर मैं संस्थाओं Person, Product और Order, जब उपयोगकर्ता कुछ उत्पाद चयन करता है और क्लिक new Order "मेरी गाड़ी/टोकरी में डाल दिया" इस Person बनाया जाना चाहिए के लिए है और इस Product इस में जोड़ा जाना चाहिए Order (हम देख सकते हैं कि Person खराब देनदार नहीं है और Product स्टोर आदि पर मौजूद है) - यह सब काम कुछ नियंत्रक द्वारा OrderService के तरीकों में किया जाता है।

आमतौर पर आईओसी के कुछ प्रकार के (नियंत्रण के उलट) का इस्तेमाल किया है, ताकि सभी सेवाओं और नियंत्रकों आवश्यक सेवाएं आदि

के लिंक अब मैं थोड़ा कैसे यह सब CakePHP में किया जाता है के बारे में व्यग्र हूँ है है। मुझे यह व्यवसाय-तर्क आदि कहां रखना चाहिए?

उत्तर

6

केकपीएचपी में मॉडल परत active record उदाहरणों से संग्रहित की जाती है, जिसे AppModel कहा जाता है। वे भंडारण से संबंधित तर्क (जिसे आप आम तौर पर डीएओ और/या रेपॉजिटरीज़ में डालते हैं) व्यापार तर्क (जो आमतौर पर आपके "मॉडल" में जाते हैं) के साथ जोड़ते हैं।

कोई अन्य डोमेन संबंधित तर्क (आपकी सेवा से) नियंत्रक का हिस्सा बन जाता है।

आप जानना चाहते हैं, आप कैसे करने वाले हैं, CakePHP में डोमेन व्यापार तर्क को लागू सिर्फ लेख जो सक्रिय रिकॉर्ड पैटर्न प्रशंसा देखो।

व्यक्तिगत राय
CakePHP और CodeIgniter PHP में सबसे खराब चौखटे से दो हैं।
वे बुरे प्रथाओं से भरे हुए हैं।

वास्तव में, अगर आप सही-ish MVC कर रहे थे, तो मॉडल परत व्यापार तर्क और सब कुछ है कि यह से संबंधित है के सभी होते हैं। मॉडल परत डीएओ, रेपॉजिटरीज, Domain Objects (जिसे आप "मॉडल" कहते हैं) और सेवाओं से बना है।

जबकि जावा-आधारित कोड के आपके विवरण इंगित करते हैं कि आप उस दिशा में थोड़े से आगे बढ़ रहे हैं, केकपीएचपी भी इसके करीब से दूर नहीं है।

फिर, यह हो सकता है कि एमवीसी के my understanding गलत हो।

+0

स्पष्टीकरण के लिए धन्यवाद। ActiveRecord पैटर्न का उल्लेख करना चीजों को मेरे लिए थोड़ा और स्पष्ट करता है। आपकी व्यक्तिगत राय के बारे में - एमवीसी विचार और अच्छे प्रथाओं के बाद आपको कौन सा PHP ढांचा बेहतर लगता है? –

+3

@ रोडियन गोरोवेन्को, वर्तमान में कोडिंग अभ्यास के संबंध में सबसे अच्छा, सिम्फनी 2 माना जाता है। लेकिन यह उपचारात्मक वर्ग में सबसे बुद्धिमान तरह की तरह है। और एसएफ 2 [एमवीसी फ्रेमवर्क नहीं है] (http://fabien.potencier.org/article/49/what-is-symfony2)। लेकिन आप इसके साथ एमवीसी डिजाइन पैटर्न का उपयोग करने में सक्षम होना चाहिए। अधिकांश पीएचपी फ्रेमवर्क, जो "एमवीसी फ्रेमवर्क" होने का दावा करते हैं, एमवीसी की रूबीऑनरल व्याख्या का पालन कर रहे हैं (देखें टेम्पलेट और मॉडल ओआरएम है), सभी डाउनसाइड्स शामिल हैं। –

+0

अपने उत्तर @ tereško से प्यार है। कृपया इसे जारी रखो! –

1

नियंत्रकों में केवल पूरी तरह से वेब अनुप्रयोग होने के लिए प्रासंगिक तर्क होना चाहिए। आपका व्यवसाय तर्क मॉडल में आता है। मुझे लगता है कि यह कई केकपीएचपी अनुप्रयोगों में आपको मिली मूलभूत गलतियों में से एक है, जो कि बहुत से तर्क नियंत्रकों में डाल दिया जाता है, जो वास्तव में मॉडल में आता है।

+0

एचएम ... ऐसा लगता है कि मैंने नियंत्रकों में व्यावसायिक तर्क रखने की कभी बात नहीं की। हालांकि मैंने इसे मॉडल में भी रखने का विचार नहीं किया था। मैंने सोचा था कि पीएचकेक में घटक जावा ईई में हमारी सेवाओं की तरह कुछ हैं, लेकिन वे अधिक सहायक दिखते हैं ... –

0

केकपीएचपी में। "एम" डोमेन मॉडल के बजाय डेटा मॉडल का एक गुच्छा है। मेरी राय में। केडीपीएचपी आरएडी विकास के लिए बनाया गया है। यह उद्यम अनुप्रयोगों के लिए एक अच्छा फिट नहीं है।

मेरी राय हालांकि।

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