Hier ist mein Problem: Ich möchte Eingaben von verschiedenen HID-Geräten wie einem Gamepad, einem Rennsport, einem Joystick usw. lesen. So ziemlich jeder Gamecontroller. Das Problem ist, dass sie alle unterschiedliche Eingänge haben.
Das Gamepad verfügt über Tasten, Schalter und Sticks, während der Rennsport möglicherweise einen Schalthebel hat. Ich habe es geschafft, all diese verschiedenen Komponenten in nur 3 zu abstrahieren, anstatt eine Basisklasse mit allen möglichen Kombinationen zu haben:
abstract class Device
{
public Buttons Buttons;
public Axes Axes;
public Switches Switches;
public GearSticks GearSticks;
//many more
}
Ich kann jetzt haben:
abstract class Device
{
public Buttons Buttons; //on or off
public Axes Axes; //range [-100%:100%]
public Switches Switches; //multiple states
}
Anfangs war ich damit zufrieden, da es alle möglichen Arten von Eingaben abzudecken schien und meine Klasse geschlossen bleiben kann, während sie über alle konkreten Implementierungen erweitert werden kann, da alles auf nur drei Arten von Eingaben abstrahiert werden kann.
ABER dann überlege ich mir was, wenn ich nur das Unvermeidliche verzögere? Was ist, wenn ich eines Tages meiner Device
Klasse ein weiteres Feld hinzufügen muss ? Es unterstützt so etwas wie einen Trackball nicht!
Gibt es eine Möglichkeit, diese Klasse zukunftssicher zu machen? So wie ich es sehe, würde ich am Ende so etwas haben:
public Device1 : Device
{
//buttons
//trackball
}
public Device2 : Device
{
//Switch
//Axis
}
public Device3 : Device
{
//trackball
//switch
}
Und ich müsste meiner Basisklasse jedes Mal Eigenschaften hinzufügen, wenn etwas Neues implementiert werden muss.
parameter1=value1¶meter2=value2
usw.