2008-09-22 10 views
7

मैं सीखने के लिए एक नया एएसपी.नेट एमवीसी प्रोजेक्ट शुरू कर रहा हूं, और सोच रहा हूं कि डेटा के लिए SQL सर्वर से कनेक्ट करने के लिए प्रोजेक्ट (ओं) को सेट करने का सबसे अच्छा तरीका क्या है। उदाहरण के लिए दिखाएं कि हमारे पास एक उत्पाद तालिका है और एक उत्पाद वस्तु है जिसका उपयोग मैं अपने दृश्य में डेटा को पॉप्युलेट करने के लिए करना चाहता हूं।एएसपी.नेट एमवीसी परियोजना के लिए डेटा एक्सेस सेट अप करने का सबसे अच्छा तरीका क्या है?

मैं यहाँ में कहीं जानता हूँ कि मैं एक अंतरफलक को लागू किया जाता है कि, आदि होना चाहिए, लेकिन मैं :-(

संपादित आज उसके चारों ओर मेरे मन रैप नहीं कर सकते हैं: अभी (यानी: वर्तमान, खराब कोडित संस्करण इस ऐप का) मैं डेटा एक्सेस के लिए केवल संग्रहीत प्रक्रियाओं का उपयोग करके सादे पुराने SQL सर्वर (2000 भी) का उपयोग कर रहा हूं, लेकिन मैं linq से sql या कुछ का उपयोग करने के लिए flexability की एक अतिरिक्त परत में जोड़ने के प्रतिकूल नहीं होगा।

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

उत्तर

1

मेरी साइट के समाधान में, मेरे पास एमवीसी वेब एप्लिकेशन प्रोजेक्ट और एक "सामान्य" प्रोजेक्ट है जिसमें मेरे पीओसीओ (सादे ओएल 'सी # ऑब्जेक्ट्स), बिजनेस मैनेजर और डेटा एक्सेस लेयर शामिल हैं।

डीएएल कक्षाएं SQL सर्वर से जुड़ी हैं (मैंने उन्हें सार नहीं दिया है) और एमओसी प्रोजेक्ट में अपने नियंत्रकों से कॉल करने वाले व्यवसाय प्रबंधकों को पीओसीओ वापस कर दिया है।

+0

मैं शायद लगता है कि इस मुद्दे को मैं पर एक समझ पाने के लिए कोशिश कर रहा हूँ में से कुछ की जरूरत है हो सकता है नहीं कर रहा है कि क्या अंतर आम परियोजनाओं में अपनी वस्तुओं के बीच होगा वी.एस. है वस्तुओं को मॉडल फ़ोल्डर में जाना चाहिए? या क्या यह आम परियोजना चीजों को मॉडलों में बदलने की जगह लेती है? –

+0

मैं पूरी तरह गलत हो सकता हूं (मैं एमवीसी के लिए नया हूं), लेकिन मैं दृश्य-विशिष्ट उपयोग के लिए अपने "सामान्य" ऑब्जेक्ट्स के मैश-अप बनाने के लिए मॉडल फ़ोल्डर का उपयोग करूंगा। –

+0

तो क्या आप मूल रूप से मॉडल फ़ोल्डर में अपनी सामान्य वस्तुओं का विस्तार करेंगे यदि उन्हें आपकी मूल सामान्य वस्तु में प्रदान नहीं किया गया कुछ करने की आवश्यकता है? –

4

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

मैं this here में से कुछ को कवर करने की कोशिश की है:

+0

वह लिंक नहीं खोल सकता .... क्या आपकी साइट नीचे है? –

3

मैं एक MVC दुकान सामने की उसके निर्माण पर Rob Conery's वीडियो की जांच होगी। श्रृंखला यहां पाई जा सकती है: MVC Store Front Series

यह श्रृंखला सभी प्रकार के डिजाइन संबंधित विषयों के साथ-साथ एमवीसी और अन्य परियोजनाओं के साथ उपयोग करने के लिए कोडिंग/परीक्षण अभ्यासों में भी जाती है।

0

हमारे आवेदन के लिए मैं LINQ से इकाइयों का उपयोग करने की योजना बना रहा हूं, लेकिन जैसा कि यह मेरे लिए नया है, संभावना है कि मैं इसे भविष्य में बदलना चाहूंगा यदि यह ऐसा नहीं करता है जैसा मैं चाहूंगा और कुछ और उपयोग करूंगा LINQ से SQL या NHibernate, इसलिए मैं डेटा एक्सेस ऑब्जेक्ट्स को एक सार कारखाने में सारणित कर दूंगा ताकि कार्यान्वयन आवेदक से छिपा हुआ हो।

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

0

एक अच्छा संदर्भ अनुप्रयोग के लिए Code Camp Server देखें जो यह बहुत ही काम करता है और @haacked निर्दिष्ट सार है जो उन्हें अलग रखने के लिए दूर जाता है।

1

मुझे लगता है कि बिली McCafferty के S#arp Architecture एक डेटा का उपयोग परत (NHibernate डिफ़ॉल्ट के रूप में उपयोग करते हुए), निर्भरता इंजेक्शन के साथ ASP.NET MVC का उपयोग करने का एक काफी अच्छा उदाहरण है (Ninject एटीएम, लेकिन CommonServiceLocator समर्थन करने के लिए योजना नहीं है) और परीक्षण - विकास विकास। ढांचा अभी भी विकास में है, लेकिन मैं इसे काफी अच्छा और स्थिर मानता हूं।वर्तमान रिलीज के रूप में, अंतिम रिलीज होने तक कुछ तोड़ने वाले बदलाव होने चाहिए, इसलिए इसके खिलाफ कोडिंग ठीक होनी चाहिए।

0

LINQ का उपयोग करें। SQL फ़ाइल में LINQ बनाएं और आपको आवश्यक सभी तालिकाओं और दृश्यों को खींचें और छोड़ें। फिर जब आप अपने मॉडल को कॉल करते हैं तो आपके सभी सीआरयूडी स्तर की सामग्री स्वचालित रूप से आपके लिए बनाई जाती है।

LINQ सबसे अच्छी बात है जो मैंने लंबे समय से देखी है। स्कॉट गु के ब्लॉग से डेटा हथियाने के लिए यहां कुछ सरल नमूने दिए गए हैं।

LINQ Tutorial

0

मैं सिर्फ मेरी पहली MVC परियोजना किया था और मैं एक सेवा-भंडार डिजाइन पैटर्न का इस्तेमाल किया। नेट पर अभी इसके बारे में जानकारी के बारे में अच्छी जानकारी है। इसने लिंक-> एसक्यूएल से एंटिटी फ्रेमवर्क तक आसानी से अपना संक्रमण किया। यदि आपको लगता है कि आप इंटरफेस का उपयोग करने के लिए थोड़ा अतिरिक्त प्रयास में बहुत कुछ बदल रहे हैं।

मैं आपके डीएएल/रिपोजिटरी के लिए इकाई फ्रेमवर्क की अनुशंसा करता हूं।

1

मैंने कुछ एमवीसी अनुप्रयोग किए हैं और मुझे एक संरचना मिली है जो मेरे लिए बहुत अच्छी तरह से काम करती है। यह Rob Conery's MVC Storefront Series पर आधारित है कि जेपीर्सकॉट सैंडर्स ने उल्लेख किया है (हालांकि वह जो लिंक पोस्ट करता है वह गलत है)।

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

इस अंत में मैं आमतौर पर अपने आवेदन में 3 परतों के साथ समाप्त होता हूं। पहला प्रस्तुति परत - नियंत्रक है। दूसरा सेवा परत है - यह परत जटिल प्रश्नों के साथ-साथ सत्यापन जैसी चीजों को निष्पादित करने के लिए ज़िम्मेदार है। तीसरी परत भंडार परत है - यह परत डेटाबेस तक पहुंच के लिए ज़िम्मेदार है।

तो आपके उत्पादों में उदाहरण में, इसका मतलब यह होगा कि आपके पास GetProducts() और SaveProduct (उत्पाद उत्पाद) जैसी विधियों के साथ एक उत्पाद रिपोजिटरी होगी। GetProductsForUser (उपयोगकर्ता उपयोगकर्ता), GetProductsWithCategory (श्रेणी श्रेणी) और SaveProduct (उत्पाद उत्पाद) जैसी विधियों के साथ आपके पास एक उत्पाद सेवा (जो ProductRepository पर निर्भर करती है) भी होगी। सत्यापन की तरह चीजें भी यहां होंगी। अंत में आपका नियंत्रक उत्पादों को पुनर्प्राप्त करने और संग्रहीत करने के लिए आपकी सेवा परत पर निर्भर करेगा।

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

0

मुझे लगता है कि आपको एक ओआरएम चाहिए।

उदाहरण इकाई फ्रेमवर्क (पहले कोड)

आप मॉडल के लिए कुछ वर्ग बना सकते हैं के लिए

इन मॉडलों का उपयोग तर्क और देखने के लिए करें, और उन्हें डीबी (v1) में मैपिंग करें।

जब डीबीए आपको नया डीबी (v2) देता है, केवल मैपिंग कॉन्फ़िगरेशन को बदलें। (V1 और v2 सभी rdb, sql सर्वर, mysql, oracel ...) हैं, यदि डीबी (v1) एक rdb और db है (v2) एक nosql है (मोंगो, रेडिस, सोफेबेस ...), कि काम

कुछ मिल रहा है और की जगह