Mungkin sedikit bingung, tetapi karena saya tidak dapat menemukan jawaban ini di mana pun melalui Google, maka untuk memastikan Rekayasa Perangkat Lunak memiliki jawabannya:
Apa itu pembantu?
Saya telah melihat nama yang digunakan di mana-mana (nama modul, nama kelas, nama metode), seolah-olah semantiknya dalam dan bermakna, tetapi dalam konteks Ilmu Komputer (meskipun saya tidak memiliki gelar di dalamnya), saya Saya belum pernah melihat deskripsi atau definisi di mana pun!
Apakah ini pola desain? Apakah ini sebuah algoritma? Saya pernah bekerja pada sebuah program di mana modul dan kelas keduanya disebut somethingsomethinghelper (di mana sesuatu juga cukup generik) dan saya segera menamainya menjadi sesuatu yang masuk akal bagi saya, tetapi saya merasa seperti kehilangan sesuatu di sini!
sumber
Jawaban:
Kelas Helper adalah bau kode yang kurang dikenal di mana seorang pembuat kode telah mengidentifikasi beberapa operasi lain yang umum digunakan dan berusaha membuatnya dapat digunakan kembali dengan menyatukannya dalam pengelompokan yang tidak alami. Pengembang yang berhasil kemudian datang ke proyek dan tidak menyadari bahwa kelas helper ada, dan akibatnya menulis ulang operasi umum yang sama, atau bahkan menciptakan lebih banyak kelas Helper.
Tapi serius, masalah utama dengan kelas Helper adalah bahwa mereka biasanya operasi yang bertindak pada kelas tertentu, yang jelas berarti dalam istilah OO bahwa mereka menderita kasus akut dari Fitur Envy . Kegagalan untuk mengemas perilaku ini dengan data yang ditindaklanjutinya adalah mengapa pengembang begitu sering (menurut pengalaman saya) gagal menemukannya.
Selain itu, karena Anda telah mengidentifikasi SomethingSomethingHelper sebenarnya adalah nama yang mengerikan. Ini tidak deskriptif, dan tidak memberi Anda firasat nyata tentang operasi apa yang dilakukan kelas (itu membantu?), Yang juga berarti bahwa tidak jelas ketika menambahkan perilaku baru apakah mereka termasuk dalam kelas Helper atau tidak. Saya akan memecah kelas-kelas semacam itu di sepanjang garis perilaku terkait yang secara logis dikelompokkan bersama, dan kemudian mengganti nama kelas-kelas baru untuk mencerminkan apa yang dilakukannya.
sumber
SomethingSomethingHelper
bukan nama sebenarnya dari kelas. Apakah itu bau kode atau tidak, akan tergantung pada seberapa spesifik kelas helper, karena kelas helper sukaMath
bukan bau kode sama sekali.SomethingSomethingHelper
. Sial, saya sedang melihat kelas yang sekarang bernamaHelperMethods
di<company>.Helpers
namespace. Bagi saya,Helper
kelas berada di ember yang sama dengan*Manager
.Helper
, dan saya pikir itu untuk membedakannya dari kelas di .NET Framework memiliki nama yang sama. Saya akan menganggap*Helper
dapat diterima jika*
itu sesuatu yang bermakna.HelperMethods
hanyalah kegagalan imajinasi; setidaknya harus ada ember konseptual tertentu.do..while
loop dalam Python, yang bahasa tidak mendukung (lihat contoh kedua di sini ). Yang lain akan menjadi struktur if / elif /.../ else, tetapi perlu mengulangi case di bagian atas dan bawah. Jika mungkin, mereka harus dibuat lokal untuk fungsi itu, dan umumnya tidak benar-benar disebut "pembantu".Helper adalah kelas atau metode tambahan yang tidak berbahaya, asalkan melengkapi komponen eksternal. Ketika melakukan yang sebaliknya, maka itu menunjukkan desain yang buruk karena kode telah dikeluarkan dari otoritasnya, jika ada otoritas sama sekali.
Berikut adalah contoh pembantu yang tidak berbahaya, saya menggunakan metode yang disebut
FindRep
yang menghitung jumlah nol terkemuka.Metode helper sangat sederhana, tetapi sangat tidak nyaman untuk menyalin-tempel dan kerangka kerja tidak memberikan solusi apa pun.
Dan ini adalah contoh pembantu yang buruk:
sumber
Perusahaan saya biasa menggunakan metodologi kelas Basis / kelas Pembantu di mana setiap objek akan memiliki dua kelas. Anda akan memiliki kelas Person yang berisi semua properti dan definisi kelas dan kelas PersonHelper yang berisi semua metode, pernyataan SQL dan Logika yang memanipulasi kelas Person. Ini bekerja dengan baik bagi kami karena semua aplikasi kami menggunakan pernyataan SQL untuk memanipulasi data dan sangat mudah bagi kami untuk menemukan dan memodifikasi pernyataan SQL yang diperlukan.
Kami telah pindah dan sekarang menempatkan semuanya di kelas Person / Base. Kami berhenti menggunakan konvensi penamaan Helper karena kami ingin memiliki lebih sedikit file di proyek kami. Juga, panjang beberapa nama kelas menjadi tidak terkendali. lol.
Bukan contoh yang bagus tetapi Anda mendapatkan ide.
Saya tidak mengatakan bahwa menggunakan konvensi penamaan penolong adalah solusi yang sempurna tetapi itu berhasil bagi kami selama beberapa tahun.
sumber