2008-09-05 7 views
7

में डेस्कटॉप एप्लिकेशन को कैसे आर्किटेक्ट करेंगे I C# 3.0 में कुछ सी #, wpf और .Net 3.5 सीखने के लिए एक सरल डेस्कटॉप एप्लिकेशन बनाया है। मेरा एप्लिकेशन अनिवार्य रूप से एक सीएसवी फ़ाइल से डेटा पढ़ता है और इसे SQL सर्वर सीई डेटाबेस में संग्रहीत करता है। मैं डेटाबेस के लिए ओआरएम कोड उत्पन्न करने के लिए वर्गमीटर का उपयोग करता हूं। इस ऐप का मेरा पहला पुनरावृत्ति नरक के रूप में बदसूरत है और मैं इसे पुन: सक्रिय करने की प्रक्रिया में हूं।आप सी # 3.0

जो मुझे मेरे प्रश्न में लाता है। आप सी # में डेस्कटॉप डेटाबेस ऐप कैसे आर्किटेक्ट करेंगे? सर्वोत्तम प्रथाओं क्या हैं?

क्या आप एक डाटाबेस एब्स्ट्रक्शन लेयर (डीएएल) बनाते हैं जो एसक्ल्मेटल जेनरेट कोड का उपयोग करता है? या जेनरेट कोड पर्याप्त अमूर्त है?

यदि आप डीएएल पैटर्न का उपयोग करते हैं, तो क्या आप इसे सिंगलटन या स्थिर सदस्य बनाते हैं? क्या आप डीएएल पैटर्न के साथ व्यू-मॉडल-मॉडल व्यू पैटर्न का उपयोग करते हैं?

क्षमा करें अगर यह एक लंबे खुले अंत प्रश्न की तरह लगता है, लेकिन मैं हाल ही में यह बहुत सोचा रहा हूं। मुझे सी # में एंटरप्राइज़ एन-स्तरीय ऐप को आर्किटेक्ट करने के तरीके पर बहुत सारे उदाहरण दिखाई देते हैं, लेकिन आर्किटेक्चरिंग स्टैंडअलोन डेस्कटॉप ऐप्स पर बहुत से लोग नहीं।

उत्तर

4

मैं माइक्रोसॉफ्ट के पी & पी टीम से Composite Application Guidance for WPF (खांसी प्रिज्म खांसी) के साथ शुरू होगा। डाउनलोड के साथ एक महान संदर्भ एप्लिकेशन आता है जो आज मेरे अधिकांश डब्ल्यूपीएफ विकास के लिए शुरुआती बिंदु है।

DotNetRocks crew ने Glenn Block और Brian Noyes पर साक्षात्कार लिया है, यदि आप उनसे अधिक सुनने में रुचि रखते हैं।

इससे भी बेहतर, प्रिज्म लगभग उतना ही भारी नहीं है जितना सीएबी था, अगर आप WinForms दिनों से सभी के बारे में परिचित हैं।

1

कुछ भी आर्किटेक्ट करने से पहले आपको अपने ऐप के लिए आवश्यकताओं को परिभाषित करना चाहिए।
यह शुरुआती डेवलपर्स की एक आम त्रुटि है - यह सोचने से पहले लेखन कोड शुरू करना कि यह कैसा प्रदर्शन करेगा। मेरी सलाह आपके आवेदन की कुछ विशेषताओं का वर्णन करने की कोशिश करेगी। इससे आपको यह महसूस करने में मदद मिलेगी कि इसे कैसे कार्यान्वित किया जाना चाहिए।

उपयोगी शिक्षण संसाधनों के लिए मैं आपको CompositeWPF पर एक नज़र डालने की अत्यधिक अनुशंसा करता हूं, यह विशेष रूप से डेवलपर्स को डेस्कटॉप ऐप विकास के सर्वोत्तम प्रथाओं को सिखाने के लिए डिज़ाइन किया गया एक प्रोजेक्ट है।

2

उत्तर हमेशा के रूप में "यह निर्भर करता है" है।

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

एक और चीज जिसे आप विचार कर सकते हैं वह डेटा तर्क परत व्यापार तर्क और उपयोगकर्ता इंटरफ़ेस से स्वतंत्र है। इस से मेरा मतलब है कि व्यापार तर्क से सभी कॉल डीएएल में "मुझे यह डेटा प्राप्त करें" के बजाय जेनेरिक "मुझे यह डेटा प्राप्त करें" या इससे भी बदतर "इस SQL ​​कथन को चलाएं" होना चाहिए। इस तरह, आप अपने डीएएल को एक ऐसे स्थान से बदल सकते हैं जो एक अलग डेटाबेस, एक्सएमएल फाइलों, या यहां तक ​​कि फ्लैट फाइलों की तरह कुछ भी एक्सेस करता है।

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

0

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

1

मैं जेरेमी मिलर की Build Your Own Cab श्रृंखला से शुरू करूंगा।

मैं प्रारंभिक सीएबी गोद लेने वाला था। मैंने उस तकनीक में खुदाई करने और एप्लिकेशन आर्किटेक्चर के बारे में सभी .NET ब्लॉग पढ़ने से बहुत कुछ सीखा।

लेकिन हाल ही में मैं एक नई परियोजना शुरू करने के लिए एक मौका था, और बदले टैक्सी का उपयोग करने का मैं StructureMap & NHibernate के साथ चला गया और पैटर्न है कि जेरेमी का उपयोग करता है में से कुछ उधार (विशेष रूप से, घटना एकत्रीकरण से निपटने में अपने तरीके से)। नतीजा वास्तव में सरलीकृत, हाथ से बना हुआ ढांचा था जो मुझे चाहिए सब कुछ करता है और मुझे इसके साथ काम करना अच्छा लगता है।

आपके प्रश्न के विनिर्देशों के अनुसार: मैं डेटा एक्सेस के लिए एक रिपोजिटरी का उपयोग करता हूं। मैंने शुरुआत में कुछ एडीओ.NET कोड लिखा और डेटा पाठकों का इस्तेमाल किया और मेरी वस्तुओं को मैप किया। लेकिन यह पुराना वास्तविक तेज़ हो गया, इसलिए मैंने एनएचबेर्नेट को पकड़ लिया और वास्तव में प्रसन्न था। रिपॉजिटरीज डेटा एक्सेस के लिए एनएचबेर्नेट का उपयोग करते हैं, और इस विशेष ऐप में मेरी डेटा एक्सेस आवश्यकताएं बहुत सरल हैं।

मेरे पास एक सेवा परत है (डब्ल्यूसीएफ, डुप्लेक्स चैनलों के माध्यम से उजागर) जो भंडार का उपयोग करती है। मेरा ऐप मूल रूप से क्लाइंट-सर्वर वास्तविक समय अपडेट करने के साथ है (और मुझे पता है कि आपका प्रश्न केवल ग्राहकों के बारे में था, लेकिन मैं उसी तकनीक और पैटर्न का उपयोग करता हूं)। ओ

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

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