![]()
Interface(Arayüzlerin) Ayrımı Prensibi denen bu prensipte Interface’ lerin mümkün olduğu kadar birbirlerinden ayrıştırılması gerektiğini belirtir. interface leri oluştururken barındırdığı üyeleri ortak olacak şekilde parçalayıp , bu üyeleri farklı interface ‘ler altında toplayıp, ayrı ayrı interface’ ler oluşturmak sağlıklı olacaktır. Çok genel bir Interface tanımlamak yerine birkaç özel küçük Interface tanımlamak daha iyidir. Aynı zamanda tek sorumluluk ilkesine de uygundur ve hiçbir nesne kullanmadığı alanlara bağımlı olmaya zorlanmamalıdır. İstemci sadece ihtiyaç duyduğu methodlara erişim sağlamalıdır.
Şimdi kötü ve iyi örnekler üzerinde bakalım.
|
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 |
public interface IBaseWorker { string ID { get; set; } string Name { get; set; } string Email { get; set; } } public interface IFullTimeWorkerSalary :IBaseWorker { public decimal HourlyRate { get; set; } public decimal HoursInMonth { get; set; } decimal MonthlySalary { get; set; } decimal Status { get; set; } decimal CalculateNetSalary(); decimal CalaculateWorkedSalary(); } public class Employee : IFullTimeWorkerSalary { public string ID { get; set; } public string Name { get; set; } public string Email { get; set; } public decimal MonthlySalary { get; set; } public decimal HourlyRate { get; set; } public decimal HoursInMonth { get; set; } public decimal Status { get; set; } public decimal CalculateNetSalary() => MonthlySalary + Status; } |
Burada tüm çalışanlar için kişisel bilgiler ve maaş hesabı yapıldı fakat FullTime çalışan hesabı yapılırken Saatlik çalışnların gereksiz bilgileri yada ssatlik çalışanlar için tutulmuş oldu. Hem bu gelişime kapalı ve sürdürülebilir olmayacaktır.
İyi örneğe bakalım
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
public interface IBaseWorker { string ID { get; set; } string Name { get; set; } string Email { get; set; } } public interface IFullTimeWorkerSalary: IBaseWorker { decimal MonthlySalary { get; set; } decimal Status { get; set; } decimal CalculateNetSalary(); } public interface IContractWorkerSalary: IBaseWorker { decimal HourlyRate { get; set; } decimal HoursInMonth { get; set; } decimal CalaculateWorkedSalary(); } |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
public class FullTimeEmployee: IFullTimeWorkerSalary { public string ID { get; set; } public string Name { get; set; } public string Email { get; set; } public decimal MonthlySalary { get; set; } public decimal Status { get; set; } public decimal CalculateNetSalary() => MonthlySalary + Status; } public class ContractEmployee: IContractWorkerSalary { public string ID { get; set; } public string Name { get; set; } public string Email { get; set; } public decimal HourlyRate { get; set; } public decimal HoursInMonth { get; set; } public decimal CalaculateWorkedSalary() => HourlyRate * HoursInMonth; } |
Burada da görüldiği gibi saatlik çalışanların durumu ve maaş hesaplaması tam zamanlı çalışnlar için bilgiler ve hesaplamalar ayrılmış oldu. Başka türlü (stajyer gibi) bir çalışan geldiğinde de yeni bir Interface tanımlayıp ona göre işlem yapılması sağlıklı bir yöntem olacaktır.
Kaynak kodlarına adresten ulaşabilirsiniz.
sağlıcakla kalın…








Bir yanıt yazın