Saya akan mencoba memberikan jawaban terhadap penggunaan tersebut, setelah melihat dan mengerjakan ini di salah satu proyek saya juga.
Keterbacaan kode
Pertama-tama, pertimbangkan bahwa keterbacaan kode penting dan praktik ini bertentangan dengan itu. Seseorang membaca sepotong kode dan katakan saja ia memiliki fungsi doSomething(Employee e)
. Ini tidak lagi dapat dibaca, karena karena 10 Employee
kelas berbeda yang ada dalam paket yang berbeda, Anda harus terlebih dahulu menggunakan deklarasi impor untuk mengetahui apa input Anda sebenarnya.
Namun, ini adalah tampilan tingkat tinggi dan kita sering memiliki bentrokan nama yang tampaknya acak, yang tidak dipedulikan atau bahkan ditemukan oleh siapa pun, karena artinya dapat diturunkan dari kode yang tersisa dan paket yang Anda gunakan. Jadi orang bahkan dapat berdebat bahwa, secara lokal, tidak ada masalah, karena tentu saja jika Anda melihat Employee
dalam sebuah hr
paket Anda harus tahu bahwa kita sedang berbicara tentang pandangan SDM karyawan.
Hal-hal pecah begitu Anda meninggalkan paket-paket ini. Setelah Anda bekerja dalam modul / paket / etc yang berbeda dan perlu bekerja dengan karyawan, Anda sudah mengorbankan keterbacaan jika Anda tidak sepenuhnya memenuhi syarat jenisnya. Selain itu, memiliki 10 Employee
kelas yang berbeda berarti bahwa penyelesaian otomatis IDE Anda tidak lagi berfungsi dan Anda harus memilih secara manual dari tipe karyawan.
Duplikasi kode
Karena sifat masing-masing kelas yang terkait satu sama lain, kode Anda cenderung memburuk karena banyak duplikasi. Dalam kebanyakan kasus, Anda akan memiliki sesuatu seperti nama karyawan atau nomor identifikasi, yang harus diterapkan oleh masing-masing kelas. Meskipun setiap kelas menambahkan jenis pandangannya sendiri, jika mereka tidak membagikan data karyawan yang mendasarinya, maka Anda akan berakhir dengan banyak sekali kode yang tidak berguna, tetapi mahal.
Kompleksitas kode
Apa yang bisa begitu rumit yang mungkin Anda tanyakan? Bagaimanapun, masing-masing kelas dapat menjaganya sesederhana yang diinginkan. Yang benar-benar menjadi masalah adalah bagaimana Anda menyebarkan perubahan. Dalam perangkat lunak kaya fitur yang masuk akal, Anda mungkin dapat mengubah data karyawan - dan Anda ingin mencerminkannya di mana-mana. Katakan bahwa seorang wanita baru saja menikah dan Anda harus mengganti namanya dari X
menjadiY
karena itu. Cukup sulit untuk melakukan ini dengan benar di semua tempat, tetapi bahkan lebih sulit ketika Anda memiliki semua kelas yang berbeda ini. Bergantung pada pilihan desain Anda yang lain, ini dapat dengan mudah berarti bahwa masing-masing kelas harus mengimplementasikan jenis pendengarnya sendiri atau diberitahukan perubahan - yang pada dasarnya berarti faktor yang diterapkan pada jumlah kelas yang harus Anda tangani . Dan tentu saja lebih banyak duplikasi kode, dan lebih sedikit keterbacaan kode, .. Faktor-faktor seperti ini mungkin tidak dapat diabaikan dalam analisis kompleksitas, tetapi mereka tentu saja mengganggu ketika diterapkan pada ukuran basis kode Anda.
Komunikasi kode
Terlepas dari masalah di atas dengan kompleksitas kode, yang juga terkait dengan pilihan desain, Anda juga mengurangi kejelasan desain tingkat tinggi dan kehilangan kemampuan untuk berkomunikasi dengan benar dengan pakar domain. Ketika Anda mendiskusikan arsitektur, desain, atau persyaratan, Anda tidak lagi bebas membuat pernyataan sederhana seperti given an employee, you can do ...
. Pengembang tidak akan lagi tahu apa employee
arti sebenarnya pada saat itu. Meskipun seorang pakar domain tentu akan mengetahuinya. Kita semua melakukannya. semacam itu. Tetapi dalam hal perangkat lunak itu tidak begitu mudah untuk berkomunikasi lagi.
Bagaimana cara menyingkirkan masalahnya
Setelah mengetahui hal ini dan jika tim Anda setuju bahwa itu adalah masalah yang cukup besar untuk diatasi, maka Anda harus mencari cara untuk menghadapinya. Biasanya, Anda tidak dapat meminta manajer Anda untuk memberi seluruh tim libur seminggu sehingga mereka dapat membuang sampah. Jadi intinya, Anda harus menemukan cara untuk menghilangkan sebagian kelas-kelas ini, satu per satu. Bagian terpenting dari ini adalah memutuskan - bersama seluruh tim - apa yang Employee
sebenarnya. Jangan tidak mengintegrasikan semua atribut individu ke dalam satu dewa-karyawan. Pikirkan lebih banyak karyawan inti dan yang paling penting, tentukan di mana Employee
kelas itu akan berada.
Jika Anda melakukan review kode, maka sangat mudah untuk memastikan bahwa masalahnya setidaknya tidak tumbuh lebih jauh, yaitu menghentikan semua orang tepat di jalur mereka ketika mereka ingin menambahkan Employee
lagi. Juga berhati-hatilah agar subsistem baru mematuhi yang disepakati Employee
dan tidak diizinkan untuk mengakses versi lama.
Bergantung pada bahasa pemrograman Anda, Anda mungkin juga ingin menandai kelas yang pada akhirnya akan dihilangkan dengan sesuatu seperti @Deprecated
untuk membantu tim Anda segera menyadari bahwa mereka sedang bekerja dengan sesuatu yang harus diubah.
Adapun untuk menyingkirkan kelas karyawan yang sudah ketinggalan zaman, Anda dapat memutuskan untuk setiap kasus bagaimana cara terbaik untuk dihilangkan, atau hanya setuju pada pola umum. Anda dapat menempelkan nama kelas dan membungkusnya dengan karyawan asli, Anda dapat menggunakan pola (penghias atau adaptor datang ke pikiran), atau, atau atau.
Singkatnya: "latihan" ini secara teknis bagus, tetapi tersedak biaya tersembunyi yang hanya akan terjadi di ujung jalan. Meskipun Anda mungkin tidak dapat segera menyingkirkan masalah, Anda dapat segera mulai dengan mengandung efek berbahaya.