Saya mencoba mempelajari GRASP dan saya menemukan ini menjelaskan (di sini di halaman 3 ) tentang Kopling Rendah dan saya sangat terkejut ketika saya menemukan ini:
Pertimbangkan metode
addTrack
untuk suatuAlbum
kelas, dua metode yang mungkin adalah:
addTrack( Track t )
dan
addTrack( int no, String title, double duration )
Metode mana yang mengurangi kopling? Yang kedua tidak, karena kelas yang menggunakan kelas Album tidak harus tahu kelas Track. Secara umum, parameter ke metode harus menggunakan tipe dasar (int, char ...) dan kelas dari paket java. *.
Saya cenderung setuju dengan ini; Saya percaya addTrack(Track t)
lebih baik daripada addTrack(int no, String title, double duration)
karena berbagai alasan:
Itu selalu lebih baik untuk metode sebagai parameter sesedikit mungkin (menurut Kode Bersih Paman Bob tidak ada atau lebih disukai, 2 dalam beberapa kasus dan 3 dalam kasus khusus; lebih dari 3 kebutuhan refactoring - ini tentu saja rekomendasi bukan aturan holly) .
Jika
addTrack
merupakan metode antarmuka, dan persyaratan yang dibutuhkanTrack
harus memiliki lebih banyak informasi (misalnya tahun atau genre) maka antarmuka perlu diubah dan agar metode tersebut harus mendukung parameter lain.Enkapsulasi rusak; jika
addTrack
ada dalam sebuah antarmuka, maka seharusnya tidak tahu internalTrack
.Ini sebenarnya lebih digabungkan dengan cara kedua, dengan banyak parameter. Misalkan
no
parameter perlu diubah dariint
menjadilong
karena ada lebih dariMAX_INT
trek (atau untuk alasan apa pun); maka keduanyaTrack
dan metode perlu diubah sementara jika metodeaddTrack(Track track)
hanyaTrack
akan diubah.
Keempat argumen itu sebenarnya terhubung satu sama lain, dan beberapa di antaranya merupakan konsekuensi dari yang lain.
Pendekatan mana yang lebih baik?