![]()
Bağımlılık prensibi dediğimiz bu prensipte yüksek seviye sınıfların, düşük seviye sınıflara direkt olarak bağımlı olmaması gerektiğini belirtir.
Yani yüksek seviyeli modüller, düşük seviyeli modüllerden hiçbir şeyi almamalı her ikisi de soyutlamalara (Ineface , abstract) bağlı olmalıdır.
Daha basit bir ifadeyle soyutlamalar ayrıntılara bağlı olmamalıdır; ayrıntılar soyutlamalara bağlı olmalıdır.
İyi ve kötü örnek üzerinden gidelim.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
public enum EnumMessage { Email = 0, Sms = 1 } public void Send(string message) { //… send e-mail Console.WriteLine(“E-mail has been sent”); } public void Send(string message) { //… send sms Console.WriteLine(“Sms has been sent”); } public class Notification { private Email _email; private Sms _sms; public Notification() { Email email = new Email(); Sms sms = new Sms(); } public void EmailNotify(string message) { _email.Send(message); } public void SmsNotify(string message) { _sms.Send(message); } } public class NotifyType { public void NotifyMessage(string message, EnumMessage type) { switch (type) { case EnumMessage.Email: new Notification().EmailNotify(message); break; case EnumMessage.Sms: new Notification().SmsNotify(message); break; default: break; } } } |
Bu kötü tasarımda her iletişim modülü ayrı ayrı alınarak işlem yapılmış. Burada gereksiz bir sürü kod yığılması ve karmaşası olacaktır. Şimdi bu gönderme işini bir üst modül olan Interface bağımlı hale getirelim.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
public enum EnumMessage { Email = 0, Sms = 1 } public interface IMessageType { void Send(string message); } public class Email : IMessageType { public void Send(string message) { //… send e-mail Console.WriteLine(“E-mail has been sent”); } } public class Sms : IMessageType { public void Send(string message) { //… send sms Console.WriteLine(“Sms has been sent”); } } public class Notification { private IMessageType _messageType; public Notification(IMessageType messageType) { _messageType = messageType; } public void SendNotification(string message) { _messageType.Send(message); } } internal class NotifyType { public void NotifyMessage(string message, EnumMessage type) { Notification notification = null; if (TryGetNotificationStrategy(type, ref notification)) { notification.SendNotification(message); } notification.SendNotification(message); } private bool TryGetNotificationStrategy(EnumMessage type, ref Notification notification) { switch (type) { case EnumMessage.Email: notification = new Notification(new Email()); break; case EnumMessage.Sms: notification = new Notification(new Sms()); break; default: notification = new Notification(new Email()); break; } return notification != null; } } |
burada görüldüğü gibi bildirim gönderme işini Interface tanımlayarak her bir tipe iplemente ederek bağımlılık ilkesini kullanmış olduk.
=> Böylelikle yapı değiştirilmeden yeni bir iletişim birimi entegre edilebilir
=> Böylece anlaşılması bakımı ve geliştirilmesi kolaylaştıırlmış oldu
Kaynak kodlarına adresten ulaşabilirsiniz.
sağlıcakla kalın…








Brov için bir yanıt yazın Yanıtı iptal et