Skip to content

MusicApp with Dagger Hilt ( Data-Domain- UI Layer )

Notifications You must be signed in to change notification settings

erkocali1/MusicApp

Repository files navigation

🎵 MusicApp

✓ MusicApp with Dagger Hilt ( Data-Domain- UI Layer )

Resim

🖊️Uygulamaya Ön Bakış

Bu Kotlin uygulaması, iTunes API'den alınan verilerle oluşturulmuştur. Bu Kotlin uygulamasında, veri işleme, iş mantığı ve kullanıcı arayüzü ile ilgili sorumlulukları ayrı katmanlara bölmek için Data, Domain ve UI katmanlarını kullanmayı tercih ettim. Verilerin API'den alınması ve işlenmesi için çeşitli framework'ler ve kütüphaneler kullandım. Ayrıca, kullanıcı deneyimini iyileştirmek için sayfalama (pagination) yöntemi de uygulanmıştır. Bu yaklaşım, uygulamanın verileri verimli bir şekilde yönetmesini ve büyük veri kümeleriyle başa çıkmasına yardımcı olması amaçlanmıştır.

Proje, birçok kütüphane ve bileşen kullanılarak geliştirilmiştir ve güncel teknolojilerle kullanıcı ve uygulama etkileşimini en hızlı şekilde sağlamayı hedeflemektedir. Tasarımı kullanıcı etkileşimini ön planda tutacak şekilde yapılmıştır. Uygulama, kullanıcı dostu bir arayüz ve etkileşimli özellikler sunmak için özenle geliştirilmiştir.

📝 Kullanılan Componentler

  • Pagination
  • Dagger Hilt
  • Data-Domain-UI Layer
  • Retrofit
  • Room
  • Navigation Component
  • Splash Screen API
  • Coroutine
  • Flow
  • LifeCycle
  • Shared Preferences
  • Coil

📱 Sayfalar

Resim

Resim

📝Pagination Nedir

Kotlin'de pagination, genellikle veri tabanlarından veya API çağrılarından dönen büyük miktardaki verileri daha küçük parçalara bölmek için kullanılır. Böylece kullanıcılar sayfa sayfa verilere erişebilir ve büyük veri kümesinin tamamını yüklemek zorunda kalmazlar. Kotlin'de pagination uygularken, veri kaynağından gelen verileri sayfa sayfa almak ve kullanıcıya göstermek için özel bir mantık kullanmanız gerekebilir. Genellikle sayfalama numarasına ve sayfa boyutuna göre bir sorgu veya filtreleme işlemi yaparak istenen veri parçasını alırsınız. Yaptığım bu uygulamamda da İtunes API kullanarak gelen verileri sayfa sayfa alarak büyük veri kümelerini yönetmeye çalıştım .Kaynak kodlarımı inceleyerek nasıl Pagination yapıldıgı konusu hakkında fikir sahibi olabilirsiniz ancak bir görsel ile genel mantığı anlatabilirim.

Resim

Kaynak:https://developer.android.com/topic/libraries/architecture/paging/v3-overview

📝Data-Domain-UI Layer

Data, Domain ve UI katmanları, yazılım mimarisi konseptlerinden biri olan MVVM (Model-View-ViewModel) ve Clean Architecture prensipleriyle ilişkilidir. Her bir katman, belirli bir sorumluluk ve iş mantığı için tasarlanmıştır.MVVM (Model-View-ViewModel) mimarisi, UI Layer (Activity, Fragment vb.) ve ViewModel arasında bir bağlantı noktası sağlar. ViewModel, kullanıcının arayüz ile etkileşimini yönetir, gerekli verileri Domain Layer'dan alır ve UI Layer'a sunar. ViewModel, UI durumunu takip eder ve verilerin doğru bir şekilde güncellenmesini sağlar.Clean Architecture prensipleri, bu katmanların bağımsız olmasını ve birbirlerine bağımlılık oluşturmamalarını sağlar. Bu sayede, her katmanı ayrı ayrı geliştirmek, test etmek ve değiştirmek kolaylaşır.Benim bu projede uyguladıgım bu pattern başta uygulamada bir takım bussines logic leri yönetmenizi gerektitiyor ancak daha sonrasında yeni bir şey ekleme ve test edilebilirlik açısından işimi çok kolaylaştırıyordu.Kısıca kullandığım yapılarla bunları ilişkilendiricek olursam:

