Aquí está mi problema: quiero leer la entrada de diferentes dispositivos HID, como un gamepad, carreras, joystick, etc. Casi cualquier controlador de juegos. El problema es que todos tienen diferentes entradas.
El gamepad tiene botones, interruptores y palos, mientras que el pozo de carreras podría tener una palanca de cambios. Logré abstraer todos estos componentes diferentes en solo 3, así que en lugar de tener una clase base con todas las combinaciones posibles:
abstract class Device
{
public Buttons Buttons;
public Axes Axes;
public Switches Switches;
public GearSticks GearSticks;
//many more
}
Ahora puedo tener:
abstract class Device
{
public Buttons Buttons; //on or off
public Axes Axes; //range [-100%:100%]
public Switches Switches; //multiple states
}
Al principio estaba contento con esto, ya que parecía cubrir todos los tipos posibles de entrada y, por lo tanto, mi clase puede permanecer cerrada mientras está abierta a la extensión a través de todas las implementaciones concretas, ya que todo se puede abstraer a solo 3 tipos de entrada.
PERO entonces pensé para mí mismo ¿qué pasa si solo estoy retrasando lo inevitable? ¿Qué pasa si algún día tendré que agregar otro campo a mi Device
clase? ¡No es compatible con algo como un trackball!
¿Hay alguna manera de que pueda probar esta clase en el futuro? A mi modo de ver, terminaría con algo como esto:
public Device1 : Device
{
//buttons
//trackball
}
public Device2 : Device
{
//Switch
//Axis
}
public Device3 : Device
{
//trackball
//switch
}
Y tendría que seguir agregando propiedades a mi clase base cada vez que haya algo nuevo que implementar.
parameter1=value1¶meter2=value2
etc.