[Update] Network Manager

Muhammad Alfiansyah
2 min readMar 16, 2022

--

Photo by Marvin Meyer on Unsplash

Kembali ke tujuan utama medium ini dibuat :) sebagai catatan dan mengisi kegiatan ketika kerjaan sedang luang bahkan menyibukan diri dari pikiran-pikiran negatif yang timbul.

Sudah lama sekali ketika saya update mengenai tech stack yang saya gunakan, akhir-akhir ini saya malas sekali melakukan riset untuk mengimprove kode yang saya kerjakan.

Nah beberapa hari lalu saya menemukan kasus yang mengharuskan saya untuk mengimprove kode saya kembali.

Kondisi ini terjadi ketika result error yang kita terima dari backend tidak standard atau memiliki format yang berbeda.

Pada NetworkManager.swift file kita convert file json string ke codable, seperti dibawah ini :

let result = self.decode(with: data, c: ErrorResponse.self)

Nah bagaimana kalo Format Error Response setiap URL itu berbeda kita tidak mungkin kan membuat polymorpish pada satu file dan class yang sama ?Apalagi ketika format error yang kita punya memiliki banyak tipe.

Hal ini membuat saya kembali mempertimbangkan Fuctional Programming seperti ReactiveX, ReactiveSwit, PromiseKit bahkan Moya RxSwift.

Tapi karena kita ingin menggunakan kode yang 100% kita maintenance sendiri dan tidak banyak kode yang tidak terpakai sia-sia, kita akan coba improve Network Manager yang sudah kita buat sebelumnya sehingga lebih dinamis.

Belum lama ini saya menemukan artikel milik Jhon Sundell

Selain Functional programming lebih dinamis, kode kita juga kan lebih rapi dari sebelumnya. Kita tinggal panggil decode ketika ingin menDecode dan Saved ketika kita ingin menyimpan pada database yang kita gunakan.

class UserLoader {
...
func loadUser(withID id: User.ID) -> Future<User> {
urlSession
.request(url: urlForLoadingUser(withID: id))
.decoded()
.saved(in: database)
}
}

Jadi NetworkManger kita bersih dari file Codable dan kita bisa casting Error secara dinamis :). Selain itu kita juga terhindar dari CallbackHell.

Tapi ini juga tergantung dengan project yang kita kerjakan jangan sampai kode kita OverEngineer atau UnderEngineer, bakal menjadi masalah besar ketika Aplikasi kita besar dan kita harus merefactor semuanya.

Salah satu jalan yang baik adalah dengan memecah kode kita menjadi Modular seperti artike saya sebelumnya :).

Next

Setelah ini saya update improvement yang saya buat di NetworkManger sebelumnya semoga bisa membantu :).

--

--

No responses yet