मुझे लगता है कि विकल्प 2 एक बुरा नहीं है, लेकिन इसकी आवश्यकता नहीं हो सकती है। सूक्ष्म सेवाएँ आपको कई अनुप्रयोगों की आवश्यकताओं से निपटने के लिए हैं।
यहां एक बड़ा कारक यह है कि क्या दोनों स्कीमाओं के बीच कोई अंतर है, और अगर भविष्य में कभी भी ऐसा होगा।
आमतौर पर, मुझे लगता है कि रिपॉजिटरी के लिए इंटरफेस का उपयोग करना अनावश्यक है; हालाँकि, यह इस उदाहरण में प्रयास के लायक हो सकता है। रिपोजिटरी कारखाने आपके लिए महत्वपूर्ण होंगे।
विकल्प 1 के साथ मेरा मुद्दा यह है कि यह बहुत विशिष्ट है। आपको उस सेटअप से जाने में सक्षम होना चाहिए जो आपने वर्णित किया है, दो अलग-अलग उदाहरणों में प्रत्येक अपने स्वयं के डीबी को आसानी से इंगित करता है। आवेदन यह नहीं होना चाहिए कि आईटी कहां से डेटा प्राप्त कर रहा है।
हालांकि स्कीमा आपके दो अलग-अलग डेटाबेसों के लिए भिन्न नहीं होती है, आप एक रिपॉजिटरी को आसानी से दोनों के साथ सौदा कर सकते हैं, आवेदन के बिना अंतर जानने के बिना:
public class MyEntityRepository : ISavesMyEntity, IGetsMyEntity
{
public MyEntityRepository(string connectionString)
{
_connectionString = connectionString;
}
}
public class MyEntitySaverFactory
{
public ISavesMyEntity GetSaver(User user)
{
if (user.IsUK)
return new MyEntityRepository(Config.Get("UKConnString"));
if (user.IsUS)
return new MyEntityRepository(Config.Get("USConnString"));
throw new NotImplementedException();
}
}
//USE
ISavesMyEntity saver = factory.GetSaver(currentUser);
saver.Save(myEntityInstance);
यदि DB स्कीमा कभी यूएस और यूके के बीच असमान हो जाती है, तो आप फिर कार्यक्षमता को दो पूरी तरह से अलग-अलग रिपॉजिटरी में विभाजित करेंगे। यह आसान होगा, क्योंकि आपको अपने कारखाने को बदलना होगा।