私は、ユーザーが基本的に特定の条件に基づいてアクションを実行する単純な「スクリプト」を作成できるようにする、ウィザードタイプのアプリケーションのようなものに取り組んでいます。それらが構築するスクリプトはデータベースに保存され、変更は一般的であるため、ある種の前方のみのテキスト生成はオプションではありません。私のプログラムは、この内部データベース構造を必要な実際のスクリプト出力に変換するため、スクリプトを変更するたびに出力を再生成します。
この情報を格納できる優れたデータベース構造についてのアドバイスを探しています。現在作業中ですが、少しわかりやすくなるような明らかなものを見逃した場合は、興味があります。任意の提案をいただければ幸いです。
詳細を説明するために、ユーザーがGUIで条件とアクションを選択することで作成できる「スクリプト」のタイプの一般化された例を次に示します。
if ($variableA == 100 && $variableB > 25 && $variableC < 10)
{
performAction();
performAnotherAction();
if ($variableC == 0)
{
performYetAnotherAction();
}
else if ($variableC == 1 || $variableC == 2)
{
performEvenMoreActions();
}
}
else
{
performDefaultAction();
}
明確にするために、何が可能で何が不可能かについてのいくつかのメモ:
- 「if」条件には、任意の数の「else if」条件と、オプションの「else」を付加できます。
- 各条件には任意の数の「テスト」(
$variableA == 100
など)を含めることができますが、すべてのテストはとして表すことができるため(<variable>,<operator>,<test value>)
、より複雑な条件について心配する必要はありません。 - 各条件には任意の数のテストを含めることができますが、それらは常に同じブール演算子によって結合されます。つまり、条件付きに複数のテストがある場合、それらは常にによって結合されるか、常にによって
&&
結合され||
、混合はありません。 - 条件文は無限にネストできるため、何らかの階層構造が必要です。
- 条件文の内部には、定義されているのと同じ順序で実行する必要のあるアクションがいくつでも存在する可能性があります。アクションは関数名として簡単に表すことができ、他の「アクションタイプ」について心配する必要はありません。