मैं एचटीपी कैश और सिंगलटन दृष्टिकोणों को समझने में थोड़ा उलझन में हूं।एचटीपी कैश बनाम सिंगलटन - एक एमवीसी अनुप्रयोग के लिए सर्वश्रेष्ठ अभ्यास
मेरा एप्लिकेशन Asp.net एमवीसी का उपयोग करता है और परिदृश्य यह है कि, मेरे पास डेटा की कुछ सूची है जो कभी नहीं बदलेगी और कुछ डेटा जो शायद ही कभी बदल सकते हैं।
मैंने इस प्रकार के डेटा के लिए सिंगलटन रिपोजिटरी का उपयोग करके एप्लिकेशन विकसित और तैनात किया है। यह बहुत अच्छा प्रदर्शन करता है। एकमात्र मुद्दा यह है कि जब एक दुर्लभ मामला होता है, तो मुझे प्रभावी होने के लिए आईआईएस को पुनरारंभ करना होगा।
सबसे अच्छा समाधान क्या है।
सिंगलटन कार्यान्वयन
public class SingletonRepository : ISingletonRepository
{
private static SingletonRepository singleInstance;
private readonly IStateRepository stateRepo;
private readonly ICountryRepository countryRepo;
private readonly ITDPaymentModeRepository paymentModeRepo;
private readonly ITDPlanRepository planRepo;
private readonly ITDOrderTypeRepository orderTypeRepo;
private readonly IKeywordRepository keywordRepo;
private readonly IAgencyRepository agencyRepo;
private readonly IList<AT_STATE> lstState;
private readonly IList<AT_COUNTRY> lstCountry;
private readonly IList<TDPaymentMode> lstPaymentMode;
private readonly IList<TDPlan> lstPlan;
private readonly IList<TDOrderType> lstOrderType;
private readonly IList<Keyword> lstKeyword;
private readonly IList<Agency_MST> lstAgency;
private SingletonRepository()
{
stateRepo = new StateRepository();
countryRepo = new CountryRepository();
paymentModeRepo = new TDPaymentModeRepository();
planRepo = new TDPlanRepository();
orderTypeRepo = new TDOrderTypeRepository();
keywordRepo = new KeywordRepository();
agencyRepo = new AgencyRepository();
lstState = stateRepo.GetAll().Where(x => x.CountryId == 101).ToList();
lstCountry = countryRepo.GetAll().ToList();
lstPaymentMode = paymentModeRepo.GetAll().ToList();
lstPlan = planRepo.GetAll().ToList();
lstOrderType = orderTypeRepo.GetAll().ToList();
lstKeyword = keywordRepo.GetAll().ToList();
lstAgency = agencyRepo.GetAll().ToList();
//lstState = stateRepo.GetAll().Take(20).ToList();
//lstCountry = countryRepo.GetAll().Take(20).ToList();
//lstPaymentMode = paymentModeRepo.GetAll().Take(20).ToList();
//lstPlan = planRepo.GetAll().Take(20).ToList();
//lstOrderType = orderTypeRepo.GetAll().Take(20).ToList();
//lstKeyword = keywordRepo.GetAll().Take(20).ToList();
//lstAgency = agencyRepo.GetAll().Take(20).ToList();
}
public static SingletonRepository Instance()
{
return singleInstance ?? (singleInstance = new SingletonRepository());
}
public IList<AT_STATE> GetState()
{
return this.lstState;
}
public IList<AT_COUNTRY> GetCountry()
{
return this.lstCountry;
}
public IList<TDPaymentMode> GetPaymentMode()
{
return this.lstPaymentMode;
}
public IList<TDPlan> GetPlan()
{
return this.lstPlan;
}
public IList<TDOrderType> GetOrderType()
{
return this.lstOrderType;
}
public IList<Keyword> GetKeyword()
{
return this.lstKeyword;
}
public IList<Agency_MST> GetAgency()
{
return this.lstAgency;
}
}
}
आपका सिंगलटन कैसे कार्यान्वित किया जाता है? क्या यह सिर्फ डेटा को स्मृति (वर्ग के सदस्यों के रूप में) में संग्रहीत करता है? उपयोगकर्ताओं को प्रदर्शित करने के लिए आपको शायद ही कभी बदले गए डेटा परिवर्तनों के बाद आईआईएस को पुनरारंभ करना होगा? – danludwig
हां, डेटा IList ऑब्जेक्ट में संग्रहीत है। और आईआईएस पुनरारंभ करने के बाद ही परिवर्तन प्रतिबिंबित होते हैं। –