2012-10-19 9 views
10

मैं जो क्लाइंट और सर्वर के लिए 2 समाधान शामिल है एक .net C# आवेदन में काम बनाम। सर्वर साइड में 80 + परियोजनाओं कि वास्तुकला परतों निम्नलिखित अलग करने के लिए इस्तेमाल किया गया है,आयोजन कोड अलग नेमस्पेस

  • इंफ्रास्ट्रक्चर लेयर
  • एकता लेयर (बाहरी सिस्टम)
  • डोमेन परत
  • भंडार लेयर
  • प्रबंधक परत देखते हैं
  • सेवा लेयर

मैं n इसके अलावा, लगभग हर परत होती है परीक्षण project.Now, समाधान के निर्माण समय 2 से 3 मिनट, और (मेरे सहित :)) लगता है कि हम इस समस्या से निपटने के लिए की जरूरत है कई डेवलपर्स लेता है।

इसलिए, प्रस्तावित समाधान परियोजनाओं को विलय करके परियोजनाओं की संख्या को कम करना था। मेरे विचार में, शायद निर्माण समय को कम करने के लिए यह एक अच्छा समाधान है और हम जो चाहते हैं उसे हासिल कर सकते हैं।

प्रस्तावित समाधान है कि हम इस तरह के (आदि WCF मेजबान,) उत्पादन कोड के लिए एक पुस्तकालय, परीक्षण कोड के लिए एक पुस्तकालय, और तैनाती परियोजनाओं के लिए एक के रूप में 3 क्षेत्रों में हमारी परियोजनाओं विलय, और तार्किक को अलग करके एक ही परियोजना में परतों विभाजित है नामस्थान

लेकिन, मेरा चिंताओं

  1. हैं सका इन जुदाई रख-रखाव के लिए अच्छा है? प्रत्येक नामस्थान एपॉक्स के लिए कक्षाओं की हंड्रेड प्रदान करना।
  2. हम जहाँ हम उन रखा जाता है, इस तरह के सहायकों के रूप में आम कार्यक्षमता है, तो?

वहाँ समाधान लेयरिंग के लिए किसी भी अन्य रास्ता नहीं है?

+2

मुझे यकीन नहीं है कि कम परियोजना बनाने से चीज़ें तेजी से बढ़ जाएंगी, कोड की मात्रा समान होगी। मुझे नहीं लगता कि परियोजनाओं को इकट्ठा करने पर वीएस कचरा ज्यादा समय लगता है। –

+0

क्यों नहीं बल्कि अपने समाधान को कई में विभाजित करें? – Guillaume

उत्तर

2

में मदद करता है मुझे लगता है कि आप तार्किक परतों में अपने समाधान विभाजित करना चाहिए।

जहां सहायकों रखूँ के हिस्से के रूप।निम्नतम स्तरों में से एक पर इसके लिए समाधान बनाएं। एक खेत के लिए

