PCLプロジェクト
プロジェクトの核となるのはもちろんPCLプロジェクト(Phonewordプロジェクト)だ。そして、残る3つのアプリプロジェクトがPCLプロジェクトで作成されるDLLを参照するようになっている。
3種類のアプリで共通化できるロジック/UIはこのPCLプロジェクトに含めていく。逆に共通化できない部分(OSごとに異なる機能を利用する場合など)は、アプリプロジェクトで個別に機能を実装していく(それらをPCL側から呼び出すためにはDependencyServiceなどの機能を使用する。後述)。
Phonewordプロジェクトには以下に示すようなファイルが含まれていて、これらが残る3つのアプリプロジェクトで共有される。
App.csファイルではアプリ全体の構成をつかさどるAppクラスが定義されている。例えば、アプリの初期画面となるMainPage.xaml/MainPage.xaml.csファイルで記述されるページは、このクラスのMainPageプロパティに格納/管理される。また、アプリのライフサイクルに関連するメソッドなどもこのクラスで定義される。
MainPage.xaml/MainPage.xaml.csファイルはアプリのメイン画面を記述するものだ。PhonewordプロジェクトではC#とXAMLが使われているが、UI構築を全てC#コードで行うことも可能だ。
PhoneTranslator.csファイルにはこのプログラムのロジック部分(Phone wordsから数字への変換コード)が記述されている。
IDialer.csファイルは、変換後の番号を使い電話をかけるためのIDialerインタフェースを定義している。このインタフェースが持つメソッドは「dial」の1つだけだ。電話をかけるにはOS固有の機能を利用するため、3つのファイルで共有されるPCLではダイヤル操作を抽象化したメソッドdialだけを用意して、実際の処理はアプリプロジェクトの実装に委譲するようになっている。
アプリプロジェクト
残る3つのアプリプロジェクトには、それぞれのOSベースでアプリを構築、動作させるために必要なコードが含まれている。
これらはVSでXamarin.Formsプロジェクトを作成したときに自動で生成される定型コード(あるいはそれに手を加えたもの)と、前述したOS固有機能を使用するコードに大別される。
例えば、Phoneword.iOSプロジェクトのAppDelegate.csファイルや、Phoneword.DroidプロジェクトのMainActivity.csファイル、Phoneword.UWPプロジェクトのApp.xaml.*/MainPage.xaml.*ファイルには、上記のPCLプロジェクトで定義されているアプリ本体(Appクラス)を実際に起動するための定型コードが記述されている。例として、Phoneword.UWPプロジェクトのMainPage.xaml.csファイルで、Appクラスのインスタンスを作成し、アプリを読み込んでいるコードを以下に示す(コメントは削除している)。
using Windows.UI.Xaml.Controls;
namespace Phoneword.UWP
{
public sealed partial class MainPage
{
public MainPage()
{
this.InitializeComponent();
this.LoadApplication(new Phoneword.App());
}
}
}
一方、これらのアプリプロジェクトにはそれぞれPhoneDialer.csファイルが含まれている。このファイルでは、以下に示すIDialerインタフェースを実装するクラスが記述されている(後述)。
public interface IDialer
{
bool Dial(string number);
}
ここまでPhonewordアプリのソリューションの構成についてざっくりと見てきたが、まとめると次のようになる。
次ページでは、どんなコードが共有され、OS依存コードがどのようになっているか(そしてそれをどのように利用しているのか)、もう少し詳しくコードを掘り下げていこう。
Copyright© Digital Advantage Corp. All Rights Reserved.