Katmanlı Mimari Nedir?

Okan Çınar
BAU Yazılım ve Bilişim Kulübü
4 min read4 days ago

Merhaba Değerli Okuyucular,

Bu yazımda sizlere oldukça popüler olan ve bizlerin de adını sıkça duyduğumuz katmanlı mimariden bahsedeceğim.

Büyük ve karmaşık bir projede çalışan bir geliştiricinin tek amacı çalışan bir kod yazmak değildir. Yazılan kodun okunabilir (readability) ve bakım yapılabilir (maintainability) olması da oldukça önemlidir. İşte böyle bir noktada katmanlı mimariden yararlanmak oldukça faydalı olacaktır.

Katmanlı mimari, büyük ve karmaşık yazılım projelerini daha iyi organize etmek ve yönetmek için kullanılan bir mimari desenidir. Bu mimari yaklaşıma göre, uygulama farklı katmanlara bölünür ve her katmana belirli sorumluluklar yüklenir.

Katmanlı mimaride üç temel katman bulunur;

  1. Sunum Katmanı (Presentation Layer)
  2. İş Katmanı (Business Layer)
  3. Veri Katmanı (Data Access Layer)

Bu 3 temel katman hemen hemen her projede bulunur fakat projenin ihtiyacına ve büyüklüğüne göre bu katmanların sayısı artabilir.

Presentation Layer (Sunum Katmanı)

Kullanıcıyla etkileşimin kurulduğu katmandır. Bu katmanda iş mantığı ile ilgili herhangi bir işlem yapılmaz.

Sunum katmanının temel görevleri şunlardır:

  • Kullanıcıdan veri almak ve bu verileri iş mantığı katmanına iletmek.
  • İş mantığı katmanından gelen sonuçları kullanıcıya göstermek.

Bu katmanda genellikle HTML, CSS, JavaScript, React, Angular, MVC gibi teknolojiler kullanılır. Web, masaüstü veya mobil uygulamalar bu katmanda yer alır.

Sunum katmanının doğrudan veriye erişimi yoktur ve iş mantığı ile ilgilenmez.

Business Layer (İş Katmanı)

Business Layer; İş Katmanı, İş Mantığı Katmanı, Mantık Katmanı veya Orta Katman olarak da adlandırılabilir. Katmanlı mimaride Business Layer, uygulamanın temel işlevselliğini, iş kurallarını yöneten ve ilgili işletme mantığını kapsayan katmandır. Business Layer, sunum katmanından gelen talepleri alır, bu taleplere göre veriyle ilgili işlemleri yapar ve sonuçları kullanıcıya veya veri erişim katmanına iletilmek üzere hazır hale getirir.

Bu katmanda genellikle C#, Java, Python, Node.js gibi sunucu tarafı programlama dilleri ve Framework’ler kullanılır.

Data Access Layer (Veri Erişim Katmanı)

Veri erişim katmanı, veritabanına erişim ve veri işlemleri ile ilgilenir. Bu katmanın temel görevleri şunlardır:

  • Veritabanına veri eklemek (create), okumak (read), güncellemek (update) ve silmek (delete). (CRUD Operations)
  • Veri ile ilgili işlemleri soyutlayarak iş mantığı katmanına sunmak.

Bu katmanda genellikle Entity Framework, Hibernate, Dapper gibi ORM (Object-Relational Mapping) araçları kullanılır.

Peki Katmanlar Arası İletişim Nasıl Gerçekleşir?

Katmanlı mimaride, her katman yalnızca kendisinin bir alt katmanıyla iletişim kurar. Örneğin, sunum katmanı doğrudan veri erişim katmanına erişmez; bunun yerine, iş mantığı katmanıyla iletişim kurması gerekir. Böylece iş mantığı katmanı da veri erişim katmanıyla iletişim kuracağından aralarındaki akış tamamlanabilir. Bu şekilde katmanlar arasındaki bağımlılıklar minimize edilmiş olur ve her katman daha bağımsız ve test edilebilir bir hale gelir.

Yukarıda ihtiyacımıza göre katmanlarımızın sayısını artırarak uygulamamızı daha modüler, sağlam ve ölçeklenebilir bir yapı haline getirebileceğimizden bahsetmiştim. Gelin aşağıda açıklayacağım ekstra katmanlar ve bir örnek ile bunu daha iyi kavrayalım.

Yeni eklenecek katmanlarımız:

