Skip to content

Modularization

Girish modularization smell

Semua smell di dalam grup ini berkaitan dengan kesalahan dalam merancang modul-modul di dalam hierarki.

Filosofi

Buku adalah konten yang berisikan sekumpulan teks paragraf. Bayangkan apa yang terjadi bila semua teks ditulis mentah-mentah tanpa menggunakan Heading, Chapter, Bab, Indeks maupun sub-bab untuk membatasi isi materi dalam buku? Jawabannya pasti akan mempersulit pembaca lain dalam memahami materi dari buku yang mereka buat tentunya.

Prinsip Modularization

Girish Modularization principles

Secara teoretis, Sebuah class/abstraksi seharusnya memiliki tingkat kohesi yang tinggi dan coupling yang rendah sehingga class tersebut mempunyai tanggungjawab yang sesuai, function dan member yang saling berinteraksi satu sama lain tanpa bergantung pada class lain.

Menurut Girish Suryanarayana dkk, terdapat 4 prinsip modularization yaitu:

  • Localize related data and methods - Kumpulkan field, member, dan method yang mempunyai tanggungjawab yang sama ke dalam 1 abstraksi.
  • Decompose abstractions to manageable size - Pecahkan abstraksi yang terlalu besar menjadi beberapa abstraksi (yang imbang ukurannya, tidak terlalu kecil dan tidak terlalu besar) sesuai dengan tanggungjawab masing-masing abstraksi/class sehingga dapat dimengerti oleh developer.
  • Create acyclic dependencies - Abstraksi seharusnya tidak boleh mengandung dependensi yang cyclic dengan class lain baik secara langsung ataupun tidak langsung. Jika digambarkan dalam dependency graph, maka graph tersebut tidak boleh terdapat perputaran dependency antar-class.
  • Limit dependencies - Sebuah abstraksi seharusnya dibuat dengan dependensi seminimal mungkin baik fan-in (usages/pemakaian di abstraksi lain) maupun fan-out (imports/ketergantungan pada abstraksi lain).

Berdasarkan pada pengamatan abstraction smell, terdapat pelanggaran prinsip encapsulation antara lain: (field dan method)

Modularization smellPelanggaran prinsip modularizationPenyebabMartin Fowler smells
Broken ModularizationLocalize related data and methods1. Pemisahan data dan method dalam class terpisah
2. Method kecolongan bermain dengan class lain
1. Data Class
2. Feature Envy
Insufficient ModularizationDecompose abstractions to manageable size1. Class terlalu besar, tidak ada modularization
2. Class/method terlalu kompleks
1. Large class, divergent changes
2. Long method
Cyclically-dependent ModularizationCreate acyclic dependenciesClass saling dependensi satu sama lain dengan pasangannya atau teman selingkarnyaShotgun Surgery, Feature Envy, Inappropriate Intimacy
Hub-like ModularizationLimit dependenciesClass terlalu banyak ketergantungan dari class lain atau dependensi masukan dari class lainShotgun Surgery (bisa terjadi pada class yang depend dengannya)

Repository ini hanyalah rangkuman dari buku Suryanarayana et al. dengan sedikit tambahan informasi lain. Diharapkan mahasiswa juga membaca sumber aslinya pada bab 5 halaman 93 - 122.

Created by Saugi