Apa perbedaan antara kelas Helper dan Utility?


116

Bagaimana menentukan bagaimana memanggil kelas XHelper atau XUtils?

Ke dalam pikiranku :

Kelas helper , adalah kelas yang dapat membuat instantiate dan melakukan pekerjaan bisnis

Kelas utils , adalah kelas statis yang melakukan operasi kecil dan berulang-ulang pada jenis contoh (contoh utils kelas ArrayUtils atau IOUtils dari Apache)


5
"Pekerjaan bisnis" adalah perbedaan utama di sini. Saya merasa ini adalah konvensi yang berguna untuk digunakan Utilsuntuk kelas statis yang dapat digunakan di mana saja di organisasi, atau di organisasi lain. Sebuah Helperkelas memiliki kode umum yang dapat digunakan kembali dalam sebuah proyek dan memiliki dependensi dalam proyek. Tentu saja, tidak ada aturan yang diterima secara umum, tetapi menurut saya ini berguna.
Stephen Hosking

1
@StephenHosking Penjelasan Anda adalah yang paling meyakinkan bagi saya & mungkin untuk semua orang. Jika memungkinkan, maukah Anda memposting penjelasan Anda sebagai jawaban sebenarnya untuk posting ini daripada hanya meninggalkan komentar.
Bigair

@Tokopedia Terima kasih, tapi milikku hanyalah saran, bukan jawaban. Saya senang bahwa orang-orang menganggapnya bermanfaat.
Stephen Hosking

Jawaban:


102

Ada banyak gaya penamaan yang bisa digunakan. Saya akan menyarankan Utils hanya karena lebih umum.

Kelas Utilitas dipahami hanya memiliki metode statis dan tanpa status. Anda tidak akan membuat instance dari kelas seperti itu.

Helper dapat berupa kelas utilitas atau dapat berupa stateful atau memerlukan instance yang dibuat. Saya akan menghindari ini jika memungkinkan.

Jika Anda bisa membuat nama lebih spesifik. misalnya jika memiliki metode penyortiran, buatlah menjadi XSorter

Untuk array, Anda dapat menemukan kelas pembantu seperti

Array
Arrays
ArrayUtil
ArrayUtils
ArrayHelper

BTW, kependekan dari kelas utilitas adalah enum tanpa instance

enum XUtils {;
    static methods here
}

Jika Anda perlu mengimplementasikan antarmuka, saya akan menggunakan Singleton tanpa negara.

enum XHelper implements RequiredInterface {
   INSTANCE;
   // no instance fields.
}

Saya ini di posting ini stackoverflow.com/a/2135797/787698 , bahwa Xutils adalah kelas statis tanpa ketergantungan. Apa yang kamu pikirkan tentang itu?
jakcam

@jakcam Poin yang menarik. Seorang helper bisa menjadi stateful dan membutuhkan sebuah contoh. Saya akan menggunakan kelas utilitas stateless dan instance-less jika memungkinkan.
Peter Lawrey

Apa yang Anda pahami dengan Xutils adalah kelas statis tanpa ketergantungan ?
jakcam

Saya tidak bisa menemukan "xutils" atau "no dependencies" di posting itu.
Peter Lawrey

1
@ John Dalam hal ini metode utilitas tidak diinginkan karena lebih sulit untuk dibuat tiruan untuk tujuan pengujian.
Peter Lawrey

16

Secara umum? Itu sepenuhnya sewenang-wenang. Tidak ada aturan untuk ini.


8

Utilitas adalah kelas "simpul daun" untuk penggunaan umum. Artinya, ia tidak memiliki ketergantungan apa pun ke dalam proyek Anda dan dapat dipindahkan dari proyek ke proyek tanpa merusak atau menjadi tidak berguna. Contoh: Vector3, RandomNumberGenerator, StringMatcher, dll ...

Seorang "pembantu" tampaknya adalah kelas yang desainnya adalah untuk membantu kelas lain. Ini mungkin atau mungkin tidak tergantung pada proyek Anda. Jika Anda membuat GameNetworkClientkelas, bisa dikatakan GameNetworkConnectionkelas tersebut adalah 'pembantu', karena kelas tersebut "membantu" GameNetworkClient.

Cara pengembang merujuk ke alat mencerminkan penggunaan umum kata-kata ini. Jika Anda dapat mengingat alat bantu dengar yang digambarkan sebagai "membantu" vs "berguna", alat bantu cenderung memiliki konteks tertentu (parutan keju membantu memarut keju, pengupas jagung membantu mengupas jagung, speed loader membantu mengisi ulang senjata api). Sebuah "utilitas" diharapkan bekerja dalam berbagai konteks (WD-40, lakban, pisau tentara, lem, senter, dll ...).


5

Seperti yang dikatakan Jesper, itu sepenuhnya sewenang-wenang . Anda dapat memikirkan apa yang berhasil untuk organisasi Anda dan menjadikannya sebagai konvensi.

Bagi saya, itu seperti ini:

utils - Kelas statis, yang dapat dengan bebas dipindahkan dan diimpor ke mana saja.

Melakukan tugas-tugas umum yang dapat berguna di berbagai modul. Seperti yang dikatakan Peter Lawrey, nama yang lebih spesifik berguna.

helper - Kelas membantu kelas lain atau modul.

Tugas yang hanya digunakan dalam modul itu ditempatkan dan tidak masuk akal untuk diimpor di tempat lain. Karenanya namanya bisa lebih spesifik - ModuleName Helper (mis. AdministrationHelper , LoginHelper )


2

Tidak ada jawaban akhir untuk ini. Cari tahu satu skema penamaan dan pertahankan. Memberi nama paket dan kelas Anda adalah bagian penting dari arsitektur perangkat lunak, dan tidak ada yang dapat mengambil keputusan itu dari Anda.

Saya pribadi lebih menyukai XHelper, tetapi saya lebih sering melihat XUtils dalam kode asing.

Saya juga menyukai skema penamaan "jamak" yang akan Anda temukan di JDK dan Guava :

jika kelas berurusan dengan Collectionobjek, itu disebutCollections

Array> Array (jdk)
List> Daftar (guava)
Peta> Peta (guava)

dll.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.