2010-04-20 14 views
5

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

क्या किसी को इस बात को दोबारा करने के लिए कोई सलाह है? वेब प्रोजेक्ट के एक अलग प्रोजेक्ट बनाम हिस्से में क्या होना चाहिए? क्या आप मुझे विषय पर किसी भी संदर्भ सामग्री के लिए इंगित कर सकते हैं, या यह सिर्फ कुछ समय के साथ आदी हो गया है?

+3

सबसे पहले आपको Resharper की आवश्यकता होगी ... – cletus

उत्तर

4

अपनी परियोजना को स्पष्ट रूप से नामस्थानों में व्यवस्थित करें। नामस्थान बहुत बड़ा नहीं होना चाहिए, बहुत छोटा नहीं। प्रत्येक नेमस्पेस को सार्वजनिक "इंटरफ़ेस" (यानी सार्वजनिक कक्षाओं का एक सेट) बनाएं और अन्य नामस्थानों से नामस्थान के आंतरिक कार्यान्वयन विवरण तक न पहुंचें। विभिन्न नामस्थान आमतौर पर किसी एप्लिकेशन के विभिन्न हिस्सों को संबोधित करते हैं, उदा। आपके पास UI, व्यवसाय तर्क, सहायक कार्यक्षमता इत्यादि से संबंधित नामस्थान होंगे। Framework Design Guidelines में कुछ अच्छे सुझाव हैं कि नामस्थान कैसे डिज़ाइन करें।

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

+0

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

+0

एफडीजी पुस्तक गाइड है। एक बार जब आप सार्थक नामस्थान बनाते हैं, तो उन्हें स्तरित करने का प्रयास करें और विशाल परियोजना को कई छोटे लोगों में विभाजित करें। मैं सहमत हूं कि रीशेर्पर अच्छा है, लेकिन एनडेंडेंड और भी उपयोगी है। http://codebetter.com/blogs/patricksmacchia/archive/2008/09/23/getting-rid-of-spaghetti-code-in-the-real-world.aspx –

2

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

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

1

guidance given by the Sharp Architecture project देखें। इसका एएसपी.नेट एमवीसी लेकिन वही सिद्धांत एएसपी.नेट और अन्य परियोजनाओं पर लागू होते हैं। जो लोग इस सामान को एक साथ रखते हैं वे स्मार्ट मैं आम तौर पर डिफ़ॉल्ट सलाह के रूप में अपनी सलाह का उपयोग करता हूं और केवल एक अच्छा कारण होने पर ही भटक जाता हूं।

बुनियादी tiering है कि वे प्रस्ताव

  • आपके डोमेन वस्तुओं और (हठ सहित) बाहरी सेवाओं तक पहुँचने के लिए इंटरफेस के लिए एक कोर परियोजना है।
  • एक डेटा परियोजना है कि कोर पर निर्भर करता है और दृढ़ता
  • इस तरह के प्रवेश या लॉगिन सत्यापन के रूप में अनुप्रयोग स्तर की चिंताओं के समर्थन के लिए एक आवेदन सेवाओं परियोजना तक पहुँचने के लिए सभी इंटरफ़ेस लागू करता है। यह केवल संदर्भ संदर्भ है।
  • वेब प्रोजेक्ट जिसमें केवल विचार हैं।
  • नियंत्रक प्रोजेक्ट जो आपके बूटस्ट्रैपिंग कोड और आपके वेब परत, डोमेन को समन्वयित करने के लिए कोड रखता है।

मैं MVP पैटर्न का उपयोग करना चाहते एक asp.net अनुप्रयोग के मामले में जो मूल रूप से मतलब होगा

  • वेब परियोजना अपने WebForms और codebehinds जिनमें से केवल न्यूनतम राशि को शामिल करना चाहिए रखती है प्रस्तुतकर्ता को रीडायरेक्ट करने के लिए आवश्यक कोड। आपको शायद वहां अपने बूटस्ट्रैपिंग कोड को भी रखना होगा। यह एएसपी.Net सीमा के कारण है और आपको अपने कोडबेइंड्स से उस सामान का संदर्भ नहीं देना चाहिए।
  • नियंत्रक प्रोजेक्ट को एक प्रेजेंटर्स प्रोजेक्ट द्वारा प्रतिस्थापित किया गया है। यहां बड़ा अंतर यह है कि किसी भी तरह प्रस्तुति को वेबफॉर्म द्वारा दूसरी तरफ से तुरंत चालू किया जाना चाहिए।

आप ASP.NET MVP project को देखने का भी प्रयास कर सकते हैं।

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