Jetpack Compose’da Hilt ile Room Veritabanı Nasıl Kullanılır?

Emine İNAN
Huawei Developers - Türkiye
4 min readJun 27, 2024
Photo by NASA on Unsplash

Giriş 🌟

Android uygulama geliştirme sürecinde, bağımlılık yönetimi ve veritabanı işlemlerinin doğru şekilde ele alınması, projenin sürdürülebilirliği ve bakımının sağlanması açısından çok önemlidir. Hilt, bağımlılık enjeksiyonunu basitleştirmede önemli bir rol oynarken, Room veritabanı yönetimini kolay ve güvenli hale getirir. Bu makalede, Jetpack Compose’da Hilt ile Room veritabanının nasıl kullanılacağını inceleyeceğiz.

Hilt Nedir?

Hilt, bağımlılıkların oluşturulmasını ve yaşam döngüsünü yöneterek manuel bağımlılık enjeksiyonunu basitleştiren bir Android bağımlılık enjeksiyon kütüphanesidir. Geliştiriciler Hilt kullanarak gereksiz kodları azaltabilir ve uygulamalarını daha modüler ve test edilebilir hale getirebilirler.

Room Nedir?

Room, Android Jetpack’in bir parçası olan bir kalıcılık (persistence) kütüphanesidir ve SQLite veritabanının üzerinde yer alan bir soyutlama katmanıdır. SQLite’ı doğrudan kullanmak yerine, Room veritabanı kurulumunu, yapılandırmasını ve uygulama ile etkileşimlerini basitleştirir ve SQLite ifadelerinin derleme zamanında kontrol edilmesini sağlar.

Hilt ile Room Entegrasyonu

Hilt ile Room’u entegre etmek, gerekli bağımlılıkları kurmayı, Hilt modüllerini yapılandırmayı ve Room veritabanı ile DAO sınıflarını oluşturmayı içeren birkaç adımdan oluşur. Aşağıdaki bölümde bu adımları ele alacağız.

Örnek Uygulama

Hilt ve Room Veritabanı entegrasyonunu Jetpack Compose ile açıklamak için QuoteApp adında basit bir örnek uygulama oluşturalım.

QuoteApp

Adım 1

🚩 Android Studio’da Kotlin DSL ile yeni bir Android projesi oluşturun ve Hilt, Room ve ViewModel için gerekli bağımlılıkları ekleyin.

Not: Bağımlılıkları eklemek için versiyon kataloglarını kullanacağız. Versiyon katalogları hakkında bilgi almak için burayı kontrol edebilirsiniz. Gradle versiyon katalogları, bağımlılıkların ve eklentilerin tanımlarını merkezileştirerek birden çok modül arasında yönetimini basitleştirir.

libs. versions.toml
build.gradle.kts (Project)
build.gradle.kts (App)

Adım 2

🚩 Application sınıfında Hilt’i başlatın.

Application sınıfını @HiltAndroidApp ile anotasyonlamak, uygulamanızda bağımlılık enjeksiyonu için Hilt’i kurar. Bu, Hilt’in gerekli bileşenleri oluşturmasına izin vermek için gereklidir.

MainApplication.kt

Adım 3

🚩 Hilt’i doğru şekilde yapılandırmak için MainApplication sınıfını AndroidManifest.xml dosyasına ekleyin.

AndroidManifest.xml

Adım 4

🚩 Room veritabanı için Quote adlı bir entity sınıfı oluşturun.

Quote sınıfı, Room veritabanında bir tabloyu temsil eden bir entity’dir. Quote’un her bir örneği quotes tablosunda bir satır olacaktır. @Entity anotasyonu bu sınıfı bir entity olarak belirtir ve @PrimaryKey, id’yi birincil anahtar olarak işaretler.

Quote.kt

Adım 5

🚩 QuoteDao adında bir interface sınıfı tanımlayın.

Bir DAO (Data Access Object), veritabanı etkileşim yöntemlerini tanımlar. @Dao anotasyonu, onu Room için bir DAO sınıfı olarak tanımlar. getAll() fonksiyonu, tüm alıntıları almak için bir SQL sorgusu kullanır ve verilerdeki değişiklikleri gözlemlemeye olanak tanıyan bir Flow döndürür. addQuote ve deleteQuote fonksiyonları, veritabanına Quote nesnelerini ekler ve siler.