Caching Layer (Önbellekleme Katmanı): Caching katmanı, sık kullanılan verilerin bellekte saklanarak hızlı bir şekilde erişilmesini sağlar. Bu yöntem, veritabanı ve ağ üzerindeki yükü azaltır ayrıca uygulamamızın yanıt verme süresini de kısaltır.

  • In-Memory Caching (Bellek İçi Önbellekleme): Verilerin uygulama sunucusunun belleğinde saklanmasıdır. Bu yöntem daha çok, küçük ve sık kullanılan veriler için daha uygundur. .NET için MemoryCache ve Java için de Ehcache kullanılabilir.
  • Distributed Caching (Dağıtık Önbellekleme): Verilerin birden fazla sunucu arasında dağıtılarak saklanmasıdır. Bu yöntem, büyük ölçekli ve çok kullanıcılı uygulamalar için daha uygundur. Dağıtık Önbellekleme için Redis ve Memcached gibi teknolojiler kullanılabilir.

Entities Layer (Varlıklar Katmanı): Entities katmanı, uygulamanın iş mantığını temsil eden nesneleri veya veri modellerini içerir. Bu katman, uygulamanın temel veri yapısını tanımlar ve genellikle sınıflar veya nesneler şeklinde ifade edilir.

Entities ve Data Access Katmanlarını Ayırma İhtiyacı

Katmanlı mimaride, her katmanın belirli bir sorumluluğu var demiştik. Entities katmanı, veri modellerini tanımlama işinden sorumludur. Veri erişim katmanı ise veri tabanı işlemlerini gerçekleştirme işinden sorumludur. Entities katmanı ve veri erişim katmanlarını birbirinden ayrı tutmak, yazılım mimarimizde sorumlulukların ayrılmasını, kodun daha kolay anlaşılmasını ve bakımının yapılmasını sağlar. Bu, kodun tekrar kullanılabilirliğini artırır, test edilebilirliğini kolaylaştırır ve katmanlar arasındaki bağımlılıkları azaltır. Bu nedenle, Entities katmanını bağımsız bir katman olarak tutmak biz geliştiriciler için genellikle iyi bir uygulamadır.

Bu doğrultuda yukarıda belirttiğimiz katmanların örnek bir e-ticaret uygulamasında nasıl çalışacaklarına bir bakalım;

  1. İlk olarak kullanıcımız, bir ürün arama işlemini başlatır.

2. Kullanıcı arayüzünden gelen ürün arama isteği, iş mantığı katmanına iletilir.

3. İş mantığı katmanı, öncelikle ürün verilerinin önbellekte olup olmadığını kontrol eder ve daha sonrasında eğer önbellekte varsa, verileri önbellekten alır.

4. Eğer ürün verileri önbellekte yoksa ve harici bir API’den çekilecekse, bu noktada API iletişim katmanı devreye girer ve gerekli API çağrılarını yapar.

5. Önbellekte yoksa ve harici API da kullanılmıyorsa, iş mantığı katmanı veri erişim katmanına istek gönderir.

6. Veri erişim katmanı, Entities katmanını kullanarak veritabanı işlemlerini gerçekleştirir ve veri modelleri ile çalışır.

7. Veri erişim katmanı, veritabanından ürün verilerini alır.

8. Veriler alındıktan sonra kullanıcı arayüzüne tam tersi yol ile iletilir ve kullanıcıya gösterilir.

Katmanlı Mimarinin Avantajları

  • Katmanlar birbirinden bağımsız olarak geliştirilebilir, test edilebilir ve yönetilebilir. Bu da bizlere daha modüler bir yapı sağlar.
  • İş mantığını ve veri erişim katmanlarını, birden fazla kullanıcı arayüzü (örneğin, web ve mobil uygulamalar) yeniden kullanabilir.
  • Hataları ve değişiklikleri, ilgili katman içinde kolayca izole edebilir ve düzeltilebiliriz.

Katmanlı Mimarinin Dezavantajları

  • Büyük ve karmaşık projelerde, katmanlar arasındaki bağımlılıkları ve ilişkileri yönetmek zordur.
  • Katmanlı mimariyi doğru şekilde kurmak en başında bize maliyet bakımından zorluk çıkaracaktır.

Bu yazımızın sonuna geldik, umarım faydalı olabilmiştir.

Görüşmek üzere..

--

--

Okan Çınar
BAU Yazılım ve Bilişim Kulübü

Software Engineer Back End (Mainly Java and .Net Core) Writes about tech, software and many more.