RonaldWidha

percaya sama occam razor
See also: Other Geeks@INDC

Pattern apa yang sering dipake?

Kata 'design pattern' banyak dipakai di berbagai macam konteks. Gang of four konsen ke implementasi. Martin Fowler di PoEA konsen ke 'arsitektur'. Aku ga doyan kata arsitektur. Mungkin lebih tepatnya 'higher level stuff' aja (contohnya: Transaction Script - prosedural, MVC, Supervising COntroller, Presenter First, Model-View-ViewModel, Active Record, Table Gateway dsb).

Di level arsitektur untuk aplikasi web

kita cenderung memakai Model-View-Controller atau Supervising Controller (dikenal jg dengan nama Model View Presenter).

Di level data access layer (bagaimana kita menginstansiasi Model)

kita bisa memakai Active Record kalo untuk aplikasi kecil. Atau menggunakan Repository untuk yang lebih ribet.

Guide yang bagus untuk ngestruktur Model adalah buku dari Eric Evans, Domain Driven Design.

Intinya adalah ngebagi model jadi Entity dan Value Object. Pengaksesan Entity dilakukan melalui Repository. Semua objek2 ini diciptakan melalui komunikasi dengan business di konteks yang spesifik (Bounded Context) 

Di level implementasi

Aku ngerasa kita harus hati2 untuk terjebak dalam design pattern di level implementasi. Kent Beck memakai term 'Code Smell'. Ini adalah saat yang tepat untuk mencari pattern yang tepat untuk ngebersihin kode kamu.

 

Daripada mikirin pattern apa yang sering dipakai…

gimana kalo konsen ke prinsip OO seperti dari Robert Martin, SOLID

S = single responsibility principle

setiap kelas jelas responsibilitynya dan sesuai dengan namanya. alhasil class jadi pendek2, ga banyak properties, dan ga banyak method. jadi: fokus!

O = open closed principle

kode itu ideal nya open for extension tapi closed for modification. buat nambah fitur ga perlu ngubah kode yang ada, tapi tinggal diinjek dengan kode baru.

L = Liskov subtitution principle

ini menentukan gimana cara bikin hierarki parent / subclass berdasarkan return type dan parameter method2 yand di override. return type harus contravariant, dan parameter harus covariant. jujur, aku masi agak struggling mengaplikasikan prinsip ini.

I = Interface segregation principle

satu objek lebih baik punya banyak interface yang spesifik daripada 1 interface yang sangat besar dan generik. misalnya daripada IProfileProvider, mendingan IMemberDetailsProvider, IAuthorizationProfile, IAuthenticationProvider dsb.

D = dependcy injection principle

dependency sebuah kelas harus secara explisit distate dan implementasinya diberikan oleh penggunanya. intinya gini. Kalo sebuah Repository butuh Database class, Repository ga boleh nge-instansiasi Database objeknya sendiri. Biasanya teknik ini digabungin sama Inversion of Control Container atau Service Locator.

Semoga berguna.

Share this post: | | | |

Comments

No Comments