dumpsysAvatar border
TS
dumpsys
Dua Cara Menyusun Struktur Direktori Perangkat Lunak yang Baik

Setidaknya ada 2 pilihan yang bisa digunakan untuk mengorganisasikan kode kita:

  • Package by Layer

Seperti namanya, kita mengelompokkan kelas-kelas yang kita buat berdasarkan layer aplikasi. perhatikan layer onion architecture/clean architecture diagram di atas. Dengan ini dalam aplikasi akan terlihat struktur package kurang lebih seperti berikut:

  • com.kaskus.action
  • com.kaskus.model
  • com.kaskus.co.idecase
  • com.kaskus.dao

Masing-masing package akan berisi kelas-kelas serupa yang tergambar dari nama package tersebut. misalnya semua kelas model seperti: User, Post, Question, dll berada dalam package com.kaskus.model

Di sini satu fitur aplikasi akan bergantung pada kelas-kelas yang tersebar dalam berbagai package yang berbeda. Akibatnya, keterkaitan antar package menjadi tinggi (low cohesion) dan aplikasi menjadi tidak cukup modular (low modularity). Saat diperlukan perubahan pada sebuah fitur, sangat mungkin perubahannya akan meliputi beberapa package yang berbeda. Begitu juga saat penghapusan atau penghilangan sebuah fitur, maka yang diperlukan adalah menghapus kelas-kelas yang diperlukan oleh fitur tersebut yang tersebar dalam berbagai package.

  • Package by Feature


Berbeda dengan package by layer, package by feature mengelompokkan kelas-kelas yang diperlukan untuk implementasi sebuah fitur aplikasi dalam sebuah package. Sehingga nama package merupakan representasi dari feture yang diimplementasikannya. Dengan demikian, struktur sebuah aplikasi akan terlihat kurang lebih seperti berikut:

  • com.kaskus.feature.statistics
  • com.kaskus.feature.profile
  • com.kaskus.feature.questions
  • com.kaskus.feature.security
  • com.kaskus.feature.util

Dengan menyusun direktory/package aplikasi kita seperti ini, membuat ketergantungan antar package sangat kecil atau hampir tidak ada (high cohesion) dan aplikasi menjadi lebih modular (high modularity).

Kelas-kelas yang terkait dengan sebuah fitur tidak lagi tersebar dalam berbagai package akan tetapi terkumpul dalam sebuah package. Jika seandainya ada satu fitur yang berubah, perubahannya juga hanya pada satu pacakge fitur yang mengalami perubahan (proses bisnis) tersebut. Pada kasus tertentu, seandainya sebuah fitur tidak lagi diperlukan, maka penghapusan fitur tersebut seakan semudah melakukan satu operasi yaitu menghapus satu package/direktori.

gambar dari: bliki: PresentationDomainDataLayering

Jadi, jika menyusun struktur direktori proyek perangkat lunak, sangat dianjurkan untuk menyusun direktori berdasarkan fitur (package by feature) alih-alih menyusunnya berdasarkan layer (package by layer).


Semoga bermanfaat emoticon-Cendol Gan


referensi:
1. https://martinfowler.com/bliki/Prese...aLayering.html
2. http://www.javapractices.com/topic/T...tion.do?Id=205

Ini contoh project yang menggunakan package by feature gan https://github.com/googlesamples/and...prints/todoapp

aplikasi Android sih, tapi ini juga bisa untuk project perangkat lunak apapun
Diubah oleh dumpsys 28-05-2019 13:54
eternu5
izzy713
nona212
nona212 dan 5 lainnya memberi reputasi
6
1.3K
10
GuestAvatar border
Guest
Tulis komentar menarik atau mention replykgpt untuk ngobrol seru
Mari bergabung, dapatkan informasi dan teman baru!
Programmer Forum
Programmer ForumKASKUS Official
20.2KThread4.2KAnggota
Terlama
GuestAvatar border
Guest
Tulis komentar menarik atau mention replykgpt untuk ngobrol seru
Ikuti KASKUS di
© 2023 KASKUS, PT Darta Media Indonesia. All rights reserved.