Katmanlı Yazılım Mimarisi:

Daha düzenli kodlar:

Adile Güngör ♾️ 🌎
Women in Technology
3 min readAug 18, 2023

--

Merhaba, bugün daha önceden bilgi sahibi olduğum bir konuyu Kotlin için de araştırdım. Sizleri sıkmadan bunu açıklamak istedim. Bu yapı, büyük ve karmaşık projelerde özellikle önemlidir çünkü projenin düzenli kalmasını, bakımının kolaylaşmasını ve geliştirme sürecinin daha verimli olmasını sağlar.

Photo by Wilhelm Gunkel on Unsplash

Hayal edelim, bir oyun yapmak istediğini düşünelim. Bu oyunu yaparken, her şeyi düzenli ve düşünerek yapmamız gerekiyor. İşte bu yüzden, oyunumuzu farklı katmanlara bölmeliyiz. Böylece oyunumuz daha düzenli ve güzel olacak.

Veri Katmanı(Data Layer):

Birinci katmanımızı düşünelim: “Veri Katmanı.” Bu katmanda, oyunun içinde kullanacağımız tüm bilgileri saklayacağız. Mesela, oyunda kullanacağımız karakterlerin özellikleri, puanlar ve daha fazlası burada olacak. Bir çanta gibi düşünebilirsin. Eğer yeni bir karakter veya puan eklemek istersen, çantadan alıp koymak kolay olacak.

enum class OyunHareketi {
TAS, KAGIT, MAKAS
}

data class OyunSonucu(val oyuncuHareketi: OyunHareketi, val bilgisayarHareketi: OyunHareketi, val kazanan: String)

Mantık Katmanı (Logic Layer):

İkinci katmanımız “Mantık Katmanı.” Bu katmanda, oyunun nasıl çalışacağını düşüneceğiz. Oyunda neler olacağını ve ne zaman olacağını bu katmanda planlayacağız. Mesela, bir düşmanla karşılaştığında ne olacağını veya puan kazandığında ne olacağını burada belirleyeceğiz. Bir komut merkezi gibi düşünebilirsin. Oyunun kurallarını burada belirleyeceğiz.

class OyunMantigi {
fun kazananBelirle(oyuncuHareketi: OyunHareketi, bilgisayarHareketi: OyunHareketi): String {
return when {
oyuncuHareketi == bilgisayarHareketi -> "Berabere"
oyuncuHareketi == OyunHareketi.TAS && bilgisayarHareketi == OyunHareketi.MAKAS ||
oyuncuHareketi == OyunHareketi.KAGIT && bilgisayarHareketi == OyunHareketi.TAS ||
oyuncuHareketi == OyunHareketi.MAKAS && bilgisayarHareketi == OyunHareketi.KAGIT -> "Oyuncu"
else -> "Bilgisayar"
}
}
}

Sunum Katmanı(Presentation Layer):

Üçüncü ve son katmanımız “Sunum Katmanı.” Bu katmanda, oyuncuların oyunu oynayacağı kısmı düşüneceğiz. Oyunun görünen kısmı burada olacak. Oyuncunun dokunduğunda ne olacağını veya nasıl hareket edeceğini burada ayarlayacağız. Bir sahne veya tiyatro gibi düşünebilirsin. Oyuncular burada oyunu izleyecek ve kontrol edecek.

import java.util.*

fun main() {
val tarayici = Scanner(System.`in`)
val oyunMantigi = OyunMantigi()

println("Taş Kağıt Makas Oyununa Hoş Geldiniz!")

while (true) {
println("Hareketinizi girin (TAS, KAGIT, MAKAS) veya çıkmak için 'quit' yazın:")
val kullaniciGirdisi = tarayici.nextLine().toUpperCase()

if (kullaniciGirdisi == "QUIT") {
println("Oynadığınız için teşekkürler! Hoşça kalın!")
break
}

val oyuncuHareketi = when (kullaniciGirdisi) {
"TAS" -> OyunHareketi.TAS
"KAGIT" -> OyunHareketi.KAGIT
"MAKAS" -> OyunHareketi.MAKAS
else -> {
println("Geçersiz hareket. Lütfen TAS, KAGIT veya MAKAS girin.")
continue
}
}

val bilgisayarHareketi = OyunHareketi.values().random()

val sonuc = oyunMantigi.kazananBelirle(oyuncuHareketi, bilgisayarHareketi)
println("Bilgisayarın seçimi: $bilgisayarHareketi")
println("Siz $sonuc!\n")
}
}

Böylece, oyunumuzu bu üç katmana böldük. Ve düzenli bir yapı elde ettik.

Peki diyeceksiniz. Bize faydası ne bunun? İşte bu yapının faydaları:

1. Düzen ve Organizasyon: Katmanlı yapının en temel faydalarından biri, projenin düzenli ve organizeli bir şekilde yönetilmesini sağlamasıdır. Her katman belirli bir sorumluluğa sahip olduğundan, kodunuz daha düzenli ve anlaşılabilir olur.

2. Kodun Tekrar Kullanılabilirliği: Her katmanın ayrı ayrı çalışması, kodun daha kolay yeniden kullanılmasını sağlar. Örneğin, veritabanı erişimi veya iş mantığı fonksiyonları, farklı projelerde veya bileşenlerde kolayca kullanılabilir.

3. Bakım Kolaylığı: Katmanlı bir yapı, kodun bakımını ve güncellemelerini kolaylaştırır. Bir katmandaki değişiklikler, diğer katmanlara minimum etki eder. Bu da hataları tespit etmeyi, düzeltmeyi ve yeni özellikler eklemeyi daha kolay hale getirir.

4. Test Edilebilirlik: Her katmanın bağımsız çalışması, birim testlerin daha etkili bir şekilde yazılmasını sağlar. Her katmanı ayrı ayrı test edebilirsiniz, bu da hataları erken tespit etmeyi ve yazılımın güvenilirliğini artırmayı sağlar.

5. Ekip Çalışması: Büyük projelerde farklı ekibeler farklı katmanlar üzerinde çalışabilir. Bu, paralel geliştirme yapmayı kolaylaştırır. Örneğin, veritabanı ekibi veri katmanını geliştirirken, UI ekibi sunum katmanını geliştirebilir.

6. Ölçeklenebilirlik: Proje büyüdükçe veya yeni özellikler eklendikçe, katmanlı yapı ölçeklenmeyi kolaylaştırır. Yeni bileşenler veya katmanlar ekleyerek projenin karmaşıklığını yönetebilirsiniz.

7. Teknoloji Bağımsızlığı: Her katmanın belirli bir sorumluluğu olduğu için, farklı teknolojileri aynı projede kullanmak daha kolaydır. Örneğin, veri katmanı farklı bir veritabanı teknolojisi kullanırken, sunum katmanı farklı bir kullanıcı arayüzü teknolojisi kullanabilir.

8. Yeniden Tasarım Kolaylığı: İleriye dönük olarak projeyi yeniden tasarlamanız gerektiğinde, katmanlı yapının modüler yapısı sayesinde bu daha kolay olur. Her katmanı tek tek değiştirerek veya yeniden tasarlayarak projenizi geliştirebilirsiniz.

Benim diyeceklerim bu kadardı. Okuduğunuz için teşekkürler!

Dilerseniz GitHub ve Linkedin profilime göz atabilirsiniz. Ve sorularınızı iletebilirsiniz. Sevgiler.

--

--