मैं प्रति ग्राहक आधार पर कोर उत्पाद के आसान अनुकूलन और विस्तार की अनुमति देने के बारे में कुछ सलाह ढूंढ रहा हूं। मुझे पता है कि यह शायद एक सवाल बहुत बड़ा है। हालांकि हमें वास्तव में कुछ विचारों को प्राप्त करने की आवश्यकता है जैसे कि हमें इस गलत का सेटअप मिल जाए, इससे हमें वर्षों तक समस्याएं हो सकती हैं। मेरे पास मौजूदा उत्पादों को अनुकूलित और विस्तारित करने में बहुत अधिक अनुभव नहीं है।प्रति ग्राहक आधार पर किसी उत्पाद के आसान अनुकूलन की अनुमति देने के लिए एक अच्छी समाधान संरचना क्या है?
हमारे पास एक मूल उत्पाद है जिसे हम आमतौर पर प्रति ग्राहक आधार पर bespoke करते हैं। हमने हाल ही में एक एमवीसी 3 फ्रंटएंड के साथ उत्पाद को सी # 4 में फिर से लिखा है। हम पुनर्संशोधित है और अब 3 परियोजनाओं कि समाधान रचना है: (। नाम स्थान - projectname.domain *) -
- कोर डोमेन परियोजना (उपयोग के लिए एफई द्वारा) डोमेन मॉडल से मिलकर, डोमेन सेवा इंटरफेस आदि (भंडार इंटरफेस)
- डोमेन बुनियादी ढांचा परियोजना (नाम स्थान -projectname.infrastructure *) -। कि डोमेन सेवा-एफई प्रसंग, भंडार कार्यान्वयन, फ़ाइल अपलोड/डाउनलोड इंटरफ़ेस कार्यान्वयन आदि
- MVC3 (नाम स्थान को लागू करता है -। projectname.web *) -प्रोजेक्ट जिसमें नियंत्रक, व्यूमोडेल, सीएसएस, सामग्री, स्क्रिप्ट आदि शामिल हैं। इसमें आईओसी (निनजेक्ट) परियोजना के लिए डी को संभालने में भी है।
यह समाधान एक स्टैंडअलोन उत्पाद के रूप में ठीक काम करता है। हमारी समस्या प्रति ग्राहक आधार पर उत्पाद को विस्तार और अनुकूलित कर रही है। ब्रांडेड सीएसएस और स्टाइल के साथ आमतौर पर हमारे ग्राहक कोर उत्पाद संस्करण को बहुत जल्दी (आमतौर पर अनुबंध पर हस्ताक्षर करने के कुछ दिनों के भीतर) चाहते हैं। हालांकि 70% ग्राहक फिर अनुकूलन चाहते हैं कि यह किस तरह से काम करता है। कुछ अनुकूलन छोटे मॉडल जैसे डोमेन मॉडल, व्यूमोडेल और व्यू आदि जैसे छोटे हैं। अन्य अधिक महत्वपूर्ण हैं और पूरी तरह से नए डोमेन मॉडल और नियंत्रक आदि की आवश्यकता है
कुछ अनुकूलन सभी ग्राहकों के लिए उपयोगी प्रतीत होता है, इसलिए समय-समय पर हम चाहेंगे उन्हें अनुकूलन से बदलने और उन्हें कोर में जोड़ने के लिए।
हम वर्तमान में टीएफएस में स्रोत कोड संग्रहीत कर रहे हैं। एक प्रोजेक्ट शुरू करने के लिए हम आमतौर पर स्रोत को एक नई टीम प्रोजेक्ट में कॉपी करते हैं। क्लाइंट नाम को प्रतिबिंबित करने के लिए नामस्थान बदलें और मूल भागों को अनुकूलित करना प्रारंभ करें और फिर Azure पर तैनात करें। यह स्पष्ट रूप से पूरी तरह से डुप्लीकेट कोड बेस में परिणाम देता है और मुझे यकीन है कि इसके बारे में जाने का सही तरीका नहीं है। मुझे लगता है कि हमें शायद ऐसा कुछ होना चाहिए जो मूल सुविधाओं को प्रदान करता हो और जहां आवश्यक हो, ओवरराइड/ओवरराइड करता है। हालांकि मुझे सच में यकीन नहीं है कि इस बारे में कैसे जाना है।
तो मैं सबसे अच्छा परियोजना विन्यास पर कोई सलाह है कि अनुमति होगी रहा हूँ:
- कोड का तेजी से तैनाती - इतना आसान लिए एक नए ग्राहक से शुरू करने के लिए ब्रांडिंग/मामूली परिवर्तन के लिए अनुमति
- रोकें कॉपी करने और कोड की चिपकाने के लिए की जरूरत जितना संभव हो उतना DI के
- उपयोग यह शिथिल युग्मित
- ग्राहक आधार प्रति एक पर कोड का bespoking के लिए अनुमति दें रखने के लिए
- एक भी जगह में कोर उत्पाद का विस्तार करने और सभी ग्राहकों है कि कार्यक्षमता हासिल अगर हम कोर और की नवीनतम संस्करण प्राप्त करने की क्षमता फिर से तैनात
कोई मदद/सलाह बहुत सराहना कर रहा है। अधिक जानकारी जोड़ने में खुशी है कि कोई भी सोचने में मदद करेगा।
5 परियोजनाओं के लिए प्रति क्लाइंट की शाखा बनाने की कोशिश करने के बाद हमने छोड़ दिया। हमने अब इसे एक ऐसे उत्पाद के रूप में लिखा है जो क्लाइंट कॉन्फ़िगरेशन के आधार पर इसे एक साथ खींचने के लिए MEF और DI का उपयोग करता है। इसके अलावा इसका मतलब है कि हम इसे एक वेब होस्ट पर तैनात कर सकते हैं और यह बेहतर स्केल करता है। – GraemeMiller
बहु-किरायेदारी पर इसे देखें जो बहुत अधिक स्थिति को कवर करता है http://codeofrob.com/entries/multi-tenancy-in-asp.net-mvc---ddd8-video.html – GraemeMiller