アプリケーション開発の最良事例 > アセットのモデリング > Thing、Thing Template、および Thing Shape を使用したアセットのモデリング
Thing、Thing Template、および Thing Shape を使用したアセットのモデリング
Thing は、プロパティとビジネスロジックを持つ、物理的なデバイス、アセット、製品、システム、人、またはプロセスを表したものです。
ある動作を 1 回定義してそれをアプリケーション全体で再使用するため、ThingWorx で提供されている Thing Template および Thing Shape を使用してアプリケーションをモデリングできます。Thing Template は Thing の基本機能であるプロパティ、サービス、イベント、および購読を提供します。Thing Shape は、1 つのアプリケーション内のアセット間でのプロパティの再使用を可能にします。
Thing は Thing Template から機能を継承します。Thing Template は Thing Shape を実装することで 1 つ以上の追加の特性を派生できます。
エンドユーザーはアプリケーション内の情報を取得したりデータを読み書きしたりするために Thing と対話します。
Thing、Thing Template、および Thing Shape を作成する際の最良事例
Thing、Thing Template、および Thing Shape を作成する際には、以下の最良事例を使用します。
Thing、Thing Template、および Thing Shape の命名規則を定義します。以下の点に留意してください。
すべてのエンティティで標準の命名法を使用します。例: 競合を回避するため、異なるエンティティタイプ間で一意の名前空間プレフィックスを使用できます。
意味のある名前をエンティティに付けます。
作成したすべてのエンティティにわかりやすい説明を含めるようにします。
あいまいな名前は避けます。
できるかぎり、長いエンティティ名は避けます。
詳細については、 エンティティの命名のセクションを参照してください。
作成および修正するすべてのエンティティにタグを使用します。複雑なアプリケーションの場合、これによって同じアプリケーションまたは複数のアプリケーションの各種モジュールを区別できます。顧客は、これによって同じインスタンスの ThingWorx プラットフォーム上の異なるアプリケーションのエンティティを区別できます。開発者は、これによって ThingWorx Composer 内のエンティティを簡単にフィルタし、アプリケーションのモジュールをテスト用にエクスポートできます。同じアプリケーションの異なるモジュール間で異なるタグを使用する予定がある場合は特に、タグの命名規則を設定することをお勧めします。
モジュール内の同じエンティティをプロジェクトにグループ化します。各モジュールに独自のプロジェクトがあります。
できるかぎり、Thing Shape を使用します。
* 
Thing Shape を使用してプロパティとサービスを定義することをお勧めします。Thing Template 上でプロパティおよびサービスを定義した場合、その定義を Thing Shape に移動するのは困難です。
すべてのプロパティ、サービス、およびイベントを Thing Shape レベルで定義します。
Thing Template を使用して Thing Shape をグループ化し、継承をサポートします。
できるかぎり、Thing Template および Thing にはプロパティまたはサービスを実装しないでください。
Thing Shape および Thing Template でのサービスのオーバーライドを許可します。
既成の Thing Shape および Thing Template が編集不可能であることを確認します。
サポートされている API を識別するアノテーションを定義します。これによって、アップグレード時にサービスおよびプロパティが確実に維持されます。
Thing Shape を使用して特定の機能をカプセル化します。Thing Shape を使用することで、ThingWorx 内の既存の Thing Template に新規機能を簡単に追加できます。Thing Shape を Thing に直接実装しないでください。Thing Shape の特性は Thing Template を介して Thing に継承します。
たとえば、カスタムの Thing Template および Thing を使用してアセットを実装している場合、これらの Thing Template に Thing Shape を追加するのは簡単です。これに対し、プロパティまたはサービスが Thing Template に直接定義されている場合、Thing Template または Thing のベース Thing Template は変更できないので、新規機能を使用するためにすべてのアセットを再作成する必要があります。
システム Thing Template から直接 Thing を派生させないでください。ThingWorx によって提供されるベース Thing Template から派生したカスタム Thing Template を作成することをお勧めします。これによって、追加の Thing Shape を実装して Thing Template に追加することで、さらなる機能を後から追加できます。
アプリケーションに多数のリモートデバイスが接続されている場合や、アプリケーションが ThingWorx Edge Micro Server または EDGE SDK を使用する場合、ベース Thing Template として GenericThing Thing Template の代わりに RemoteThing Thing Template を使用します。ファイル転送またはトンネリングを使用するかどうかに応じて、RemoteThingWithTunnelsRemoteThingWithFileTransfer、または RemoteThingWithTunnelsAndFileTransfer Thing Template を使用します。バインドされていない Remote Thing が存在するかどうかをチェックするスクリプトを使用してリモードバインド追加のプロセスを自動化し、これらをプラットフォーム上に自動的に作成することをお勧めします。これによって、新規デバイスが出荷されて運用される際に、Thing がプラットフォーム上に自動的に作成されるようになります。
* 
Thing または Thing Template を作成した後でベース Thing Template を変更することはできません。
ネットワークを使用して、Thing 間の関連を定義します。ネットワーク内で、Thing は別の Thing の親、子、または兄弟となることができます。これによって、階層構造をモデリングできます。
持続性に関する考慮事項
このセクションでは、その他の該当する考慮事項について説明します。
セキュリティ
すべての Thing、Thing Template、Thing Shape を編集不可能にしていることを確認します。
Thing Template または Thing Shape に適切な表示、ランタイム、およびデザインタイムアクセス許可を追加します。
Thing Shape、Thing Template、または Thing へのアクセス権を持つユーザー組織、ユーザーグループ、およびユーザーを定義します。
アップグレード
プロパティおよびタグを使用して Thing、Thing Template、および Thing Shape を整理します。これにより、サーチ、エクスポート、表示アクセス許可の修正、アップグレードするエンティティの識別などのタスクを実行できます。
エンティティ作成の際には正しい命名規則を使用するようにします。これにより、アップグレード時にエンティティ名を変更する手間を省くことができます。
拡張機能とカスタマイズ
コンポーネント Thing を拡張するには、既成の Thing Template を継承するサブタイプ Thing Template を作成します。
拡張機能の開発者の指示に従って、サブタイプ Thing Template 内のサービスおよびプロパティをオーバーライドします。
新規 Thing Shape に新規のサービスおよびプロパティを導入します。