O in SOLID — Open / Close Principles

SOLID adalah arsitektur untuk OOP yang diperkenalkan oleh Robert C Martin, atau yang lebih dikenal sebagai Uncle Bob. SOLID sendiri adalah singkatan dari :

  • S — Single Responsibility
  • O — Open Close Principle
  • L — Liskov Substitution Principle
  • I — Interface Segregation Principle
  • D — Dependency Inversion

Apa itu?

SOLID architecture intinya adalah bagaimana kita mendesain aplikasi kita agar mudah diubah, dimaintain dan dikembangkan lebih jauh. SOLID juga membuat developer lebih mudah menemukan bugs, menghindari smelly code, dan gampang di-refactor.

O — Open / Closed Principle

Open / Closed Principle artinya sebuah class harus bisa di-extend, tapi harus juga tertutup untuk modifikasi. Agak oxymoron memang, tapi bisa dilakukan. Kenapa harus Open / Closed Principle? Principle ini agar menjaga agar behaviournya tetap, dan apapun perubahan tidak merusak versi sebelumnya. Membuat code kita lebih gampang ditebak, lebih kokoh, dan gak gampang break. Bagaimana tips and trick agar code kita tidak violate Open / Closed Principle ?

Sebisa mungkin menghindar public variable, apalagi Global variable

Contohnya:

https://gist.github.com/suprie/ebdc7cada6373fafabd2749947c9a9e3

Kode tersebut sepertinya tidak berbahaya, dan mungkin saya sendiri sering melakukannya. Mengambil data di background lewat viewModel, lalu data disimpan di view Model dan view controller bisa akses tersebut. Permasalahannya, object dari objects itu bisa diambil dan ditulis oleh siapa saja. Bisa saja ada function yang mengubah object objects itu. Sehingga class tersebut tidak open / close principle, karena class tersebut open for modification.

Kita bisa ubah code kita menjadi slightly better. Contohnya:

https://gist.github.com/suprie/99e3e135717706159fe6d1935b43712f

Dengan mengubah variable objects menjadi private, dan mengenalkan dua method baru (numberOfObjects dan object(at:)). Classnya menjadi close for modification.

Related Posts

Part II — Understanding about RuleChain

Mengenal dasar RxSwift

Making Backward Compatible Adaptive Colors for Dark Mode in iOS

Automate Your Android App Bundle Publishing using Jenkins

No Comment

Leave a Reply