Rule Engine Pattern Ne İşe Yarar? Nasıl Uygulanır?

Yasin Gündoğdu
DeFacto Teknoloji
Published in
3 min readFeb 28, 2022

Rule Engine Pattern, SOLID prensiplerini daha iyi uygulamamıza olanak sağlayan bir patterndir.

Bir çok business rules’a sahip projelerimizde if/else bloklarından sıyrılarak daha düzenli kod yazabilir ve işlerin karmaşıklığını daha basit hale getirebiliriz.

Bunun yanı sıra yeni kural setleri tanımlanacağı zaman yeni bir if bloğu tanımlayarak kodun karmaşıklığını arttırmak yerine sadece yeni bir class tanımlayarak daha okunaklı, sade, geliştirilebilir ve esnek bir yapı kurmuş oluyoruz.

Rule Engine iki bileşene sahiptir.

  1. Rule Engine - Kuralların ne sırada işletileceğini belirler.
  2. Business Rules - Conditionları tanımlar.

Nasıl Uygulanır?

Öncelikle IValidateRule interfaceini oluşturuyoruz.

Alınacak aksiyonlar ve hangi şartlarda çalışacağını belirlememiz için bu şekilde interfaceimizi oluşturmuş olduk.

Daha sonrasında RuleEngine classımızı oluşturalım.

Burada kurallarımızı nasıl işleteceğimizi belirlemiş olduk.

Daha sonra RuleEngine’e parametre geçeceğimiz RuleEngineService katmanımızı oluşturalım.

Sıra geldi artık kurallarımızı oluşturmaya. Ben burada yaptığım örnekte 2 adet kuralı ele alacağım. Bir iş yerinde çalışanların 18 yaşından büyük olması ve çalışanlar arasında erkek çalışan varsa askerlik hizmetini yapmış olması.

İlk kuralımız AgeLimitRule’u oluşturalım.

Bu kuralın her halükarda işletilmesini istediğim için ShouldRun kısmını direkt true olarak ayarladım.

İkinci kuralımız MilitaryRule.

Burada çalışanlar arasında erkek çalışan varsa bu kuralın devreye girmesini istediğim için ShouldRun kısmını özelleştirdim.

Kullanmak isteğimiz Businessta aşağıdaki gibi tanımlamamız yeterli olacaktır.

Rule Engine Pattern’i uygulamak işte bu kadar basit. Umarım siz de birçok kontrolden geçmesi için yazılmış olan if bloklarından bu şekilde kurtulursunuz.

Kodları github’a yükledim ve zamanla orayı da geliştirmeye devam edeceğim.

Referans: https://blog.devgenius.io/open-closed-principle-and-rule-engine-design-pattern-904c784501e5

Github:https://github.com/yasingundogdu/RuleEngineExample/tree/master/RuleEngineExample

Teşekkür: Bu yazının oluşmasında katkıları olan iş arkadaşlarım Kübra Surat ve Umut Yılmaz’a katkılarından dolayı teşekkür ederim.

--

--