これが私の問題です。ゲームパッド、よくレースする、ジョイスティックなど、さまざまなHIDデバイスからの入力を読みたいのですが、ほとんどすべてのゲームコントローラです。問題は、それらすべてに異なる入力があることです。
ゲームパッドにはボタン、スイッチ、スティックがあり、レースウェルにはギアスティックが付いている場合があります。これらのさまざまなコンポーネントをすべて3つに抽象化して、可能なすべての組み合わせを持つ基本クラスを作成するのではなく、
abstract class Device
{
public Buttons Buttons;
public Axes Axes;
public Switches Switches;
public GearSticks GearSticks;
//many more
}
私は今持つことができます:
abstract class Device
{
public Buttons Buttons; //on or off
public Axes Axes; //range [-100%:100%]
public Switches Switches; //multiple states
}
すべての入力を3種類に抽象化できるため、すべての具体的な実装を介して拡張に対して開かれている間、クラスを閉じたままにできるため、最初はこれに満足しました。
しかしその後、私は自分自身にかかわらず、私は避けられないが遅延していた場合にどのような?ある日Device
クラスに別のフィールドを追加する必要がある場合はどうなりますか?トラックボールのようなものはサポートしていません!
このクラスを将来証明できる方法はありますか?私がそれを見る方法では、私はこのようなものになるでしょう:
public Device1 : Device
{
//buttons
//trackball
}
public Device2 : Device
{
//Switch
//Axis
}
public Device3 : Device
{
//trackball
//switch
}
また、実装する何か新しいものがあるたびに、基本クラスにプロパティを追加し続ける必要があります。
parameter1=value1¶meter2=value2
、など