proyek Klinik Pintar iOS ini menggunakan Arsitektur VIP (View Interactor Presenter) / Clean Swift
instal template dari clean-swift.com setelah download template tersebut buka directory template di terminal dan make install_templates
untuk instal template, untuk menghasilkan scene
baru : New File
-> iOS
-> Clean Swift
-> Scene
-> Masukkan Nama Scene Anda
- Fabric
- Crashlytics
- One Signal
- Alamofire ( networking )
- AlamofireImage ( request image from server )
- ModelMapper ( mapping model )
- PKHUD ( Loading View )
- GooglePlaces
- GoogleMaps
- RxSwift
- RxCocoa
- Klinik Pintar
- IHC Mobile
- Pasien Pintar (soon)
- RSCM (soon)
VIP adalah satu set Xcode Templates untuk menghasilkan komponen Clean Architecture.
Sedikit Tutorial tentang VIP (Outdated but worth it to try)
ViewController
menerima aktivitas pengguna, membuat objek permintaan, mengirimkannya keInteractor
.- Interactor melakukan beberapa pekerjaan dengan
request
, membangun objek respon, dan mengirimkannya ke presenter. - Presenter memformat data dari
response
, dan membangunview model object
dan mengirimkan keViewController
. ViewController
menampilkan hasil yang ada diViewModel
ke pengguna.
ViewController
berisidisplay logic
- untuk bikin
scene
baru :New File
->iOS
->Clean Swift
->Scene
->Input Scene Name
- Terapkan
UIViewController
atauBase__ViewController
- Terapkan
UITableViewController
,UICollectionViewController
, atauUIWebViewController
jika dibutuhkan - Terapkan
BaseFormViewController
untukscene
berbasis form - Gunakan
xib
untuk views, gunakanstoryboard
sebagai routing/navigation.
Interactor
berisiBussiness Logic
- Gunakan
worker
jika dibutuhkan - Menunggu permintaan dari
ViewController
dan mengirimkan respon kepresenter
- berisikan async proses seperti parsing/fetching menggunakan API
- mengembalikan data berupa callback/Closures kepada Interactor untuk di proses ke presenter
- Berisi
ViewLogic
- Memformat ulang data dari
interactor
dan mengirimkan keViewController
.
- Gunakan
xib
atauby code
- Jangan menaruh
bussiness logic
disini
- Representasi dari objek dengan propertinya
- Gunakan
ModelMapper
- Mengarahkan ke
scene
berikutnya - Mengirim data ke
ViewController
lain
- Hal utama yang perlu di test adalah setiap protocol dari VIP (View -> Interactor -> Presenter)
- Unit testing dapat dibuat dengan cara: File -> New -> File... -> Pilih Unit tests dari template swift
- ini akan menambah 4 komponen utama unit testing, ViewController, Interactor, Presenter, dan Worker
- Menggunakan TDD akan membantu, less debugging.
- ViewControllerTests berisikan test yang akan dilakukan kepada interactor, sehingga anda harus melakukan spy terhadap protocol business logic yang ada di interactor
- InteractorTests melalukan test untuk protocol presentation logic yang ada di presenter.
- Bila menggunakan worker kita perlu melalukan test terhadap worker tersebut, dan melakukan pengecekan apakah data yang didapat sesuai yang dibutuhkan.
- WorkerTests, melakukan pengecekan apakah dikembalikan ke interactor atau tidak. gunakan inheritance untuk pengecekan tiap fungsi di worker
- PresenterTests, disini melakukan spy terhadap displayLogic yang ada di View Controller
SupportedFile
Storyboards
CustomViews
Resource
Models
- Category
Scenes
- YourSceneName
Services
Data
Extensions
Singleton
Nama Group | Deskripsi |
---|---|
SupportedFile | File config untuk setiap product |
Storyboards | Berisi file storyboard |
CustomViews | Berisi view yang dapat digunakan di setiap Scene/View Controller |
Resource | Berisi file assets dan color serta fonts, taruh setiap warna yang sesuai untuk masing-masing product disini |
Models | Berisi struktur data yang akan digunakan untuk manajemen data |
Scenes | Berisi VIP Components yang membangun Scene |
Services | Global Helper yang tidak berhubungan dengan logika bisnis |
Data | Berisikan logic local storage, dan setting untuk api request, serta enums |
Extensions | Berisikan Global extension |
Singletons | Berisikan Global functions |
ColorExtension.swift
FeatureManager.swift
Nama File | Deskripsi |
---|---|
ColorExtension.swift | File yang mengatur warna untuk setiap product |
FeatureManager | File yang mengatur feature dan flow untuk setiap product |