Saya perlu mengembalikan 2 nilai dari suatu metode. Pendekatan saya adalah sebagai berikut:
- buat kelas dalam dengan 2 bidang yang akan digunakan untuk menjaga 2 nilai tersebut
- letakkan metode di dalam kelas itu
- instantiate kelas dan panggil metode.
Satu-satunya hal yang akan diubah dalam metode adalah bahwa pada akhirnya itu akan menetapkan 2 nilai tersebut ke bidang instance. Lalu saya bisa mengatasi nilai-nilai itu dengan merujuk ke bidang objek itu.
Apakah ini desain yang bagus dan mengapa?
java
design-patterns
dhblah
sumber
sumber
BitInteger[] java.math.BigInteger.divideAndRemainder(BitInteger val)
. Ini mengembalikan 2 bilangan bulat sebagai nilai pengembaliannya dalam array.Jawaban:
Saya akan berdebat ini di sepanjang baris berikut:
Untuk meringkas, saya akan melihat apakah saya bisa mengubah "objek data" ini menjadi kelas yang lengkap dengan data dan perilaku. Sebagai komentar tambahan, Anda mungkin ingin membuat kelas tidak dapat diubah, karena statusnya diatur sekali. Menjadikannya tidak berubah akan membantu mencegahnya diatur secara tidak benar, atau dimodifikasi kemudian (katakanlah, seseorang mengatur salah satu bidang menjadi nol dan meneruskannya).
Sunting: Seperti yang ditunjukkan oleh Patkos Csaba, prinsip yang diterapkan di sini adalah Prinsip Tanggung Jawab Tunggal ( SRP ) - kelas yang Anda coba buat harus benar-benar memiliki satu tanggung jawab (didefinisikan sebagai alasan untuk berubah ). Pedoman desain ini akan membantu Anda mengetahui apakah dua bidang Anda termasuk dalam satu kelas, atau tidak. Untuk tetap menggunakan contoh Wikipedia, kelas Anda dapat dilihat sebagai jenis laporan, dalam hal ini sesuai dengan SRP, tetapi sulit untuk berkomentar tanpa informasi lebih lanjut.
sumber
Pair<OneClass, AnotherClass>
. Beberapa orang akan tidak setuju . Dalam setiap kasus,Pair
harus merupakan detail implementasi dan tidak pernah muncul dalam metode API publik.Ada konsep Tuple yang ditampilkan dalam bahasa lain, seperti Python.
Seseorang dapat mengembalikan instance kelas generik ini yang mudah digunakan kembali:
sumber
create()
, untuk menghindari keharusan menentukan parameter tipe dalam konstruktor. Juga, saya akan memberi nama kelas iniPair
daripadaTuple
, mengingat itu hanya dapat mewakili 2-tuple nilai.Tampaknya kelas ini mengambil tanggung jawab dari kelas lain, dan ini membuat saya berpikir bahwa desain ini tidak bagus.
Untuk metode yang mengembalikan nilai multible, saya lebih suka
atau
Contoh untuk opsi kedua:
sumber
Menempatkan beberapa nilai balik dari metode ke dalam kelas / strukturnya sendiri sering digunakan dalam sistem berbasis pesan yang memiliki satu kelas untuk Permintaan dan tanggapan . Contohnya adalah Simple Object Access Protocol (SOAP) .
Setidaknya itu cukup umum. Apakah ini baik atau buruk tergantung pada penggunaan khusus Anda.
sumber
Jawaban singkat: Anda dapat mengembalikan array atau Daftar dengan dua nilai.
Saya pribadi akan menulis dua metode yang berbeda, seperti
sumber