Herkese merhaba. Bu yazıda .NET web uygulamaları dünyasında çok kullanılan bir yapıdan bahsedeceğim. Middleware; web uygulamamıza gelen HTTP request ve response’ları işleyen ve belli kurallara göre yönlendirme veya sonlandırma yapan bir ara katmandır. Her isteği modüler bir şekilde işleyip yönetmemize olanak tanır. Middleware, yazılım dünyasında Aspect Oriented Programming (AOP) olarak bilinen tasarıma somut bir örnektir. AOP’nin temel amacı olan ‘loglama, güvenlik veya önbelleğe alma gibi ortak işleri tek bir merkezden yönetme’ fikrini, bizim için HTTP istek ve cevap mekanizması üzerinde hayata geçirir. Peki bu sistem tam olarak nasıl çalışır?
SOLID yazı dizisinin sonuncusu olan Dependency Inversion yazısından merhabalar! Bu yazıda sıklıkla Dependency Injection (DI) ile karıştırılan Dependency Inversion (DIP) prensibini inceleyeceğiz. Temelde “soyutlamaya bağlı olma” felsefesine dayanan bu prensip, sınıflar arasındaki sıkı bağımlılıkları (tight coupling) kırmayı hedefler. Yüksek bağımlılık; kodun bir parçasını diğerlerinden izole edememek ve değişime karşı direnç gösteremeyen bir yapı kurmak demektir.
Herkese merhaba, SOLID yazılarıma dördüncü eleman Interface Segregation Prensibi ile devam ediyorum. Interface Segregation Principle (ISP), ‘bir sınıf kullanmadığı metotlara bağımlı olmaya zorlanmamalıdır’ der. Özetle; tek bir genel amaçlı interface (arayüz) yerine, istemcinin sadece ihtiyacı olan metotlara ve özelliklere erişebileceği interface (arayüz)’lere bölünmesidir. Bu sayede kullandığımız yapıya esneklik, clean code ve low coupling (düşük bağımlılık) kazandırmış oluruz.
Herkese merhaba. Uzun bir aradan sonra SOLID ilkesinin üçüncü prensibi ile bu yazı dizisine devam ediyorum. Liskov Substitution prensibi özetle kodlarımızda herhangi bir değişiklik yapmaya gerek duyulmadan türetilen sınıfların yerine kullanabilmesini ele alır. Bu sayede codebase içerisinde sağlam bir inheritance yapısı oluşur. Yanlış soyutlamaların önüne geçildiği için geliştirme yapılırken kodun tahmin edilebilirliği artar. Ayrıca bir önceki yazımda bahsettiğim Open Closed ilkesinin de öncül şartıdır.
Herkese merhaba. Bir önceki yazımda SOLID prensiplerinden ve Single Responsibility ilkesinden bahsetmiştim. Bu yazıda ise Open Closed ilkesini inceleyeceğiz. Bu ilke, uygulamanın mevcut kodlarını değiştirmeden sistemin özelliklerinin genişletilmesini önerir. Bu sayede yeni bir özellik eklendiğinde var olan kodda değişiklik yapılmadığı için bug oluşma riskini de azaltmış oluruz. Bu yazıdaki örneklere github repomdan erişim sağlayabilirsiniz.
Herkese merhaba. Bu yazıda en temel yazılım geliştirme ilkesi olan SOLID’den bahsedeceğim. S.O.L.I.D aslında 5 temel ilkenin bir araya getirilerek kısaltılmış halidir. İlk olarak 2000 yılında Robert C. Martin tarafından “Design Principles and Design Pattern” makalesinde ortaya atılmıştır. Prensiplerin isim kısaltmasını ise Michael Feathers yapmıştır. Martin makalesinde başarılı bir yazılımın değişmesi ve gelişmesi gerektiğine değinmektedir. Ancak, yazılım değişip geliştikçe daha karmaşık bir hale gelir. Bu nedenle iyi tasarım ilkelerine sahip olmadan geliştirilen bir yazılım katı, kırılgan, hareketsiz ve zararlı bir hale dönüşür. Bu ilkeleri de sorunlu tasarım modelleriyle başa çıkmak için tasarlamıştır. SOLID yazılım ilkelerini kullanarak daha esnek ve geliştirmeye açık uygulamalar yazabiliriz. Bu yazıda kullandığım örnek kodlara buradaki github repomdan ulaşabilirsiniz.
Herkese merhaba. Bu yazıda gerçek zamanlı uygulama geliştirmek için kullanılan kütüphanelerden birisi olan SignalR kütüphanesini inceleyeceğiz. Gerçek zamanlı web, mobil uygulamaları artık günlük hayatımızın büyük bir kısmını oluşturmakta. Bu yüzden gerçek zamanlı uygulamaların teknoloji sektöründeki popülerliği hala devam ediyor. Anlık mesajlaşma, döviz takip, maç sonucu takip uygulamaları ve oyunlar gibi pek çok farklı sektörde kullanılan bu mekanizma aslında WebSocket ve RPC teknolojisine dayanmaktadır. Bu nedenle öncelikle WebSocket ve RPC yapılarına ardından da SignalR konusuna geçiş yapalım.
Herkese merhaba. Bu yazıda yazılım dünyasında oldukça sık kullanılan terimlerden biri olan Design Patterns (Tasarım Kalıpları) konusunu inceleyeceğiz. Design pattern’lar genellikle yazılım geliştirme sürecinde sıkça karşılaştığımız sorunlara karşı geliştirilen çözümlerdir. Pattern’ler kodun okunabilirliğini arttırır ve tekrar tekrar kullanılabilir olmasını sağlar. Pattern kavramı ilk olarak Cristopher Alexander’ın “A Pattern Language: Towns, Buildings, Construction” kitabında tanımlanmıştır. Kitap içerisinde kentsel çevreyi tasarlamak için kullanılan bir “dil” anlatılmaktadır. Kullanılan bu dilin birimlerini ise pattern’ler oluşturur. Bir binanın penceresinin yüksekliği, kaç kata sahip olması gerektiği gibi birim kurallar pattern’ler ile açıklanmaktadır. Daha sonra 1994’te Gang of Four (GoF) olarak bilinen 4 arkadaşın “Design Patterns – Elements of Reusable Object-Oriented Software” kitabı ile yazılım dünyası da pattern’ler ile tanışır.
Herkese merhaba. Bu yazıda kullanıcı etkileşimli programlama yaparken oldukça sık karşımıza çıkan delegate ve event konularını inceleyeceğiz. Bu ders için hazırladığım örnekleri Windows Forms projesi ile hazırladım. Daha öncesinde LINQ kullandıysanız Where() ya da Select() gibi metotların içerisine yazdığımız lambda expressionların da delegate yapısını kullandığını görmüşsünüzdür. İlerleyen yazılarda o konulara da değineceğiz. Daha fazla kafa karıştırmadan konuyu incelemeye başlayalım. Yazıda bulunan örneklere github hesabımdan ulaşabilirsiniz.
Herkese merhaba. Bu yazıda pek çok gelişmiş programlama dilinde bulunan bir konuyu, generic tipler konusunu ele alacağız. C# içerisinde kullanabileceğimiz tiplerin üzerine kendi oluşturduğumuz tipleri ekleyebileceğimizi nesne yönelimli programlamada görmüştük. Kendi oluşturduğuğumuz farklı tipleri ortak bir metot için kullanmak istiyorsak, metot parametresine object tipi verebiliriz. Bu yöntem kısa vadede sorunlarımızı çözüyor gibi görünse de uzun vadede bazı sıkıntılara yol açıyor. Yazıda bulunan örneklere github hesabımdan ulaşabilirsiniz.