QuoteDao.kt

Adım 6

🚩 QuoteDatabase adında bir abstract sınıfı oluşturun.

QuoteDatabase sınıfı, Room veritabanı yapılandırmasını tanımlar. @Database anotasyonu, entity’leri ve veritabanı sürümünü içerir. Sınıf, RoomDatabase’i extend eder ve DAO’yu döndüren bir abstract method içerir.

QuoteDatabase.kt

Adım 7

🚩 Veritabanı ve DAO örneklerini sağlayın.

Bu Hilt modülü, Room veritabanı ve DAO örneklerini sağlar. @Module anotasyonu, onu bir Hilt modülü olarak tanımlar ve @InstallIn(SingletonComponent::class), bağlantıların singleton bileşeninde mevcut olduğunu belirtir. provideAppDatabase methodu, Room veritabanını oluştururken, provideQuoteDao methodu DAO örneğini sağlar.

DatabaseModule.kt

Adım 8

🚩 Verinin durumlarını temsil eden Result adında bir sealed class tanımlayın.

Result sealed class, bir veri isteğinin farklı durumlarını temsil etmek için kullanılır: success, loading ve error. Bu, veri isteği durumuna göre UI durumunu yönetmeye yardımcı olur.

Result.kt

Adım 9

🚩 QuoteRepository adında bir Repository sınıfı oluşturun.

QuoteRepository sınıfı, veritabanıyla etkileşim kurmak için DAO’yu kullanır ve farklı durumları temsil etmek için Result içinde sarılmış veriler döndürür. Repository, Hilt kullanarak bağımlılık enjeksiyonunu etkinleştirmek için @Inject ile anotasyonlanmıştır.

QuoteRepository.kt

Adım 10

🚩 Alıntıları eklemek, silmek ve almak için use case’leri tanımlayın.

Use case’ler, iş mantığını merkezi ve yeniden kullanılabilir bir şekilde tanımlar, veritabanı erişimini repository sınıfları aracılığıyla yönetir.

GetQuotesUseCase.kt
AddQuotesUseCase.kt
DeleteQuoteUseCase.kt

Adım 11

🚩 UI durumlarını temsil eden QuoteUiState adında bir sealed class tanımlayın.

QuoteUiState.kt

Adım 12

🚩 Veritabanı işlemleri için use case’leri kullanan bir ViewModel oluşturun.

QuoteViewModel.kt

Adım 13

🚩 Alıntılarla etkileşim kurmak için QuoteScreen adlı bir composable oluşturun.

QuoteScreen, alıntıların girilmesi için bir TextField aracılığıyla kullanıcı arayüzünü sağlar, alıntıları bir LazyColumn aracılığıyla listeler ve bir Button ile alıntıları ekler. Alıntılar eklenebilir, silinebilir ve listelenebilir. Kullanıcı arayüzü, alıntıların loading, success veya error durumlarına göre güncellenir, bu da UI kodunu modüler ve anlaşılır hale getirirken veri işleme ve kullanıcı etkileşimlerini yönetir.

QuoteScreen.kt

Adım 14

🚩 Hilt tarafından bağımlılık enjeksiyonunu etkinleştirmek için MainActivity sınıfına @AndroidEntryPoint anotasyonunu ekleyin ve alıntılarla etkileşim kurmak için gerekli kullanıcı arayüzünü sağlamak üzere QuoteScreen() composable fonksiyonunu çağırın.

MainActivity.kt

Sonuç

Android uygulama geliştirmede Hilt ile Room’u entegre etmek, bağımlılık enjeksiyonu ve veritabanı yönetimi için basitleştirilmiş bir yaklaşım sunar. Bu entegrasyon, gereksiz kodları azaltarak ve veritabanı ile tür güvenli etkileşimler sağlayarak kod bakımını, ölçeklenebilirliği ve test edilebilirliği artırır. Hilt’i bağımlılık enjeksiyonu ve Room’u veritabanı işlemleri için kullanarak, geliştiriciler sağlam ve sürdürülebilir uygulamalar oluşturabilirler.

--

--

Emine İNAN
Huawei Developers - Türkiye

Android Developer by day, Android Developer by night. @Huawei