Under omredigering i forbindelse med US-2877
Når vi taler om caching i DFDG skelner vi mellem:
- Statiske data - f.eks. kodelister, konfiguration
- Dynamiske data - f.eks. personregistreringer
Som udgangspunkt cacher vi kun statiske data.
Teknisk implementering
MemoryCache fra .NET framework (System.Runtime.Caching namespace) anvendes gennem nedarvning af den abstrakte klasse CachingDecoratorBase.
namespace KC.AMS.BLL.Utility.Caching
public abstract class CachingDecoratorBase
{
protected TOut GetCached<TOut>(string key, Func<TOut> callback, int timeoutInMinutes = 5)
protected void RemoveItemFromCache(string key)
}
GetCached returnerer, udfra key, den cachede værdi såfremt denne findes . Findes denne ikke kaldes delegate callback (typisk en get funktion på et DAL object) der henter data som caches. timeoutInMinutes specificerer timeout for det pågældende item - default = 5 minutter. Miljøerne (Application Poolen) recycles hver aften, så i praksis vil en timeout større end 24 timer ikke have effekt.
RemoveItemFromCache fjerner et specifikt cache item.
Clearing af cache kan ske gennem skabelse af en enumerator over alle cached items, der således kan fjernes enkeltvis. Mens denne fremgangsmåde ikke bør anvendes i produktionsmiljø, sker clearing af cache i testrammeværket for at undgå at cachede værdier fra en test påvirker de efterfølgende.
Bemærk: I tilfælde af knaphed på memory-ressourcer, kan CLR vælge at rydde cachen med henblik på frigivelse af disse.
Anvendelse i DFDG
Praktisk anvendelse af CachingDecoratorBase i DFDG (5. marts 2018) kan findes i nedenstående klasser/metoder:
- BLL.BookingInterview
- ExternalBookingSystemDALCached.GetEndpointConfigurationName
- BLL.MyPlan
- GuidanceTextEngineSettingsCached.GetRules
- TaxonomyManagerCached.GetOccupations
- BLL.Screening
- ScreeningDALCached.GetSettings
- ScreeningDALCached.GetJobcenterData
- ScreeningDALCached.GetJobcenterDataList
- BLL.SystemAreaSubscription
- SystemAreaSubscriptionDALCached.GetSystemAreaSubscriptions
- BLL.UnemploymentFundAccessFilters
- UnemploymentFundAccessFiltersDALCached.GetAccessFilters
- UnemploymentFundAccessFiltersDALCached.GetAccessFilterByCategory
- UnemploymentFundAccessFiltersDALCached.GetAccessFilterByCategoryAndName
- UnemploymentFundAccessFiltersDALCached.GetAccessFiltersByCategoryCollection
- BLL.Utility
- ClientSystemDalCached.GetClientSystem
Tekniske overvejelser
Vi har overvejet Query Notifications mod SQL Serveren, men har pt. ikke fundet det opnåede forretningsværdi af den forøgede kompleksitet stor nok. Da der er tale om i udgangspunktet statiske data, er det ikke slutbrugerene der opdaterer data.