3 in 1:デスクトップ、モバイル、Web。 クロスプラットフォーム開発



1つのプロジェクトのフレームワーク内での開発には、多くの利点があります。 まず、プログラムのビジネスロジックの1つの実装を使用できます。 第二に、単体テストの単一のセットを持つ機会です。 第三に、これは使い慣れた言語(C ++)と開発環境の使用です。

この記事では、クロスプラットフォームアプリケーションの作成に役立ついくつかのプログラミング方法といくつかのライブラリについて説明します。

「電卓」などの小さなアプリケーションを作成した経験に基づく





クロスプラットフォーム開発

3つではなく1つのコードを作成すると便利です。これにより、プログラムの作成にかかる時間が大幅に短縮されます。 しかし、残念なことに、各プラットフォームには独自の依存コード(機能)があります。 多くの場合、特定のプラットフォームによって提供される機能は、単に不可欠です。 この問題の考えられる解決策は設計戦略です(詳細については、Alexandrescuの著書「Modern Design in C ++」を参照してください)。 すべての依存コードは、 クラスと呼ばれる構成クラスに配置されます。このポリシーは 、後でより大きなクラスを構成します。

クロスプラットフォームライブラリ( booststlなど)を使用すると、開発も簡単になります。



MVC

MVCモデルを使用すると、アプリケーションの設計が大幅に簡素化されます。 ほとんどのプラットフォーム依存関係は、Viewコンポーネントにローカライズされています。



Htmlayout

グラフィカルインターフェイスを整理するために、 Htmlayoutライブラリが使用されました。これにより、 htmlおよびcssを使用してプログラムのグラフィカルインターフェイスを記述できます。 Webベースのツールを使用したGUIの実装には、多数のWebデザイナーから始まり、膨大な数の既製の設計オプションで終わる多くの肯定的な側面があります。 また、ターゲットプラットフォームの1つとして「web」を使用すると、 html + cssの形式でデザインを実装するコストが削減されます。

HtmlayoutにはWindows Mobileの実装があり、モバイルプラットフォームでも使用できます。



プログラム計算機

「電卓」のようなプログラムが選択されたのは、MVCモデルを完全に実装できるようにし、私にとって興味深い「ブースト」ライブラリのいくつかのコンポーネントの使用を伴うためです。



デスクトップ

デスクトップ(私のネイティブプラットフォーム)向けのアプリケーションの実装は、主にプログラムで使用されるデータモデルの記述とプログラムの一般的なアーキテクチャの実装を伴いました。 私にとっての新しいポイントは、 Htmlayoutライブラリの使用です。 ただし、グラフィカルインターフェイスの実装に問題はありませんでした。



メインクラスの構成とインスタンス化が行われるmain.cppファイルのコード:

#include "stdafx.h"<br/>

<br/>

//Calculator includes<br/>

#include "RegexNumberCheckModel.h"<br/>

#include "CalculatorModel.hpp"<br/>

#include "DesktopView.h"<br/>

#include "CalculatorController.hpp"<br/>

<br/>

CAppModule _Module;<br/>

<br/>

int APIENTRY WinMain( HINSTANCE hInstance<br/>

,HINSTANCE hPrevInstance<br/>

,LPSTR lpCmdLine<br/>

,
int nShowCmd)<br/>

{<br/>

<br/>

//MVC concept:<br/>

     //Model<br/>

     typedef CalculatorModel< double , Operations, RegexNumberCheckModel> MyCalculatorModel;<br/>

MyCalculatorModel calcModel;<br/>

//View<br/>

     typedef DesktopView<MyCalculatorModel> MyCalculatorView;<br/>

MyCalculatorView calcView;<br/>

//Controller<br/>

     typedef CalculatorController<MyCalculatorModel, MyCalculatorView::ViewPolicy> MyCalculatorController;<br/>

MyCalculatorController calcController(calcModel, calcView);<br/>

<br/>

calcView.Run(hInstance);<br/>

<br/>

return 0;<br/>

}








モバイル

モバイルプラットフォームの実装は、記事「WTL:WinCE / Windows Mobileベースのモバイルおよび組み込みデバイスのプログラミング 」で説明されているテストプログラム「Hello、world」の作成から始まりました。 計算機のGUIを実装するには、プログラムウィンドウとライブラリウィンドウをバインドし、cssテンプレートを少し変更するだけで済みました。 データモデルを適応させるには、 「boost / xpressive」を使用する代わりに、独自のクラスで入力検証を構成する必要がありました。



main.cppモバイルバージョンのコード:

#include "stdafx.h"<br/>

<br/>

//Calculator includes<br/>

//#include "RegexNumberCheckModel.h"<br/>

#include "NoNumberCheckModel.h"<br/>

#include "CalculatorModel.hpp"<br/>

#include "MobileView.h"<br/>

#include "CalculatorController.hpp"<br/>

<br/>

CAppModule _Module;<br/>

<br/>

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPTSTR, int )<br/>

{<br/>

<br/>

//MVC concept<br/>

     //Model<br/>

     typedef CalculatorModel< double , Operations, NoNumberCheckModel> MyCalculatorModel;<br/>

MyCalculatorModel calcModel;<br/>

//View<br/>

     typedef MobileView<MyCalculatorModel> MyCalculatorView;<br/>

MyCalculatorView calcView;<br/>

//Controller<br/>

     typedef CalculatorController<MyCalculatorModel, MyCalculatorView::ViewPolicy> MyCalculatorController;<br/>

MyCalculatorController calcController(calcModel, calcView);<br/>

<br/>

calcView.Run(hInstance);<br/>

<br/>

<br/>

return 0;<br/>

}










変更は最小限です。CalculatorModelNoNumberCheckModelクラスによって構成され、 DesktopViewMobileViewに置き換えられます



Web

説明した「計算機」プログラムはWebアプリケーションではなく、Webベースのアプリケーションであることがすぐにわかります。

Webの実装では、もう少し複雑で、この主題に関するインターネット上の記事や例が少なすぎます。 ちょっとした調査の結果、記事「Apache、fastcgi and c ++: "Hello、world"が1週間前にハブで公開されました。 メインテクノロジーを選択した後、インターフェイスの実装とAJAXリクエストの処理に特別な問題はありませんでした。

DesktopViewの 「View」 コンポーネントを実装するクラスは、FastcgiViewに置き換えられています



おわりに

アプリケーション設計の適切なアプローチにより、ほとんどの一般的なプラットフォームで大きな労力をかけずに機能するプログラムを開発できます。

また、 htmlayoutbooststlなどのライブラリが存在するため、これをすばやく行うことができます。

このような開発手法は、トレントクライアントやスマートホームコントロールシステムなどのプログラムに非常に適していると思います...




All Articles