|
| 1 | +WaaperHD |
| 2 | +# WaaperHD |
| 3 | +Proje webservisten aldığı görsel linklerini kullanıcıya sunup kullanıcının ister ise görseli indirip ister ise görseli telefonunda arkaplan olarak kullanılmasını sağlıyor |
| 4 | + |
| 5 | +# Yapı |
| 6 | + |
| 7 | +- Yapı **multi modüler** bir yapıdır. |
| 8 | +- Geliştirme yapılırken **MVP** kullanılmıştır. |
| 9 | +- **Clean architecture** kullanılmıştır |
| 10 | +- **One activity multiple fragment** yapıya sahiptir (Navigator olarak https://github.com/kemaltunc/basic-custom-navigation-component kullanılmıştır) |
| 11 | +- **ViewBinding** kullanıldı |
| 12 | +- Recylerview'da **Diffutil** kullanıldı |
| 13 | +- Multi modül içinde DI için **Dagger 2** kullanıldı |
| 14 | + |
| 15 | +## Modüler yapı |
| 16 | +  |
| 17 | + |
| 18 | +### **core_utility** |
| 19 | + |
| 20 | +Projede herhangi bir t anında ihtiyaç olacak fonksiyonları içeren modüldür. |
| 21 | + |
| 22 | +### **core_network** |
| 23 | + |
| 24 | +İnternete çıkacak requestleri yöneten modüldür. RxJava kullanır |
| 25 | + |
| 26 | +### **core_local** |
| 27 | + |
| 28 | +Local veri depolamak için kullanılan modüldür |
| 29 | + |
| 30 | +### **base_mvp** |
| 31 | + |
| 32 | +UI kısmının base aldığı sınıfların bulunduğu modüldür |
| 33 | + |
| 34 | + |
| 35 | +Projede genel olarak performansa ve kullanıcı deneyimine dikkat edildi. Bunun için pagination yaparken recylerviewın en altında request atmak yerine en alta yakınken request atması sağlandı. Ekran geçişlerinde kasma veya delay olmasın diye one activity multiple fragment kullanıldı. |
| 36 | + |
| 37 | +# Code Generator |
| 38 | + |
| 39 | +Projede fragment ve activityler el ile manuel oluşturulmak yerine https://github.com/hsmnzaydn/android-clean-feature-creator ile otomatik oluşturuldu. Projede kullanılan modüller kullanıldığı sürece generator sizin için minimum efor ile projenizin sınıflarını oluşturmayı sağlar. |
| 40 | + |
| 41 | +# Fragment Yapısı |
| 42 | + |
| 43 | +Fragmentin yaşam döngüsünden dolayı yönetmek zordur ve navigation architecture kullanımı oldukça zor ve karışık bunun için fragmentleri yönetmek için **Kemal Tunç'un** oluşturuduğu component(linki yukarıda) kullanıldı ve tüm view oluşurken işlemlerin tekrardan yapılmaması için initUI() ve againOpened() fonksiyonları oluşturuldu. Bir fragmente ilkkez giriliyor ise initUI() fonksiyonu tetiklenir ve tekrar bu fragmente gelinir ise againOpened() fonksiyonu tetiklenir. |
| 44 | + |
| 45 | +# Bağımlılık Yönetimi |
| 46 | +Proje multi modül olduğu için bağımlılıkları tüm modüller için teker teker yönetilmesi yerine **dependencies.gradle** dosyasında yönetildi. Burada yapılan bir değişiklik tüm modülleri etkileyecektir. |
| 47 | + |
| 48 | +# Multi Modüle Compile Time |
| 49 | +Proje multi modüle olunca projenin Compile süresi uzuyor bunu minimuma indirmek için modüllerin paralel compile olması ve gradle configürasyonlarının cachelenmesi sağlandı. Detaylar içinde **gradle.properties** dosyasına bakarbilirsiniz. |
| 50 | + |
| 51 | +# Uygulama Görüntüleri |
| 52 | +<img src="./img/one.jpg" width="200"> |
| 53 | +<img src="./img/two.jpg" width="200"> |
| 54 | +<img src="./img/three.jpg" width="200"> |
| 55 | +<img src="./img/four.jpg" width="200"> |
0 commit comments