クラス構成
ここでは、Thing Interaction Framework で扱うオブジェクトのクラス構成を説明します。Thing Interaction Framework 上の概念や、SDK のクラス設計はこのモデルに沿って設計されています。
なお、以下の内容は明記がない限り、概念モデルを表しており、SDK でのクラス間の関連とは異なる場合があります。
Thing 関連のクラス構成
Thing に関連するクラスの構成を以下に示します。実装上、これらの概念は ThingIFAPI
クラスの背後に隠れます。
- 制御対象の
Thing
はTarget
のサブクラスとして表現されます。現状、コマンドの送信先は Thing のみですが、将来はモバイルアプリやその他のデバイスにも拡張できるようにTarget
の概念を導入しています。 - Thing のオーナーは、
Owner
として表現され、そのサブクラスにUser
を定義します。将来、管理者アカウントにも拡張できるようにOwner
を導入しています。 Target
は複数のSchema
を持つことができます。SDK の実装では、ThingIFAPI
クラスのインスタンスを複数個生成し、ThingIFAPI
ごとにスキーマを定義する仕組みを用意しています。Target
は、トリガー、コマンド、ステートを扱うことができます。多重度は図示したとおりです。
コマンド関連のクラス構成
コマンドに関連するクラスの構成を以下に示します。
Command
は、アクションとコマンドの実行 に機能を示すように、内部に複数のAction
とActionResult
を持っています。- コマンドの送信先として、1 つの
Target
を識別します。前述のように、Target
はThing
を抽象化したものです。SDK の実装上はクラス参照ではなく、ID としてTarget
を持っています。
トリガー関連のクラス構成
トリガーに関連するクラスの構成を以下に示します。
Trigger
は、トリガーによる自動実行 に示すトリガー実行で使用するクラスです。- コマンドの自動実行を行う場合は内部に
Predicate
とCommand
を持ちます。 - Server Code の自動実行を行う場合は
Predicate
とServerCode
を持ちます。
Command
とServerCode
の両方の多重度が同時に 0 または 1 になることはありません。どちらか一方のみを使用します。- コマンドの自動実行を行う場合は内部に
Predicate
は述語論理の「述語」に相当し、トリガーの実行条件の真偽を返す関数を表します。ステートとの条件比較で判断するStatePredicate
、単発の時間条件に基づくScheduleOncePredicate
、繰り返しの時間条件に基づくSchedulePredicate
を想定しています。コマンドの自動実行を行う場合、
Trigger
はCommand
を持っていますが、これはコマンド実行の雛形に相当するものです。実行に使用されるコマンドは、このコマンドを雛形として新規に作成されます。
なお、Trigger
以下のクラスは、SDK の実装において以下のようなクラス構成を取っています。クラス名は Android のものです。iOS も基本的に同じですが、名前の表現が異なります。
Predicate
、Command
、ServerCode
の関係は概念モデルと同様です。Predicate
とCommand
、または、Predicate
とServerCode
の組み合わせで使用します。Predicate
は、サブクラスとしてStatePredicate
、ScheduleOncePredicate
、およびSchedulePredicate
を持っています。- ステートとの条件比較を行う
StatePredicate
は、内部にCondition
とTriggersWhen
を持っています。これは ステート条件 に示すように、ステートとの比較条件、および、それが満たされたときに実行するか、満たされなかったときに実行するかなどの実行条件です。TriggersWhen
は実装上は enum のため、実際にはクラスの属性のように扱います。 - 単発の時間を指定する
ScheduleOncePredicate
は、内部に属性scheduleAt
を持っています。これは 時間条件(単発) に示すように、トリガーを一度だけ実行する時間条件です。 - 繰り返しの時間を指定する
SchedulePredicate
は、内部に属性schedule
を持っています。これは 時間条件(繰り返し) に示すように、トリガーを繰り返し実行する時間条件です。 Condition
は式のツリー構造のルートとなるClause
を持っており、式の項をEquals
、NotEquals
などのClause
サブクラスで定義できます。And
とOr
は、条件にする項を再帰によって表現できます。
実装方法については、アプリ開発ガイド(Android、iOS、JavaScript)をご覧ください。