Bu Android uygulaması, bir yemek sipariş sistemi simülasyonu oluşturmak için tasarlanmıştır ve kodun temiz ve düzenli kalmasını sağlamak amacıyla MVVM mimarisi kullanmaktadır. Kullanıcılar uygulama aracılığıyla farklı yemekleri inceleyebilir, sepetlerine ekleyebilir ve favorilerini yönetebilir. Proje Kotlin kullanılarak geliştirilmiş olup, verilerin yerel olarak saklanması için Room, ağ istekleri için Retrofit, bağımlılık enjeksiyonu için Hilt, ve veri değişikliklerini gözlemlemek için LiveData kullanılmaktadır.
| Ana Sayfa | Yemek Detayı | Sepet | Favoriler |
|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
food-order.mp4
Proje, MVVM (Model-View-ViewModel) mimari modelini takip etmekte olup, şu dizinlerde organize edilmiştir:
-
data:
- datasource: API ya da yerel veritabanı gibi veri kaynaklarıyla etkileşime giren sınıfları içerir.
- model:
CartFood,Foods, ve API yanıtları gibi veri modellerini içerir. - repo: Repository katmanı veri kaynaklarını soyutlar ve ViewModel'e veri sağlar.
-
di (Dependency Injection):
AppModuleveHiltApplicationgibi Hilt ile ilgili bağımlılık enjeksiyonu sınıflarını içerir.
-
retrofit:
- Ağ istekleri yapmak için Retrofit yapılandırmalarını içerir.
-
room:
- Room veritabanı yapılandırmasını ve
RoomFoodsDaoveri erişim nesnelerini içerir.
- Room veritabanı yapılandırmasını ve
-
ui:
- adapter: Yemek listesi ve sepeti yönetmek için kullanılan RecyclerView adaptörlerini içerir.
- fragment: Kullanıcı arayüzü ve kullanıcı etkileşimlerinin tanımlandığı UI bileşenlerini içerir.
- viewmodel: ViewModel sınıflarını içerir, UI ile veri kaynakları arasındaki iletişimi sağlar.
-
util: Yardımcı sınıflar ve uzantı fonksiyonları içerir.
Uygulama, MVVM (Model-View-ViewModel) modelini takip eder. MVVM, iş mantığının kullanıcı arayüzünden ayrılmasını sağlar, böylece kod daha bakımlı ve test edilebilir hale gelir. İşte bu uygulamada MVVM'in nasıl kullanıldığı:
Model katmanı veri sınıflarından ve repository'den oluşur. Verilerin elde edilmesi gibi işlemler bu katmanda gerçekleşir.
- Veri Modelleri:
Foods,CartFoodgibi uygulamada kullanılan veri yapılarının tanımlarını içerir. - Repository: Veriler için tek bir kaynak olarak görev yapar. Hem yerel veritabanı hem de ağ istekleri ile etkileşimde bulunur ve verileri ViewModel’e sağlar.
View katmanı, kullanıcıya verileri gösteren ve kullanıcı etkileşimlerini yöneten kısımdır. Bu katman Fragments ve Adapters sınıflarından oluşur.
- Fragments: Her özellik için bir Fragment bulunur ve DataBinding kullanılarak, ViewModel’den gelen veriler bu katmanda görüntülenir.
- Adapters: RecyclerView gibi bileşenlerdeki verilerin yönetilmesinde kullanılır.
ViewModel katmanı, uygulamanın iş mantığını yönetir ve Model ile View arasındaki iletişimi sağlar. LiveData kullanarak veri değişikliklerini gözlemler ve UI'yi bu değişikliklere göre günceller.
- Kotlin: Projenin ana programlama dili.
- MVVM Mimarisi: Kodun daha bakımlı ve sürdürülebilir olması için tercih edilmiştir.
- Hilt: Bağımlılık enjeksiyonu kütüphanesi.
- Retrofit: REST API isteklerini gerçekleştirmek için kullanılır.
- Room: Yerel veri depolama için kullanılır.
- LiveData: Verilerdeki değişiklikleri gözlemlemek ve UI'yi güncellemek için kullanılır.
- Coroutines: Arka plan görevlerini (örneğin, ağ istekleri) yönetmek için kullanılır.
- Glide: Görselleri yüklemek için kullanılır.
- Lottie Animations: UI'yi zenginleştirmek ve daha etkileşimli hale getirmek için Lottie animasyonları kullanılır.
- DataBinding: UI bileşenleri ile ViewModel arasında doğrudan veri bağlama için kullanılır. Bu sayede arayüz kodları xml'e aktarılır.
- Yemek Listesi: Kullanıcıya yemeklerin isimleri, görselleri ve fiyatları ile birlikte bir liste gösterir.
- Sepete Ekleme: Kullanıcılar yemekleri sepetlerine ekleyebilir.
- Favoriler: Yemekler favorilere eklenebilir veya favorilerden çıkarılabilir.
- Sepet: Sepetteki ürünlerin adetleri değiştirilebilir ve toplam fiyat görüntülenir.
- Veri Kalıcılığı: Room kullanılarak çevrimdışı veri kalıcılığı sağlanır.
- Snackbar Bildirimleri: Kullanıcıya sepet veya favorilere ekleme işlemi hakkında geri bildirim verir.
- Lottie Animasyonları: Kullanıcı deneyimini geliştirmek için farklı animasyonlar kullanılır.
- DataBinding: Fragment ve XML arasında veri bağlama yapılır, UI bileşenleri dinamik olarak ViewModel'den gelen verilere göre güncellenir.



