Gelişim Üniversitesi .Net Core Üzerinde Refactoring, OOP
Selamlar,
27 Şubat Perşembe günü Gelişim Üniversitesinde, OOP ve Design Patternler ile Temiz kod ve daha anlaşılabilir kod konularına değindik. Temiz kod yazmamanın, ilerde nasıl büyük teknik borçlara sebebiyet verebileceğini, senaryo gereği yeni ihtiyaçlar doğurarak anlamaya çalıştık. Temiz kodun yazılabilmesi için, öncelikle sürece tam hakim olmak gerekir. İhtiyaçların ve önceliklerin belirlenmesi, sınırların çizilmesine ve böylece oyunun kurallarının belirli bir kalıba oturtulmasına olanak sağlar. Bu da bizi çözüme ya da çözümler bileşkesine bir adım daha yaklaştırır.
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 |
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)); } } |
Yukarıda görüldüğü gibi her şeyi parçalara ayırmak, sonra ihtiyaca göre birleştirip kullanmak, kodlamada büyük bir esnekliğe kapı açacaktır. Kodun yapacağı işleri, yine yazılan küçük kod parçalarına yaptırmak, çalışma anında büyük bir değişikliğe gidilmeden kodun kendi kendine müdahale etmesini sağlanacaktır. Hem ilerleyen süreç, bunu oluşturan kod parçalarının değişmesi ile hızlıca yeni düzene adapte olacak, hem de hali hazırda yazılmış kodlar tek bir yerden değiştirilerek, zaman kaybından ve kod tekrarından kurtulunacaktır.
Bir kodun işleyişini öncelikle düz bir şekilde kodlayıp, daha sonra Refactor edilerek baştan yazılması, ilk etapta zaman kaybı gibi düşünülse de, aşağıdaki kodda da görüldüğü gibi Refactor işleminden sonra yapılacak işlerin bir genelleme altına alınması, yeni bir koşulun gelmesi durumunda, nerde ise hiç bir kod değişikliğine gidilmeden, yeni durumun sisteme adapte edilmesini sağlayacaktır.
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 |
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); } |
Seminer boyunca anlatılmak istenen esas konu, kodun yazılmadan önce hazırlık aşamasında ve ileriye dönük planlamada ayrılan sürenin, gelecekte projeye yeni eklenecek bir özellik veya değişiklik için haracanacak zaman ve emekle ters orantılı olduğudur. Kod okunaklığı, sadelik ve işlerin küçük parçalara ayrılması sadece anlaşılabilirliği değil, aynı zamanda test, hatanın tespiti, bugfix ve refactoring gibi daha birçok konuda fayda sağlayacaktır.
Geldik bir seminerin daha sonuna, yeni bir seminerde görüşmek üzere hepinize hoşçakalın. Katılımcıların yoğun ilgisi, sunumdan sonraki bir birinden güzel soruları, ve parlak fikirlerinden dolayı hepsini teker teker kutlar, teşekkürü bir borç bilirim.
bora hocam selamlar. programlama konusunda yeniyim ve xamarin’de ilerlemeye çalışıyorum. işin sonunda şuanda hepimizin kullandığı popüler e-ticaret sitelerinde olduğu gibi hem web tarayıcılarında hemde mobil uygulamalarda birbirlerine paralel olarak çalışan bi sistem yapmak istiyorum. bu olayı halledebilmem için öğrenmemi araştırmamı gereken konuları benimle paylaşabilir misiniz?
cod4 ten cevap vermeye vakit kalmıyo sanırım