Saya yakin setiap pengembang iOS baru memiliki masalah berikut: View Controllers menjadi sangat cepat penuh dengan kode untuk berbagai keperluan, dengan mudah mencapai 500 + baris kode.
Begini tampilannya untuk dua layar dasar dan umum:
1) Layar Formulir:
2) Layar Pengontrol Tampilan Tabel
Sejauh ini saya telah membaca tentang dua solusi berbeda:
Solusi Pertama: https://bendyworks.com/single-responsibility-principle-ios/ . Ini didasarkan pada Pemberitahuan, itu sepenuhnya memisahkan View Controller dari Model View (Intentions) dan dengan demikian mengurangi kode di View Controller. Saya pikir itu memiliki kelemahan dari pemecahan kode, mirip dengan struktur Go-To. Ini terlihat seperti ini:
Solusi kedua menjaga View Controllers yang penuh sesak (aksi tombol dijalankan di dalam VC dan sebagainya). tetapi menggunakan perpustakaan seperti TPKeyboardAvoiding , BlocksKit atau solusi lain yang kebanyakan berdasarkan kategori. Dengan solusi kedua ini, kode berkurang secara drastis tetapi pengontrol tampilan masih memiliki banyak tanggung jawab.
Apa pendapat Anda tentang solusi ini? Mana yang lebih baik? Apakah ada yang lebih baik?
sumber
Jawaban:
Kami dapat menggunakan MVVM untuk menyelesaikan masalah ini.
Model-View-ViewModel, atau pola MVVM seperti yang umum dikenal, adalah pola desain UI. VM mengambil semua logika tentang mempersiapkan data model untuk UI dari VC.
Contoh:
Anda punya objek model dengan beberapa bidang, Anda ingin memformat beberapa di antaranya, membuat perhitungan dan menggabungkannya.
Dalam kasus MVC semua logika itu terletak di ViewController.
Di MVVM Anda memindahkan semuanya dari VC ke VM.
VM akan menyiapkan semua data untuk UI dan VC hanya mengaturnya seperti ini.
(di kelas VC)
Tutorial dan topik:
sumber
Saya harus mengurai kode dalam View Controllers berukuran besar sebelumnya dan itu benar-benar menghambat kemampuan saya untuk menavigasi konten pada awalnya. Satu hal penting yang saya sadari adalah bahwa ukuran saja dari View Controller tidak cukup alasan untuk memecah hal-hal. Ada kerumitan dalam memiliki 1 file besar dan juga kompleksitas dalam memiliki banyak file kecil. Berikut adalah beberapa alasan yang sah untuk refactor untuk memecah View Controller menjadi bagian-bagian yang lebih kecil:
MVC
View Controller seharusnya tidak melakukan lebih dari menjadi perekat penghubung antara View dan Model. Jika Anda memiliki banyak kode koneksi jaringan, kode manipulasi gambar, dll, maka pertimbangkan untuk memecahnya menjadi kelas pembantu.
Kontrol Berganda dengan View Controller sebagai sumber data
Jika Anda memiliki banyak kontrol di layar yang memiliki View Controller Anda sebagai sumber data, pertimbangkan memecahnya menjadi objek sumber data yang terpisah dan menjadikannya sebagai sumber data. Atau Anda juga dapat memecahnya menjadi View Controllers yang terpisah (seperti jika Anda View Controller memiliki tampilan tabel selain controller lainnya, Anda dapat memecahnya ke dalam kelas Table View Controller sendiri).
Kode Gandakan
Jika Anda memiliki kode yang sama persis di berbagai Pengontrol Tampilan, masukkan di 1 lokasi bersama. Itu akan membuat kode Anda dapat digunakan kembali dan membantu mengelola kompleksitas.
Berikut adalah beberapa saran tambahan untuk meminimalkan kompleksitas View Controller:
Storyboard bukan Programmatic
Menciptakan elemen Tampilan adalah banyak kode dan bingkai kode geometri banyak pekerjaan juga. Jika belum mempertimbangkan menggunakan batasan tata letak otomatis dan menempatkan sebanyak mungkin elemen Tampilan di storyboard.
Kode / komentar yang tidak perlu
Pastikan juga untuk menghapus kode / komentar yang tidak perlu. Banyak kali file View Controller baru akan datang dengan metode yang tidak Anda gunakan. Jika Anda tidak menggunakan metode seperti
didReceiveMemoryWarning
itu maka aman untuk mengeluarkannya. Juga, karena file View Controller sangat besar kadang-kadang menakutkan untuk menghapus kode atau komentar lama. Jangan menunda itu! Itu hanya menambah kompleksitas.Notifikasi
Untuk menjawab pertanyaan Anda tentang notifikasi: Notifikasi bukan Golden Hammer untuk digunakan dengan segalanya. Saya menemukan notifikasi berguna ketika beberapa Pengontrol Tampilan perlu memperbarui pada saat yang sama karena 1 tindakan tertentu. Berhati-hatilah dengan notifikasi, menggunakannya secara berlebihan dapat menyebabkan Anda merasa sangat sakit saat mencoba melacaknya.
sumber
Ada satu arsitektur khusus yang mereka sebut VIPER (View, Interactor, Presenter, Entity, dan Routing). Saya akan mencoba melanjutkan di sini apa yang perlu Anda ketahui:
Melihat
Pembawa acara
Rute
Jadi, apa yang saya pikir Anda akan bersihkan dalam kode Anda:
validasi data akan pindah ke lapisan Presenter ;
navigasi akan pindah ke objek Wireframe ( Routing layer);
pisahkan pengontrol tampilan Anda dengan memperhatikan prinsip KERING ;
Layar yang kompleks akan memiliki dua Tampilan dan Penyaji.
Anda harus melihat tautan ikuti tentang arsitektur VIPER http://mutualmobile.github.io/blog/2013/12/04/viper-introduction/
Semoga beruntung!
sumber