Öncelikle, makaleme hoş geldiniz. Elimden geldiğince forumdakilerin '.NET Core' hakkında bilgilenmeleri ve modern programlamaya uymalarına yardımcı olmak istiyorum.
Öncelikle AOP nedir?
AOP; Aspect Oriented Programming yani yazılımın karmaşıklığını azaltmak, yinelenen kodlardan kurtulmak amaçlı bir bakış açısıdır. Uygulamada pek işlevi olmayan (authorizasyon, yetki kontrolu, loglama) gibi şeylerin parçalara ayrılarak uygulamanın çeşitli yerlerinde kodların tekrar edilmeden kullanılmasını sağlar.
AOP ve Interception yapısını daha iyi anlamak için bu yazımızda Cros Cutting Concerns'e de biraz değinmek istiyorum.
Cross Cutting Concerns nedir?
CCS'in çevrilmiş hali "çarpaz kesen ilgiler" demektir. Peki bu ifade ne anlama gelmektedir? Çok katmanlı mimari ile çalıştığımızda herhangi bir katmana bağlı kalmadan her katmanda kullanabildiğimiz işlere CCS deriz. Örneğin; caching, hashing, logging, exception handling,...
Yani biz CCS'i katmanlarda kolaylaştırmak için AOP'ye ihtiyaç duyarız. Eğer CCS var olmasaydı AOP'ye ihtiyaç duymayacaktık diyebiliriz.
Sphagetti Kod Örneği:
Yukarıdaki kodda gördüğünüz gibi
Kesinlikle ilk koddan daha okunaklı olduğu bariz. İkinci kodda yaptığımız soyutlamalara baktığımızda C#'ta soyutlamalarımız birer Attribute'tur. Java, Php gibi dillerdede ise bunlara Annotation denir. Peki bu Attribute'lar nasıl çalışır? Bu Attribute'ları çalıştıran ara yazılıma interceptor denir. Eğer interceptor örneği yapmamı isterseniz lütfen cevap olarak belirtin. Umarım işine yarayan birileri çıkar 
Öncelikle AOP nedir?
AOP; Aspect Oriented Programming yani yazılımın karmaşıklığını azaltmak, yinelenen kodlardan kurtulmak amaçlı bir bakış açısıdır. Uygulamada pek işlevi olmayan (authorizasyon, yetki kontrolu, loglama) gibi şeylerin parçalara ayrılarak uygulamanın çeşitli yerlerinde kodların tekrar edilmeden kullanılmasını sağlar.
AOP ve Interception yapısını daha iyi anlamak için bu yazımızda Cros Cutting Concerns'e de biraz değinmek istiyorum.
Cross Cutting Concerns nedir?
CCS'in çevrilmiş hali "çarpaz kesen ilgiler" demektir. Peki bu ifade ne anlama gelmektedir? Çok katmanlı mimari ile çalıştığımızda herhangi bir katmana bağlı kalmadan her katmanda kullanabildiğimiz işlere CCS deriz. Örneğin; caching, hashing, logging, exception handling,...
Yani biz CCS'i katmanlarda kolaylaştırmak için AOP'ye ihtiyaç duyarız. Eğer CCS var olmasaydı AOP'ye ihtiyaç duymayacaktık diyebiliriz.
Sphagetti Kod Örneği:
Kod:
public class PostManager:IPostService {
IPostRepository PostRepository;
ILoggerService LoggerService;
public PostService(IPostRepository postRepository,ILoggerService loggerService){
PostRepository = postRepository;
LoggerService = loggerService;
}
public void Add(Post post){
try{
if(<<validasyon işlemi>>){
}
if(<<yetki kontrol işlemi>>){
}
PostRepository.Add(post);
}
catch(Exception e){
loggerService.log($"Sistemde kritik bir hata meydana geldi: {ex.InnerException}");
}
}
}
- Loglama
- Yetki Kontrol Etme
- Hata İşleme
Kod:
public class PostManager:IPostService {
IPostRepository PostRepository;
ILoggerService LoggerService;
public PostService(IPostRepository postRepository,ILoggerService loggerService){
PostRepository = postRepository;
LoggerService = loggerService;
}
[LogAspect]
[ValidationAspect(typeof(PostValidator))]
public void Add(Post post){
PostRepository.Add(post);
}
}