उदाहरण

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

  • खरीदें मॉड्यूल की बिक्री के लिए Everyting:

    यह एक निम्न समाधानों

    वापस अंत

    • बेचना मॉड्यूल में splitted हो सकता है अन्य उत्पादों, ...
    • शेड्यूलर मॉड्यूल: बोने के बीज, कटाई के लिए ट्रिगर घटनाएं ...
    • भविष्यवाणी Modu le: भविष्यवाणी फसल मात्रा के मौसम से, और बाजार की कीमतों, ...
    • ...

    इन बैक-एंड मॉड्यूल से प्रत्येक, उसका स्वयं का डेटा एक्सेस परत, डीटीओ, WCF सेवा है, हो सकता है। ..

    इस समाधान में केवल व्यापार तर्क, डेटा एक्सेस, ... शामिल होगा। और इन बैक-एंड समाधानों से जुड़ने वाले कई फ्रंट-एंड समाधान हो सकते हैं।

    मोर्चा के अंत

    • ASP.NET MVC आवेदन: एक उपभोक्ता के लिए
    • WPF आवेदन की बिक्री के लिए Webshop: चीजें खरीद: अनुमोदन
    • अन्य WPF आवेदन बेचता है।
    • मोबाइल एप्लिकेशन: ईवेंट को अपने फोन या किसी चीज़ पर प्राप्त करना।
    • ...

    यह अपनी परियोजना के लिए एक बड़ा परिवर्तन है और यह असर पड़ेगा (एक अन्य विकल्प 1 सामने के अंत समाधान में 2 या अधिक बैकएंड समाधान कनेक्ट करने के लिए है)। सुनिश्चित करें कि आप इसे सही मानते हैं, अगर आप इसे बदलना नहीं चाहते हैं।

    एकाधिक समाधान आपके समग्र बिल्ड टाइम में वृद्धि करेंगे और रात का निर्माण करना महत्वपूर्ण है ताकि प्रत्येक डेवलपर हमेशा अपनी स्थानीय मशीन पर सभी समाधानों को बगैर नवीनतम बाइनरी पर काम कर सके।

    नोट आप अभी भी विभिन्न समाधान में अपनी परतों का उपयोग कर सकते हैं:

    • इंफ्रास्ट्रक्चर लेयर
    • एकता लेयर (बाहरी सिस्टम)
    • डोमेन परत
    • भंडार लेयर
    • प्रबंधक लेयर
    • सेवा परत

    यह काम सभी को एक साथ बनाने और बाइनरी के साथ गड़बड़ न करने के लिए। आप एक ड्राइव IE मानचित्र कर सकते हैं। एक्स: जहां आपके पास एक फ़ोल्डर बाइनरी है, जहां आपके पास प्रत्येक समाधान के लिए एक फ़ोल्डर है। जहां प्रत्येक समाधान कॉपी पोस्ट बिल्ड इवेंट पर असेंबली है। (यह स्क्रिप्ट करें, इसलिए यह प्रत्येक मशीन पर काम करता है)

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

    यदि आप टीएफएस में निर्माण करते हैं तो सुनिश्चित करें कि आपका निर्माण आदेश सही है, सबसे पहले सबसे कम परत, उच्चतम परत तक चलें।

    लेकिन जैसे ही आप अपना समाधान विभाजित करते हैं, समाधानों में आपको शायद हर समाधान में उनकी आवश्यकता नहीं होगी।

    मैंने हाल ही में Onion Architecture के बारे में एक लेख पढ़ा है, शायद आप इसे भी देख सकते हैं। (यह एएसपी.नेट एमवीसी के लिए विशिष्ट है)।

    आप CQRS पर भी देख सकते हैं।

  • 2

    मैं निश्चित रूप से परियोजनाओं को विलय नहीं करूँगा ... मुझे लगता है कि आप प्रत्येक परत में स्पेगेटी कोड के साथ जल्दी समाप्त हो जाएंगे क्योंकि डेवलपर्स शॉर्टकट लेते हैं (चाहे उनका मतलब है या नहीं) कि उन्हें नहीं लेना चाहिए।

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

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

    कुछ यहां दिए गए उपाय: http://blogs.microsoft.co.il/blogs/arik/archive/2011/05/17/speed-up-visual-studio-builds.aspx

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

    आशा है कि

    3

    क्यों 80+ परियोजनाएं आपके आवेदन में केवल 6 परतें हैं?

    आप उत्तर दे सकते हैं कि वे बड़ी संख्या में कार्यात्मक क्षेत्रों को कवर करते हैं, लेकिन क्या आपको पहले से ही एक समाधान में इन सभी कार्यात्मक क्षेत्रों की आवश्यकता है?

    मैं परियोजनाओं के साथ वास्तु डिवीजनों और समाधान के साथ कार्यात्मक डिवीजनों को दर्शाती है की सलाह देते हैं। विभिन्न समाधान एक ही परियोजना का पुन: उपयोग कर सकते हैं। इस तरह आपके पास प्रत्येक पुन: प्रयोज्य वास्तुशिल्प परत और कई डोमेन परियोजनाओं के लिए एक परियोजना होगी क्योंकि कार्यात्मक क्षेत्र हैं।

    +0

    yup .. अच्छा बिंदु। हमारे पास कई परतों के लिए अलग-अलग परियोजनाओं में डेटा अनुबंध, संचालन अनुबंध हैं। हालांकि, हमारे पास समाधान में कई बाहरी सिस्टम परियोजनाएं भी हैं, और अब मुझे विश्वास है कि अगर उन्हें – marvelTracker

    1

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

    यदि आप चाहते हैं, तो आपको इन छोटी समाधान फ़ाइलों को स्रोतों को नियंत्रित करने की भी आवश्यकता नहीं है - डेवलपर्स स्वयं अपना बना सकते हैं और वे सीमा रेखा को दूर कर सकते हैं।

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

    +0

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

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