Inilah masalah saya: Saya ingin membaca input dari berbagai perangkat HID seperti gamepad, racing well, joystick, dll. Cukup banyak pengendali permainan apa pun. Masalahnya adalah mereka semua memiliki input yang berbeda.
Gamepad memiliki tombol, sakelar, dan stik, sementara arena balap mungkin memiliki stik gigi. Saya berhasil mengabstraksikan semua komponen yang berbeda ini menjadi hanya 3 jadi alih-alih memiliki kelas dasar dengan semua kemungkinan kombinasi:
abstract class Device
{
public Buttons Buttons;
public Axes Axes;
public Switches Switches;
public GearSticks GearSticks;
//many more
}
Sekarang saya dapat memiliki:
abstract class Device
{
public Buttons Buttons; //on or off
public Axes Axes; //range [-100%:100%]
public Switches Switches; //multiple states
}
Pada awalnya saya senang dengan ini karena tampaknya mencakup semua jenis input yang mungkin dan sehingga kelas saya bisa tetap tertutup sementara terbuka untuk ekstensi melalui semua implementasi konkret karena semuanya dapat diabstraksi menjadi hanya 3 jenis input.
TETAPI kemudian saya berpikir sendiri bagaimana jika saya hanya menunda hal yang tak terhindarkan? Bagaimana jika suatu hari saya harus menambahkan bidang lain ke Device
kelas saya ? Itu tidak mendukung sesuatu seperti trackball!
Apakah ada cara saya bisa membuktikan kelas ini di masa depan? Cara saya melihatnya saya akan berakhir dengan sesuatu seperti ini:
public Device1 : Device
{
//buttons
//trackball
}
public Device2 : Device
{
//Switch
//Axis
}
public Device3 : Device
{
//trackball
//switch
}
Dan saya harus terus menambahkan properti ke kelas dasar saya setiap kali ada sesuatu yang baru untuk diterapkan.
parameter1=value1¶meter2=value2
dll.