Saya baru-baru ini mengalami situasi berikut.
class A{
public:
void calculate(T inputs);
}
Pertama, A
merepresentasikan objek di dunia fisik, yang merupakan argumen kuat untuk tidak memisahkan kelas. Sekarang, calculate()
ternyata fungsinya cukup panjang dan rumit. Saya merasakan tiga kemungkinan struktur untuk itu:
- tulis itu sebagai dinding teks - keuntungan - semua informasi ada di satu tempat
- menulis
private
fungsi utilitas di kelas dan menggunakannya dalamcalculate
tubuh - kerugian - seluruh kelas tidak tahu / tidak peduli / mengerti tentang metode-metode itu tulis
calculate
cara berikut:void A::calculate(T inputs){ auto lambda1 = () [] {}; auto lambda2 = () [] {}; auto lambda3 = () [] {}; lambda1(inputs.first_logical_chunk); lambda2(inputs.second_logical_chunk); lambda3(inputs.third_logical_chunk); }
Bisakah ini dianggap sebagai praktik yang baik atau buruk? Apakah pendekatan ini mengungkapkan masalah? Secara keseluruhan, haruskah saya menganggap ini sebagai pendekatan yang baik ketika saya dihadapkan pada situasi yang sama?
EDIT:
class A{
...
public:
// Reconfiguration of the algorithm.
void set_colour(double colour);
void set_density(double density);
void set_predelay(unsigned long microseconds);
void set_reverb_time(double reverb_time, double room_size);
void set_drywet(double left, double right);
void set_room_size(double value);;
private:
// Sub-model objects.
...
}
Semua metode itu:
- dapatkan nilai
- menghitung beberapa nilai lain, tanpa menggunakan status
- panggil beberapa "objek sub-model" untuk mengubah statusnya.
Ternyata, kecuali set_room_size()
, metode-metode itu hanya meneruskan nilai yang diminta ke sub-objek. set_room_size()
, di sisi lain, melakukan beberapa layar formula yang tidak jelas dan kemudian (2) melakukan setengah layar memanggil sub-objek setter untuk menerapkan berbagai hasil yang diperoleh. Karena itu, saya telah memisahkan fungsi menjadi dua lambda dan memanggil mereka di akhir fungsi. Seandainya saya bisa membaginya menjadi potongan yang lebih logis, saya akan mengisolasi lebih banyak lambda.
Terlepas dari itu, tujuan dari pertanyaan saat ini adalah untuk menentukan apakah cara berpikir itu harus bertahan, atau apakah yang terbaik tidak menambah nilai (keterbacaan, pemeliharaan, kemampuan debug dll).
Firstly, A represents an object in the physical world, which is a strong argument for not splitting the class up.
Tentunya A
merepresentasikan data tentang suatu objek yang bisa eksis di dunia fisik. Anda dapat memiliki instance A
tanpa objek nyata dan objek nyata tanpa instance A
, jadi memperlakukan mereka seolah-olah satu dan yang sama tidak masuk akal.
calculate()
tahu tentang sub-fungsi tersebut.
A
, itu agak berlebihan.
A
mewakili sebuah objek di dunia fisik, yang merupakan argumen kuat untuk tidak memisahkan kelas." Sayangnya, saya diberitahu hal ini ketika saya mulai pemrograman. Butuh bertahun-tahun bagiku untuk menyadari bahwa itu adalah sekelompok hoki kuda. Ini alasan mengerikan untuk mengelompokkan berbagai hal. Saya tidak bisa mengartikulasikan apa yang alasan yang baik untuk hal-hal kelompok (setidaknya untuk kepuasan saya), tapi satu yang adalah salah satu Anda harus membuang sekarang. Pada akhirnya, semua "kode yang baik" adalah berfungsi dengan baik, relatif mudah dipahami, dan relatif mudah diubah (yaitu, perubahan tidak memiliki efek samping yang aneh).