データ収集ユニットと多くの異なるセンサー(電圧センサー、角度センサー、圧力センサーなど)で構成されるシステムを再設計しています。
ソフトウェアドメインモデルには、基本Sensor
クラスがあり、そこからすべての具体的なセンサーが派生します。
public abstract class Sensor
{
public virtual String Name { get; }
public virtual UnitOfMeasurement Unit { get; }
public virtual int SamplingRate { get; }
public virtual CalibrationModel Calibration { get; }
}
これらのサブクラスはすべて、当社が販売する物理センサーを表しており、各プロパティに「ハードコードされた」値があります。たとえば、VoltageSensor
の名前は「Voltage」、単位は「UnitOfMeasurement.Volt」、SamplingRateは「1000」などです。
私が解決しようとしている現在の問題はこれです:
新しい実際のセンサーハードウェアが開発され、ポートフォリオに追加されるたびに、次の「ショットガン手術」を行う必要があります。
Sensor
サブクラスを作成します。私が理解しているように、各物理センサー(ハードウェア)は概念的なユニットであり、再コンパイルおよび再デプロイする必要がないように、実行中のシステムに「プラグイン」できる必要があります。これは起こっていることではないので、どうすればこの「プラグ可能性」を達成し、これまでうまく機能していた多態的な動作を維持できるのだろうか(ポートフォリオを変更する必要があるたびを除く)。
私が取ることができるいくつかの「ポリモーフィズム上の構成」の代替設計はありますか?
動作(メソッドの実装)がまったく異なり、値のみが異なるクラスのサブクラスが多数ある場合は、それらすべてを1つのクラスで表し、以前に読んだ方がよい場合がよくあります。構成ファイル、データベーステーブル、またはその他のデータソースからのハードコードされた値。
新しいセンサータイプを追加するには、構成に行を追加するだけです。再コンパイルは不要になり、構成が人間が読める形式の場合、プログラミングの知識がなくても誰かが再コンパイルを行うことができます。
スマートに実行すると、プログラムの実行中に構成を再読み取りできるようにすることもできるため、更新ではプログラムを再起動する必要もありません。