Data Katmanı:

  • Dagger Hilt: Bağımlılıkları yönetmek ve enjeksiyon yapısı sağlamak için data katmanında kullanılabilir.
  • Retrofit: Veri API'si ile iletişim kurmak ve veri alışverişi yapmak için data katmanında kullanılabilir.
  • Room: Veritabanı işlemlerini yönetmek, verileri saklamak ve erişmek için data katmanında kullanılabilir.
  • Coroutine: Asenkron işlemleri yönetmek ve verileri işlemek için data katmanında kullanılabilir.
  • Flow: Veri akışını yönetmek ve reaktif programlama yapmak için data katmanında kullanılabilir.
  • Shared Preferences: Küçük verileri saklamak ve yönetmek için data katmanında kullanılabilir.

Domain Katmanı:

  • Pagination: Veri akışını yönetmek, sayfalama işlemlerini gerçekleştirmek ve verilerin etkili bir şekilde yönetilmesini sağlamak için domain katmanında kullanılabilir.

UI Katmanı:

  • Navigation Component: Uygulama içinde gezinme ve sayfa yönlendirmeleri için UI katmanında kullanılabilir.
  • Splash Screen API: Uygulama başlangıcında bir açılış ekranı oluşturmak ve kullanıcı deneyimini iyileştirmek için UI katmanında kullanılabilir.
  • Coroutine: Asenkron işlemleri yönetmek, iş parçacığı yönetimini iyileştirmek ve UI etkinliklerini engellemeden verileri işlemek için UI katmanında kullanılabilir.
  • LifeCycle: Uygulamanın yaşam döngüsünü izlemek ve uygun aksiyonlar almak için UI katmanında kullanılabilir.
  • Coil: Resim yüklemeyi ve görüntüleri işlemeyi kolaylaştırmak için UI katmanında kullanılabilir.

Resim

Kaynak:https://developer.android.com/topic/architecture

MusicApp.ItunesSearchRepository.kt.MusicApp.app.main.2023-07-13.13-58-56.mp4

📝: Dependency

dependencies {
    // Hilt
    implementation("com.google.dagger:hilt-android:2.44")
    kapt("com.google.dagger:hilt-android-compiler:2.44")
    implementation("androidx.hilt:hilt-navigation-compose:1.0.0")

    // Retrofit
    implementation("com.squareup.retrofit2:retrofit:2.9.0")
    implementation("com.squareup.retrofit2:converter-gson:2.9.0")
    // http client
    implementation("com.squareup.okhttp3:okhttp:4.10.0")
    //interceptor
    implementation("com.squareup.okhttp3:logging-interceptor:4.10.0")

    // Navigation Components
    implementation "androidx.navigation:navigation-fragment-ktx:2.5.3"
    implementation "androidx.navigation:navigation-ui-ktx:2.5.3"

    // Coroutines
    implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4'
    implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4'

    // Coroutine Lifecycle Scopes
    implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.1"
    implementation "androidx.lifecycle:lifecycle-runtime-ktx:2.6.1"

    //BottomBar
    implementation 'com.github.ismaeldivita:chip-navigation-bar:1.4.0'

    //circle
    implementation 'de.hdodenhof:circleimageview:3.1.0'

    //pagination
    def paging_version = "3.1.1"
    implementation "androidx.paging:paging-runtime:$paging_version"

     //Coil
    implementation 'io.coil-kt:coil:1.3.2'

    //room
    implementation 'androidx.room:room-runtime:2.5.2'
    kapt 'androidx.room:room-compiler:2.5.2'
    annotationProcessor "androidx.room:room-compiler:2.5.2"
    implementation "androidx.room:room-ktx:2.5.2"

    //splashScreen
    implementation "androidx.core:core-splashscreen:1.0.1"

}

Releases

No releases published

Packages

No packages published

Languages