2009-09-29 13 views
11

मैं वर्तमान में एक एएसपीनेट एमवीसी वेब साइट प्रोजेक्ट पर काम कर रहा हूं।फ़ंक्शन कहां रखना है जो मुझे नियंत्रक कार्यों को निष्पादित करने में मदद करते हैं?

मैंने अपने मॉडल में सभी डेटाबेस संबंधित सामान डाल दिए हैं, जैसे प्रश्न और अद्यतन/हटाएं/सहेजें कार्यों।

मैंने कुछ नियंत्रकों को भी बनाया जो तर्क निष्पादित करते हैं। मैंने एक हेल्पर्स नेमस्पेस जोड़ा और उस नामस्थान के अंदर कुछ कक्षाएं हैं जिनमें अंकन, अंतर्राष्ट्रीयकरण इत्यादि के लिए तर्क शामिल है

मैं सोच रहा था कि कुछ सामान्य सामान करने वाले कार्यों और कक्षाओं को रखने के लिए सबसे अच्छा अभ्यास क्या है, जैसे चालान उत्पन्न करना ?

+0

यदि मैं कर सकता, तो मैं यह प्रश्न +100 वोट दूंगा। मैं वास्तव में जानना चाहता हूं कि अन्य लोग इस मुद्दे को कैसे संबोधित कर रहे हैं। मैंने अभी एएसपी.नेट एमवीसी (मध्यम आकार के प्रोजेक्ट पर) के साथ प्रयोग करना शुरू कर दिया है, और मुझे लगता है कि मैं अक्सर निर्देशिका संरचना और कुछ एमवीसी अवधारणाओं से घिरा हुआ हूं। –

उत्तर

4

जैसा कि मैंने ऊपर एक टिप्पणी में व्यक्त किया है, मुझे इस प्रश्न में बहुत दिलचस्पी है।

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

तो मुझे लगता है मैं निम्न स्कीमा की ओर झुकाव रहा हूँ:

  • नियंत्रक क्रियाएँ बहुत छोटा करते हैं; कोड की बस कुछ पंक्तियां।
  • मॉडल सरल और अधिकतर कार्यहीन रखें, और इसे अलग परियोजना में रखें।
  • सभी अपने कोड रखो जो सभी "असली" काम ("व्यापार परत") एक अलग परियोजना में करता है।

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

यह सिर्फ एक विचार है। फिलहाल मैं अपने पहले बड़े एएसपी.नेट एमवीसी एप्लिकेशन पर काम कर रहा हूं। इसलिए मैं वास्तव में यह जानने जा रहा हूं कि यह अभ्यास में कैसे काम करता है।

+0

मुझे लगता है कि मैं एक असली परियोजना में सभी असली काम डालूंगा। – jao

0

आप कुछ नियंत्रकों को बनाने पर विचार कर सकते हैं जिन्हें आप अपने नियंत्रकों में इंजेक्ट करते हैं।

यह लगभग एक प्रश्न है।

+0

आपका क्या मतलब है? क्या आपके पास उदाहरणों के लिंक हैं? – jao

+0

http://en.wikipedia.org/wiki/Business_logic_layer –

+0

@jao क्या आप निर्भरता इंजेक्शन का उपयोग कर रहे हैं? वहाँ बहुत सारे उदाहरण हैं। एक – dove

0

इस तरह का व्यवसाय तर्क आपके मॉडल में कहीं होना चाहिए।

हालांकि, मुझे लगता है कि जब कुछ ऐसा होता है जो वास्तव में कहीं भी "फिट" नहीं होता है - और आप उपयोगिता वर्ग बनाने के लिए प्रेरित हो सकते हैं - यह आमतौर पर एक्सटेंशन विधियों का उपयोग करने के लिए एक अच्छी जगह है।

शायद आप पेजिंग के साथ आपकी सहायता के लिए अपने डेटासेट पर एक्सटेंशन विधियां जोड़ सकते हैं?

0

मुझे आपको वास्तव में सर्वोत्तम अभ्यास की आवश्यकता है, Domain Driven Design पर विचार करने पर विचार करें। यह सभी परियोजनाओं के अनुरूप नहीं है और मुझे अच्छे ओओपी कौशल की आवश्यकता होती है, लेकिन मुझे लगता है कि यह बिना किसी संदेह के "सर्वोत्तम अभ्यास" है ...-)

ध्यान दें कि आप पहले से ही डीडीडी का उल्लंघन करते हैं चूंकि आप सक्रिय रिकॉर्ड पैटर्न का उपयोग करते हैं (इकाइयों में दृढ़ता तर्क डाल दें)। इसलिए, मैं यह नहीं कहता कि में डीडीडी का पालन करने के लिए है। लेकिन यह वैसे भी ग्रोक करने के लिए उपयोगी होगा।

0

मेरे पास मॉडल कक्षाएं हैं जिनमें आपके जैसे क्रूड और पोको हैं।

इसके अलावा मेरे पास व्यूमोडेल हैं जो टाइप किए गए दृश्यों के लिए उपयोग किए जाते हैं।

मेरा व्यूमोडेल बहुत बड़ा है और कुछ दृश्यों में उपयोग किया जाता है (पूरे अनुप्रयोग के लिए लगभग 10-15 व्यूमोडेल)। मेरे आवेदन में ये व्यूमोडल्स कोड के लिए एकदम सही जगह के रूप में समाप्त हुए जो नियंत्रक कार्यों के लिए बड़े और दोहराए गए हैं।

उदाहरण के लिए मेरे पास कुछ तर्क है जो कार्ट में उत्पाद जोड़ने पर यूआई के बहुत करीब है। अब मेरे पास व्यूमोडेल में एक विधि है: AddToCart (IProductService productService, ICartService कार्ट सेवा)।

0

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

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