SOLID Prensipleri Uygulamak: Refactoring Rehberi
SOLID, yazılımın bakımını ve genişletilmesini kolay kılan beş tasarım ilkesidir. Bir e-ticaret sisteminde ödeme işlemini ele alarak, her prensip nasıl uygulanır görelim.
İlk sorun: Bir Payment sınıfı, tüm ödeme yöntemlerini içeriyor ve her yeni yöntem eklendiğinde değişiyor. Bu, Single Responsibility (Tek Sorumluluk) ilkesini ihlal eder.
1// Kötü tasarım2public class Payment3{4public void ProcessCreditCard(string cardNumber, decimal amount)5{6// Kredi kartı işlemi7}89public void ProcessPayPal(string email, decimal amount)10{11// PayPal işlemi12}1314public void ProcessBitcoin(string wallet, decimal amount)15{16// Bitcoin işlemi17}18}Bu sınıf üç farklı sorumluluk taşıyor. Refactor edelim. Önce bir arayüz tanımlayıp (Dependency Inversion), her ödeme yöntemi kendi sınıfında yaşasın.
1// İyi tasarım2public interface IPaymentProcessor3{4void Process(decimal amount);5}67public class CreditCardProcessor: IPaymentProcessor8{9private string _cardNumber;1011public CreditCardProcessor(string cardNumber)12{13_cardNumber = cardNumber;14}1516public void Process(decimal amount)17{18Console.WriteLine($"Kredi kartı ile {amount} TL işlendi: {_cardNumber}");19}20}2122public class PayPalProcessor: IPaymentProcessor23{24private string _email;2526public PayPalProcessor(string email)27{28_email = email;29}3031public void Process(decimal amount)32{33Console.WriteLine($"PayPal ile {amount} TL işlendi: {_email}");34}35}3637public class Order38{39private IPaymentProcessor _processor;4041public Order(IPaymentProcessor processor)42{43_processor = processor;44}4546public void Checkout(decimal amount)47{48_processor.Process(amount);49}50}5152// Kullanım53var creditCard = new CreditCardProcessor("1234-5678-9012-3456");54var order = new Order(creditCard);55order.Checkout(150);5657var paypal = new PayPalProcessor("user@example.com");58var order2 = new Order(paypal);59order2.Checkout(200);Beklenen çıktı:
1Kredi kartı ile 150 TL işlendi: 1234-5678-9012-34562PayPal ile 200 TL işlendi: user@example.comBu refactoring üç prensibi birden uyguladı. Her sınıf tek bir sorumluluk taşıyor (S). Yeni bir ödeme yöntemi eklemek çok kolay, sadece IPaymentProcessor'ı implemente et ve Order'ı değiştirme (O - Open/Closed). Sınıflar arayüze bağlı, somut uygulamaya değil (D - Dependency Inversion).
Sık yapılan hata: Arayüzü çok büyük yapmak. Her işlem için ayrı arayüz düşün. Bir başka hata da, sınıfları hemen test etmeyi unutmak, SOLID tasarımı unit testleri çok kolay hale getirir.
0 yorum