
Cache aspect, bir web uygulamasında sıkça kullanılan verilerin önbelleğe alınmasını ve böylece performansın artırılmasını sağlayan bir tasarım kalıbıdır.
Cache aspect, AOP (Aspect Oriented Programming) ile uygulanabilir.
AOP, kesişen ilgiler (cross cutting concerns) olarak adlandırılan, uygulamanın farklı katmanlarında ortak olarak kullanılan işlemlerin merkezi bir noktadan yönetilmesini sağlayan bir programlama paradigmasıdır.
Cache aspect, AOP’nin bir uygulaması olarak, veri erişim katmanında veya iş katmanında belirli metotların sonuçlarını önbelleğe almak için kullanılabilir.
Örneğin, bir web sitesinde sıkça ziyaret edilen sayfaların içeriği önbelleğe alınabilir ve böylece sunucu yükü azaltılabilir.
public class CacheAspect : MethodInterception { private readonly int _duration; private readonly ICacheManager? _cacheManager; public CacheAspect(int duration=120) { _duration = duration; _cacheManager = ServiceTool.ServiceProvider!.GetService<ICacheManager>(); } public override void Intercept(IInvocation invocation) { if (invocation.Method.ReflectedType != null) { var methodName = string.Format($"{invocation.Method.ReflectedType.FullName}.{invocation.Method.Name}"); var arguments = invocation.Arguments.ToList(); var key = $"{methodName}({string.Join(",", arguments.Select(p => p?.ToString() ?? "<Null>"))})"; if (_cacheManager!.IsAdd(key)) { invocation.ReturnValue = _cacheManager.Get(key); return; } invocation.Proceed(); _cacheManager.Add(key,invocation.ReturnValue,_duration); } base.Intercept(invocation); } }