Di Jawa, haruskah pembantu pribadi menggunakan metode publik di atas atau di bawah? [Tutup]

24

Saya telah memperhatikan bahwa seorang rekan kerja dan saya memiliki praktik yang berlawanan mengenai pemesanan metode di kelas Java kami. Salah satu dari kami memulai kelas dengan metode publik utamanya, dan kemudian menempatkan semua pembantu pribadi sesudahnya. Yang lain dari kita memastikan bahwa metode publik di akhir.

Jelas, ini hanya masalah gaya dan tidak ada jawaban yang benar. Namun, sebelum kita memutuskan bahwa masalah ini hanyalah pertarungan Yooks vs Zooks lainnya dan hanya memilih satu atau yang lain secara sewenang-wenang, saya bertanya-tanya apakah mungkin ada rekomendasi panduan gaya Jawa standar atau beberapa alasan praktis mengapa satu pendekatan lebih baik daripada yang lain.

Brandon Yarbrough
sumber
13
Itu tidak masalah. Lempar koin. Pilih salah satu. Tetap dengan itu.
kemungkinan duplikat Penempatan Metode Pembantu
Kilian Foth
@KilianFoth - Pertanyaan ini ditanyakan 3 bulan sebelumnya dan memiliki lebih banyak jawaban. Bukankah itu membuat pertanyaan yang dimaksud merupakan duplikat dari pertanyaan ini?
Brandon Yarbrough

Jawaban:

25

Meskipun hal itu memang turun ke preferensi secara normal, Anda tentu harus mencoba untuk mematuhi standar umum dalam organisasi Anda. Jadi, apa pun yang Anda putuskan, pilih satu standar dan adopsi secara universal.

Adapun yang harus dipilih, jika Anda mengikuti saran seperti yang ditawarkan dalam Kode Bersih , Anda akan dapat membaca file dari atas ke bawah seperti artikel surat kabar, yang secara alami akan menyarankan bahwa metode pembantu muncul setelah metode mereka. membantu. Ini akan mengarah pada keterbacaan maksimum dari struktur kode. Jadi jika Anda memilikinya

public void doSomething()
{
     helpMe();
     helpMeAgain();
}

File Anda akan disusun sebagai

public void doSomething() { }
private void helpMe() { }
private void helpMeAgain() { }

Efek samping lain dari hal ini adalah Anda menemukan bahwa pembantu Anda memiliki pembantu mereka sendiri, dan itu membantu Anda mengetahui apa yang sebenarnya Anda miliki adalah kelas lain yang tinggal di dalam file Anda, dan Anda dapat dengan bersih menolak untuk mengekstraknya ke kelasnya sendiri karena metode tersebut adalah sudah dikelompokkan bersama. Tapi itu manfaat kedua.

Anthony Pegram
sumber
Senang Anda mengatakan ini atau aku akan memiliki. Saya bertanya kepada Bob Martin sendiri bagaimana ia memesan sesuatu jika masing-masing 2 metode menggunakan metode ke-3. Dalam hal ini ia menempatkan 3 di bawah dua lainnya.
Daniel Kaplan
1
Contoh Anda tidak menunjukkannya, tetapi ini mengarah ke metode publik yang dicampur di antara metode pribadi. Saya menggunakan teknik ini, tetapi sering kali saya merasa sobek dan ingin meningkatkan semua metode publik ke atas, karena ada juga banyak yang bisa dikatakan untuk membaca antarmuka publik dengan mudah.
Sean
@Sean, baik, saya akan biasanya mencoba untuk membatasi baik API umum kelas saya, atau meninggalkan sebagai fasad jika sesuai tapi kemudian mendorong pembantu pelaksanaan ke dalam kolaborator. Tes, refactor, ekstrak, ulangi. Tetapi tentu saja tergantung pada seberapa jauh Anda ingin pergi. Saya lebih suka kelas saya yang kecil.
Anthony Pegram
11

Metode publik adalah antarmuka kelas. Seseorang tertarik menggunakan kelas Anda hanya akan peduli tentang antarmuka. Dari perspektif pengguna kelas, akan sangat berguna untuk memiliki metode publik terlebih dahulu untuk mengurangi pengguliran.

mike30
sumber
5

Dalam C dan C ++, metode helper sering didahulukan karena Anda tidak perlu deklarasi. Banyak orang dibawa kebiasaan yang lebih ke dalam bahasa lain di mana itu tidak masalah.

Saya lebih suka metode publik di atas karena biasanya ketika saya membuka file saya sedang mencari antarmuka publik. Saya tidak ingin harus menggulir melewati semua detail implementasi. Itu juga merupakan gaya paling populer yang pernah saya lihat, jadi ada yang bisa dikatakan untuk konvensi.

Karl Bielefeldt
sumber
2

Saya suka urutan metode dalam kelas didasarkan pada keterbacaan dan konteks, bukan visibilitas.

yaitu metode 'terbuka' mungkin dimiliki sebelum 'tutup'. Jika dua metode publik 'a' dan 'b' memanggil pribadi 'c', dan hanya mereka yang menyebutnya - maka saya suka 'c' untuk berada di sebelah mereka.

Saya tidak berpikir konvensi metode pemesanan berdasarkan visibilitas adalah hal yang baik.

ptyx
sumber
1

Saya cenderung lebih suka melihat kelas saya di mana anggota terdaftar berdasarkan urutan kepentingan / visibilitas (di sini yang saya maksudkan memiliki dampak langsung pada antarmuka publik).

Dengan demikian fungsi pribadi memiliki kecenderungan untuk ditekan.

Ada pengecualian untuk hal ini di mana saya juga akan cenderung untuk mengelompokkan fungsi yang serupa bersama-sama sehingga masih mungkin untuk menemukan fungsi pribadi kecil yang berbaur dengan barang-barang publik.

Ini, seperti yang Anda katakan, adalah masalah selera.

Namun ketika bekerja pada kode yang bukan milik saya, saya akan mencoba dan mengikuti konvensi apa pun yang digunakan dalam proyek.

Salah satu cara bagus yang saya temukan untuk melacak hal ini adalah dengan (dengan asumsi di sini Anda bekerja dengan Eclipse) membuat konfigurasi pemformatan kode dan mengekspornya dengan sumber proyek dan mengkomitnya ke kontrol sumber. Dengan begitu, konvensi kode terbaru dan terhebat untuk proyek ini hanya dengan beberapa klik saja untuk mengatur dan membuat kebiasaan CTRL-SHIFT-F sebelum Anda melakukan akan mencegah banyak pertengkaran.

Bonus tambahan menggunakan pemformat otomatis adalah Anda dapat melakukan hal-hal dalam konvensi apa pun yang membuat Anda bahagia dan hanya memformat kode sebelum melakukan. YMMV tergantung pada konvensi dan alat pemformatan tersebut.

Newtopian
sumber