私たちは Qt に基づく組み込みソフトウェア UI フレームワークに取り組んでおり、現在、携帯電話とタブレットの 2 種類のデバイスに対応しています。後で、まったく異なる UI を持つ他のフォーム ファクターが登場する可能性があります。UI は現在、携帯電話とタブレットの両方で似ていますが、違いは主に寸法にあります。アプリケーション開発者 (外部アプリではなく内部) に共通の API を公開して、プラットフォームごとに個別の画面を作成する必要がないようにしたいと考えています。
画面を開発するには、アプリ開発者は Screen クラスから継承するか、PrefScreen クラスなどのより特殊な画面から継承する必要があります。各コンポーネントの統一されたインターフェイスをアプリ開発者に公開したいと考えていましたが、フレームワーク内のプラットフォーム固有の実装を使用していました。次のクラスがあります。
ScreenBase (すべてのプラットフォームに共通のインターフェースを公開します) ScreenPhone : ScreenBase ScreenTablet : ScreenBase
PrefScreenBase (すべてのプラットフォームに共通のインターフェイスを公開します)
PrefScreenPhone: PrefScreenBase PrefScreenTablet: PrefScreenBase
それを達成するために、次の型定義があります。
#ifdef PHONE
typedef ScreenPhone Screen;
typedef PrefScreenPhone PrefScreen;
#elif TABLET
typedef ScreenTablet Screen;
typedef PrefScreenTablet PrefScreen;
#endif
継承構造は次のとおりです
。 ScreenBase |_ScreenPhone
|_ScreenTablet
PrefScreenBase : Screen (ビルド対象のプラットフォームに基づいて ScreenPhone または ScreenTablet に解決されます)
|_PrefScreenPhone
|_PrefScreenTablet
Screen は、スマートフォンのビルドでは ScreenPhone に解決され、タブレットのビルドでは ScreenTablet に解決されます。PrefScreen は、スマートフォンのビルドでは PrefScreenPhone に解決され、タブレットのビルドでは PrefScreenTablet に解決されます。
電話では、階層は ScreenBase->ScreenPhone->PrefScreenBase->PrefScreenPhone になります。タブレットでは、階層は ScreenBase->ScreenTablet->PrefScreenBase->PrefScreenTablet になります。
基本的に、プラットフォーム固有のクラスは共通の *Base クラスから派生し、*Base クラスはビルド対象のプラットフォームに基づいた適切なクラスから派生します。Bridge パターン (http://en.wikipedia.org/wiki/Bridge_pattern) を使用して問題を解決することを検討しましたが、期限がそれを許可していないようです。また、私たちのフレームワークは Qt フレームワークに基づいているため、実装をインターフェイスから分離するのは複雑です。
上記のアプローチは、どのフレームワークでも使用されていますか? 上記のアプローチに大きな問題がありますか? もしそうなら、代替手段は何ですか?私たちの主な目標は、アプリケーション開発者に対してプラットフォームの違いを抽象化し、最大限のコード再利用を保証することです。