Skip to content

Primitive Obsession

sourcemaking

Penjelasan Smell

Smell ini terjadi ketika ada field atau parameter yang memakai tipe data primitif, padahal behavior-nya lebih daripada tipe data yang ia gunakan.

Hal ini tidak terjadi hanya di tipe data primitif int, float, dan sebagainya saja. Hal ini juga bisa terjadi di tipe data lain di level abstraksi yang lebih tinggi. Misalnya String. Intinya adalah, bila programmer menyimpan data dengan sebuah tipe data, padahal behavior dari data itu lebih dari tipe data yang ia gunakan, berarti sebenarnya harus diganti atau dibuatkan class baru.

Perhatikan contoh Mahasiswa.java. Terdapat field name menggunakan String dan tanggal lahir yang dipecah-pecah menjadi integer. Padahal name memiliki validasi sesuai dengan regex dalam code, dan tanggal lahir memiliki validasi tanggal harus valid.

Selain itu, terdapat juga field type menggunakan String. Padahal value type hanya boleh Reguler atau Global. Selain itu, type juga digunakan pada MahasiswaGreeter yang di dalam sini terdapat smell switch statement.

Penyelesaian

Dilakukan Extract Class pada name, dibuatkan class baru bernama FullName. Kemudian replace data value with object pada field name di class Mahasiswa.

Untuk integer dayOfBirth, monthOfBirth, dan yearOfBirth, kita ganti menggunakan class java.util.Date bawaan dari Java.

Untuk logic Greeter, kita gunakan replace type code with state/strategy.

Created by Saugi