クラスをポーリングし、使用可能なすべてのサブクラスを返して、それらに対処できるようにしたいと考えています。配列、辞書、またはその他のものを返すことができます。それらのセットをループして、プロパティを読み取ったり、それぞれから関数を呼び出したりできる限り。
シナリオ: ユーザーが一連のイベントの詳細を入力するフォームを作成したいと考えています。次に、フォームを読み取り、レポートを出力します。イベントの種類ごとに「.Name」がありますが、出力を作成するための入力 (FormOptions) とメソッド (FormatOutput) のセットが異なります。現在、これは複雑なフォームと、ユーザーがフォームを送信した後に実行されるスクリプトで実装されています。
問題は、フォームにオプションを追加するたびに、いくつかの異なる場所でコードを変更しなければならないことです。コードの保守を容易にするために、各イベント タイプのすべてのコードをクラスに含め、使用可能なクラスに基づいてフォームを作成したいと考えています。
例として、Meeting オブジェクトと Travel オブジェクトのコレクションから旅程を作成しています。
Class Itinerary
Class Event
Public Property Get Name()
Name = "Meeting"
End Property
Public Function FormOptions(id)
Form Options = "<div id="& id &">form code for Meeting options</div>"
End Function
Public Sub FormatOutput(Time, Title, Location)
'Make a fancy meeting entry
End Sub
End Class
Class Travel
Public Property Get Name()
Name = "Travel"
End Property
Public Function FormOptions(id)
Form Options = "<div id="& id &">form code for Travel options</div>"
End Function
Public Sub FormatOutput(StartTime, EndTime, Origin, Destination)
'Make a fancy travel entry
End Sub
End Class
End Class
スクリプトを実行すると、ユーザーが一連のイベントを追加できるフォームが作成されます。ユーザーが「会議」と「旅行」を選択するたびに、そのイベント タイプのオプションを入力します。最後に、ユーザーがボタンを押すと、スクリプトはユーザーのすべての入力を一覧表示するきれいなドキュメントを作成します。
将来的には、宿泊という新しい種類のイベントを追加したいと考えています。
Class Lodging
Public Property Get Name()
Name = "Lodging"
End Property
Public Function FormOptions(id)
Form Options = "<div id="& id &">form code for Lodging options</div>"
End Function
Public Sub FormatOutput(Date, Location)
'Make a fancy Lodging entry
End Sub
End Class
Itinerary クラスが新しいクラスを自動的に認識し、利用可能なイベント タイプとして返すように設定するにはどうすればよいですか? これを行う方法はいくつか考えられますが、それらはすべて、使用可能なクラスのインデックスを実際のクラスとは別に保持する必要があり、新しいイベント タイプを追加するときにコードを変更する必要がある場所の数を最小限に抑えようとしています。
この時点で私は何に対してもオープンであるため、フォームの作成方法に関する詳細は意図的に含めていません。また、「継承」、「拡張性」、または「ポリモーフィズム」への言及もおだやかにしてください。私は単なるスクリプターであり、これらの OOP の概念はまだ少しなじみがありません。