クラス構成

ここでは、Thing Interaction Framework で扱うオブジェクトのクラス構成を説明します。Thing Interaction Framework 上の概念や、SDK のクラス設計はこのモデルに沿って設計されています。

なお、以下の内容は明記がない限り、概念モデルを表しており、SDK でのクラス間の関連とは異なる場合があります。

Thing 関連のクラス構成

Thing に関連するクラスの構成を以下に示します。実装上、これらの概念は ThingIFAPI クラスの背後に隠れます。

  • 制御対象の ThingTarget のサブクラスとして表現されます。現状、コマンドの送信先は Thing のみですが、将来はモバイルアプリやその他のデバイスにも拡張できるように Target の概念を導入しています。
  • Thing のオーナーは、Owner として表現され、そのサブクラスに User を定義します。将来、管理者アカウントにも拡張できるように Owner を導入しています。
  • Target は複数の Schema を持つことができます。SDK の実装では、ThingIFAPI クラスのインスタンスを複数個生成し、ThingIFAPI ごとにスキーマを定義する仕組みを用意しています。
  • Target は、トリガー、コマンド、ステートを扱うことができます。多重度は図示したとおりです。

コマンド関連のクラス構成

コマンドに関連するクラスの構成を以下に示します。

  • Command は、アクションとコマンドの実行 に機能を示すように、内部に複数の ActionActionResult を持っています。
  • コマンドの送信先として、1 つの Target を識別します。前述のように、TargetThing を抽象化したものです。SDK の実装上はクラス参照ではなく、ID として Target を持っています。

トリガー関連のクラス構成

トリガーに関連するクラスの構成を以下に示します。

  • Trigger は、トリガーによる自動実行 に示すトリガー実行で使用するクラスです。

    • コマンドの自動実行を行う場合は内部に PredicateCommand を持ちます。
    • Server Code の自動実行を行う場合は PredicateServerCode を持ちます。

    CommandServerCode の両方の多重度が同時に 0 または 1 になることはありません。どちらか一方のみを使用します。

  • Predicate は述語論理の「述語」に相当し、トリガーの実行条件の真偽を返す関数を表します。ステートとの条件比較で判断する StatePredicate、単発の時間条件に基づく ScheduleOncePredicate、繰り返しの時間条件に基づく SchedulePredicate を想定しています。

  • コマンドの自動実行を行う場合、TriggerCommand を持っていますが、これはコマンド実行の雛形に相当するものです。実行に使用されるコマンドは、このコマンドを雛形として新規に作成されます。

なお、Trigger 以下のクラスは、SDK の実装において以下のようなクラス構成を取っています。クラス名は Android のものです。iOS も基本的に同じですが、名前の表現が異なります。

  • PredicateCommandServerCode の関係は概念モデルと同様です。PredicateCommand、または、PredicateServerCode の組み合わせで使用します。
  • Predicate は、サブクラスとして StatePredicateScheduleOncePredicate、および SchedulePredicate を持っています。
  • ステートとの条件比較を行う StatePredicate は、内部に ConditionTriggersWhen を持っています。これは ステート条件 に示すように、ステートとの比較条件、および、それが満たされたときに実行するか、満たされなかったときに実行するかなどの実行条件です。TriggersWhen は実装上は enum のため、実際にはクラスの属性のように扱います。
  • 単発の時間を指定する ScheduleOncePredicate は、内部に属性 scheduleAt を持っています。これは 時間条件(単発) に示すように、トリガーを一度だけ実行する時間条件です。
  • 繰り返しの時間を指定する SchedulePredicate は、内部に属性 schedule を持っています。これは 時間条件(繰り返し) に示すように、トリガーを繰り返し実行する時間条件です。
  • Condition は式のツリー構造のルートとなる Clause を持っており、式の項を EqualsNotEquals などの Clause サブクラスで定義できます。AndOr は、条件にする項を再帰によって表現できます。

実装方法については、アプリ開発ガイド(AndroidiOSJavaScript)をご覧ください。