Temiz mimari hakkında ne söyleyebilirsiniz?
sobes.tech yapay zeka
AI'dan gelen yanıt
Temiz Mimari (Clean Architecture), Robert Martin ("Amca Bob") tarafından popüler hale getirilen, kodun organizasyonu için bir dizi ilkedir ve esnek, test edilebilir ve kolay bakım yapılabilir bir sistem oluşturmayı amaçlar.
Ana fikirler:
- Katmanlara Ayrım: Kod, iç katmanlarda iş mantığını içeren ve dış katmanlarda uygulama detaylarını (UI, veritabanları, dış API'ler) içeren koncentik dairelere bölünür.
- İç katmanlara bağımlılık: Dış katmanlar iç katmanlara bağımlıdır, ancak tam tersi değildir. Bu, bağımlılıkların tersine çevrilmesi ilkesiyle sağlanır.
- Kapsülleme: Her katman, uygulama detaylarını dış katmanlardan gizler.
- Test edilebilirlik: Merkezi katmanlarda bulunan iş mantığı, dış detaylara bağlı değildir, bu da onu izolasyon içinde kolayca test edilebilir kılar.
- Framework'lerden bağımsızlık: İş kuralları belirli framework'lere, UI'ye veya veritabanlarına bağlı değildir.
Katmanlar (örnek):
- Varlıklar: İş nesneleri ve kuralları içerir (örneğin, kullanıcıyla ilgili iş mantığı içeren
Usersınıfı). - Kullanım Durumları (Interactors): Uygulamaya özgü iş mantığını içerir (örneğin,
GetUserUseCase). Varlıklar ve Gateway Arayüzleri arasındaki etkileşimi düzenler. - Arayüz Adaptörleri: Dış kaynaklardan gelen verileri, Kullanım Durumları ve Varlıklar için anlaşılır formata dönüştürür (örneğin, UI için Presenter'lar, veritabanları için Gateway Uygulamaları).
- Framework'ler ve Sürücüler: Framework'leri içeren dış katman (UI, veritabanları, web servisleri).
Bağımlılıkların Tersine Çevirme ilkesi önemli bir rol oynar. İç katmanlar arayüzleri (Gateway Arayüzleri) tanımlar, dış katmanlar ise bu arayüzleri uygular. Bu, aşağıdaki diyagramda gösterilmiştir:
+-----------------+ +-------------------+ +--------------------+ +------------------------+
| Frameworks & |----->| Interface |<-----| Use Cases |<-----| Entities |
| Sürücüler (UI, DB)| | Adaptörler | | (Interactors) | | (İş Kuralları) |
+-----------------+ | (Presenterlar, | | | +------------------------+
| Gateway Uygulamaları| | |
+-------------------+ +--------------------+
Oklar, bağımlılıkların yönünü gösterir. Hepsi içe doğru, Entities katmanına yöneliktir.
Android geliştirmede, Temiz Mimari genellikle şu bileşenler kullanılarak uygulanır:
- UI Katmanı (Sunum): Activity, Fragment, ViewModel, UI Mantığı. Domain Katmanına bağımlıdır.
- Domain Katmanı (Kullanım Durumları): Uygulamanın iş mantığı. Diğer katmanlara bağlı değildir.
- Veri Katmanı: Veri kaynakları (ağlar, veritabanları), depolar. Domain Katmanında tanımlanan arayüzleri uygular.
Örnek yapı:
root
├── app
│ ├── src
│ │ └── main
│ │ └── java
│ │ └── com
│ │ └── örnek
│ │ └── benimuygulamam
│ │ ├── sunum // UI Katmanı (ViewModel, Activity, Fragment)
│ │ │ ├── ui
│ │ │ └── viewmodel
│ │ ├── domain // Domain Katmanı (Kullanım Durumları, Varlıklar, Arayüzler)
│ │ │ ├── varlık
│ │ │ ├── repository // Domain Arayüzleri
│ │ │ └── usecase
│ │ └── veri // Veri Katmanı (Depolar, Veri Kaynakları, Mapperlar)
│ │ ├── yerel // Yerel Veri Kaynağı (Room)
│ │ ├── uzak // Uzak Veri Kaynağı (Retrofit)
│ │ ├── mapper
│ │ └── repository // Veri Uygulamaları, Domain Arayüzlerini genişletir
│ └── build.gradle
└── build.gradle
Avantajlar:
- Test edilebilirlik: İş mantığı izole edilmiştir ve kolayca test edilir.
- Esneklik: Dış bağımlılıkları değiştirmek kolaydır (örneğin, Room'dan Realm'e geçmek).
- Bakım Kolaylığı: Sorumlulukların net ayrımı, kodun anlaşılmasını ve bakımını kolaylaştırır.
- Teknolojiden bağımsızlık: İş mantığı, belirli Android framework'lerine veya kütüphanelerine bağlı değildir.
Dezavantajlar:
- Karmaşıklık: Başlangıçta anlaması ve uygulaması daha zor olabilir, özellikle küçük projelerde.
- Daha fazla kod: Daha fazla sınıf ve arayüz yazmayı gerektirir, daha basit mimarilere göre.
Genel olarak, Temiz Mimari, ölçeklenebilir ve bakımı kolay Android uygulamaları oluşturmak için güçlü bir yaklaşımdır, özellikle orta ve büyük projelerde. İş mantığı etrafında geliştirmeyi teşvik eder, teknik detaylar değil.