Ada beberapa aspek yang perlu dipertimbangkan dalam desain seperti:
- ketergantungan struktural
- hubungan kepemilikan (iecomposition vs jenis asosiasi lainnya)
- kebutuhan navigasi
Ketergantungan struktural antar kelas:
Jika Anda bertujuan menggunakan kembali kelas komponen, Anda harus menghindari ketergantungan yang tidak perlu dan menghindari struktur melingkar yang tertutup.
Namun demikian kadang-kadang dua kelas secara konsep sangat terkait. Dalam hal ini, menghindari ketergantungan bukanlah pilihan nyata. Contoh: pohon dan daunnya, atau lebih umum komposit dan komponennya .
Kepemilikan benda:
Apakah satu objek memiliki yang lain? Atau dinyatakan lain: jika satu objek dihancurkan, apakah yang lain akan dihancurkan juga?
Topik ini dibahas secara mendalam oleh Snowman, jadi saya tidak akan membahasnya di sini.
Kebutuhan navigasi antara objek:
Masalah terakhir adalah kebutuhan navigasi. Mari kita ambil contoh favorit saya, pola desain komposit dari Gang empat .
Gamma & al. secara eksplisit menyebutkan kebutuhan potensial untuk memiliki referensi orang tua yang eksplisit: " Mempertahankan referensi dari komponen anak ke orang tua mereka dapat menyederhanakan traversal dan pengelolaan struktur komposit " Tentu saja Anda dapat membayangkan traversal top-down yang sistematis, tetapi untuk objek komposit yang sangat besar itu dapat secara signifikan memperlambat operasi dan secara eksponensial. Referensi langsung, bahkan lingkaran dapat secara signifikan memudahkan manipulasi komposit Anda.
Contohnya bisa menjadi model grafis dari sistem elektronik. Struktur komposit dapat mewakili papan elektronik, sirkuit, elemen. Untuk menampilkan dan memanipulasi model, Anda memerlukan beberapa proksi geometris dalam tampilan GUI. Maka tentu saja jauh lebih mudah untuk menavigasi dari elemen GUI yang dipilih oleh pengguna ke komponen, untuk mengetahui yang merupakan induk dan dengan elemen saudara / saudari terkait, daripada memulai pencarian top-down.
Tentu saja, seperti yang ditunjukkan oleh Gamma & al, Anda harus memastikan invarian dari hubungan sirkuler. Ini bisa rumit, seperti yang ditunjukkan oleh pertanyaan SO yang Anda lihat. Tapi itu sangat mudah dikelola dan dengan cara yang aman.
Kesimpulan
Kebutuhan navigasi tidak boleh diremehkan. Bukan tanpa alasan bahwa UML telah secara eksplisit menekannya dalam notasi pemodelan. Dan ya, ada situasi yang benar-benar valid di mana referensi melingkar diperlukan.
Satu-satunya titik adalah bahwa kadang-kadang orang cenderung pergi ke arah yang cepat. Jadi ada baiknya mempertimbangkan semua 3 aspek yang terlibat sebelum mengambil keputusan untuk melakukannya atau tidak.