実験からのデータ収集を自動化するソフトウェアを作成していて、ビジネス オブジェクト間の関係を表現するための助けが必要でした。
と呼ばれるExperiment
型、 と呼ばれる型、および型の派生物を受け入れてデータを入力する必要がSample
ある未実装のRunOnSample
メソッドがあります。Experiment
Sample
Public MustInherit Class Experiment
Public Property TestDate As Date
Public Property Experimenter As String
Public MustOverride Sub RunOnSample(sample As Sample)
End Class
Public MustInherit Class Sample
Public Property UnitLotCode As String
End Class
Experiment
さまざまな種類のデータを生成するさまざまな実験 ( のサブタイプで表される) があるため、これらの型はどちらも実際にはインスタンス化できません。Sample
各実験には、実験によって生成されたデータを格納するためのプロパティを持つ、一致するサブタイプがあります。すべての実験に共通するいくつかのプロパティと、すべてのサンプルに対して記録されるいくつかのデータがあるため、基本クラスが必要であることに注意してください。
たとえば、 はThicknessExperiment
厚さデータを測定し、ロット コードをスキャンして、このデータを に入力しますThicknessSample
。
Public Class ThicknessExperiment
Public Overrides Sub RunOnSample(sample As ThicknessSample)
Dim data = GetDataFromMeasurementDevice()
sample.UnitLotCode = data.LotCode
sample.Thickness = data.Thickness
End Sub
End Class
Public MustInherit Class ThicknessSample
Public Property Thickness As Single
End Class
ここでの問題は、パラメーターの型がコンパイラーに受け入れられないことです。の実装はRunOnSample
を受け入れる必要がありSample
、ThicknessSample
(または の他のサブタイプSample
) は受け入れません。おそらくこれは、コンパイラが私のやり方を許してくれていれば、派生した実験は親クラスと同じインターフェースを持たなくなり、ポリモーフィックでなくなるからです。
この問題に対処するために私が考えることができる唯一の方法はSample
、メソッドを使用する前に、引数をメソッド内の適切なサブタイプにキャストすることです。私がしようとしていることを実装するためのより良い方法はありますか? XYZExperiment.RunOnSample
メソッドとXYZSample
引数の強く型付けされた関連付けを維持するアプローチが望ましいですか?