DotNetKonf 2019 .Net Core Üzerinde Design Patternleri Kullanarak Refactor Etme
Selamlar,
2 Kasım Cumartesi günü İstanbul Nişantaşı Üniversitesinde DotNetKonf Summit etkinliğinde, .Net Core üzerinde design patternleri kullanarak var olan kodları refactor ettik. Amaç, anlaşılır, kolay test edilebilir ve genişletilebilir kodlara ulaşmaktı. Bu amaçla önceden kodlanmış 5 durumu sunumlar üzerinden inceledik. İlk 3 durum, 4. durumun refactor edilmesi için kullanılmıştır. Son durum ile 4. durum daha da verimli bir hale getirilmesi sağlanmıştır.
- Chain of Resposibility
- Interface Segregation
- Strategy Design pattern
- Interpreter Design Pattern
- Prototype Design Pattern
Chain of Resposibility: Örneğin bu durumda bir işlemin başarılı olması durumunda, kendinden sonra çağrılacak method generic olarak tanımlanmış ve Reflection ile tetiklenmiştir. Aynı şekilde hata olması durumunda, kendinden önceki method duruma göre çağrılıp, tetiklenmiştir.
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 |
interface IProcess { string nextMethodName { get; set; } string backMethodName { get; set; } void NextMethod(); void BackMethod(); } public class Process : IProcess { public string nextMethodName { get; set; } public string backMethodName { get; set; } public Process(string _nextMethodName, string _backMethodName) { this.nextMethodName = _nextMethodName; this.backMethodName = _backMethodName; } public void NextMethod() { Type thisType = this.GetType(); MethodInfo theMethod = thisType.GetMethod(this.nextMethodName); theMethod.Invoke(this, null); } public void BackMethod() { Type thisType = this.GetType(); MethodInfo theMethod = thisType.GetMethod(this.backMethodName); theMethod.Invoke(this, null); } public void ProcessCalculation() { try { /* . . ....ToDoSomething() */ NextMethod(); } catch { BackMethod(); } } |
Seminerin en önemli kısmı, Refactor işlemi sırasında karşıdaki kişi ile olan iletişimin her şeyden daha önemli olduğunu örnekler ile gösteren kısmıdır. Aşağıdaki örnekde olduğu gibi, söylenmesi ve söylenmemesi gereken sözler, örnekler ile anlatılmaya çalışılmıştır.
İlk 3 örneğin ardından, 4. ve esas örnekde yüzlerce kişinin pür dikkat konuyu dinlemesi, gerçekten takdiri şayandı. Yapılan 3 yorumun kadın mı yoksa erkek mi tarafından yapıldığı, belli analiz kuralları ile anlaşılmaya çalışılmıştır.
Interpreter & Strategy & Prototype Design Pattern: Aşağıda görüldüğü gibi her şey mümkün olduğunca küçük parçalara ayrılmaktadır. Sonra hepsi birleşip, esas sorunu çözen bir yapının ana parçaları olmaktadır. Böylece kod, hem daha çok okunabilmekte hem de genişletilmeye açık olabilmektedir.
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 |
public interface Expression { bool Interpret(string content); } public class CheckExpression : Expression { private string word; public CheckExpression(string _word) { this.word = _word; } public bool Interpret(string content) { return content.ToLower().Contains(word.ToLower()); } } public class OrExpression : Expression { private Expression exp1; private Expression exp2; public OrExpression(Expression _exp1, Expression _exp2) { this.exp1 = _exp1; this.exp2 = _exp2; } public bool Interpret(string content) { return (exp1.Interpret(content) || exp2.Interpret(content)); } } public class AndExpression : Expression { private Expression exp1; private Expression exp2; public AndExpression(Expression _exp1, Expression _exp2) { this.exp1 = _exp1; this.exp2 = _exp2; } public bool Interpret(string content) { return (exp1.Interpret(content) && exp2.Interpret(content)); } } |
Geldik bir seminerin daha sonuna, yeni bir seminerde görüşmek üzere hepinize hoşçakalın. Öncelikle bana bu fırsatı verdikleri için Ugur Umutluoglu olmak üzere tüm DevNot ekibine teşekkür ederim. Katılımcıların yoğun ilgisi, sunumdan sonraki akıl dolu soruları ve parlak fikirlerinden dolayı hepsini teker teker kutlar, teşekkürü bir borç bilirim.
Source Code: http://www.borakasmer.com/projects/Devnot_CodeReview_Light.pptx
Son Yorumlar