Code Reengineering

The Couplers

  1. Feature Envy

    Smell ini terjadi bila ada sebuah method yang lebih sering mengakses data class lain ketimbang class sendiri. Class sendiri pun menjadi ‘cemburu’. Bila hal ini terjadi, harus dipikirkan bagaimana cara mengusir method ini ke class lain tersebut.

    Example Code :
    feature envy

    Treatment :
    feature envy

    Dilakukan Move Method pada fungsi isScored. Perhatikan di package after, isScored dipindahkan ke class Exam.





  2. Inappropriate Intimacy

    Smell ini terjadi karena hubungan antar class yang terlalu intim, menyebabkan class yang satu mengeksploitasi internal field dan/atau method di class lain.

    Example Code :
    Inappropriate Intimacy

    Treatment :
    Catalog dan Product punya hubungan bidirectional yang tidak perlu, maka dilakukan Change Bidirectional Association to Unidirectional. Dengan cara menghapus field catalog di dalam Product.





  3. Message Chains

    Smell ini terjadi ketika ingin mengakses sebuah method, perlu dilakukan emanggilan dari hasil return method lainnya sehingga membentuk rantai: obj.a().b().c().

    Example Code :
    Messages Chains

    Treatment :
    Messages Chains

    Dilakukan Hide Delegate. Perhatikan class BojekDriver dan Destination, telah ditambahkan fungsi latitude() dan longitude() yang sebenarnya melakukan delegasi chaining yang dilakukan di package before. Hal ini dilakukan agar class client tidak merasakan adanya chaining, disembunyikan di dalam sini.





  4. Middle Man

    Middle Man adalah class yang isinya hanya delegasi saja, tidak ada behavior lain selain delegasi ke class lain.

    Example Code :
    Middle Man

    Treatment :
    Middle Man

    Dengan menghapus class Order, kita menghilangkan perantara dan menyederhanakan kode. Kita sekarang dapat menggunakan kelas OrderProcessor secara langsung untuk memproses pesanan.