Xamarin.Forms 電子ブックを使用するエンタープライズ アプリケーション パターン
適用、保守、テストができる Xamarin.Forms エンタープライズ アプリケーション開発のアーキテクチャ ガイダンス
Note
この電子ブックは 2017 年春に発行されたもので、その後は改訂されていません。 このブックには今なお価値のある内容が多く含まれていますが、一部の記載内容は古くなっています。
この電子ブックは、疎結合を維持しながら、Model-View-ViewModel (MVVM) パターン、依存関係の挿入、ナビゲーション、検証、構成管理を実装する方法についてのガイダンスを提供します。 さらに、IdentityServer での認証と承認の実行、コンテナー化されたマイクロサービスからのデータへのアクセス、単体テストに関するガイダンスもあります。
「はじめに」
この章では、ガイドの目的と対象範囲、および対象読者について説明します。
はじめに
エンタープライズ アプリの開発者は、開発中にアプリのアーキテクチャを変更する可能性があるいくつかの課題に直面します。 このため、時間の経過に伴ってアプリを変更または拡張できるようにアプリを構築することが重要です。 このような適応性を考慮した設計は困難な場合がありますが、通常は、アプリに簡単に統合できるようにアプリを個別の疎結合コンポーネントに分割します。
MVVM
Model-View-ViewModel (MVVM) パターンを利用すると、アプリケーションのビジネスおよびプレゼンテーション ロジックをそのユーザー インターフェイス (UI) から明確に分離できます。 アプリケーション ロジックと UI 間の明確な分離を維持することは、開発に関する多くの問題に対処しやすくするとともに、アプリケーションのテスト、保守、進化を容易にします。 また、コード再利用の機会を大幅に向上し、開発者や UI デザイナーがアプリのそれぞれの担当部分を開発する際に、より簡単に共同作業できます。
依存関係の挿入
依存関係の挿入を利用すると、具象型を、それらの型に依存するコードから分離できます。 通常、インターフェイスと抽象型の登録とそれらの間のマッピングの一覧、およびこれらの型を実装または拡張する具象型を保持するコンテナーが使用されます。
依存関係の挿入コンテナーにより、クラス インスタンスをインスタンス化し、コンテナーの構成に基づいてインスタンスの有効期間を管理するための機能が提供され、オブジェクト間の結合が削減されます。 オブジェクトの作成時に、コンテナーで、オブジェクトに必要なすべての依存関係がそこに挿入されます。 これらの依存関係はまだ作成されていない場合、コンテナーでは最初に依存関係を作成して解決します。
疎結合コンポーネント間の通信
Xamarin.FormsMessagingCenter
クラスでは、パブリッシュ/サブスクライブ パターンが実装され、オブジェクトと型の参照によってリンクしにくいコンポーネント間で、メッセージ ベースの通信を行うことができます。 このメカニズムにより、パブリッシャーとサブスクライバーは相互に参照することなく通信できるため、コンポーネント間の依存関係を減らすことができます。また、コンポーネントを個別に開発およびテストすることもできます。
ナビゲーション
Xamarin.Forms では、ページ ナビゲーションがサポートされています。これは通常、ユーザーの UI 操作によって、または内部ロジックによって状態が変わる結果としてアプリ自体から生じます。 ところが、MVVM パターンを使用するアプリで実装するナビゲーションは複雑になる場合があります。
この章では、ビューモデルからビューモデル優先ナビゲーションを実行するために使用される NavigationService
クラスについて説明します。 ビュー モデル クラスにナビゲーション ロジックを配置すると、自動テストを通じてロジックを実行できます。 さらに、ビュー モデルでは、特定のビジネス ルールが確実に適用されるようにナビゲーションを制御するロジックを実装できます。
検証
ユーザーから入力を受け取るアプリでは、その入力が有効であることを確認する必要があります。 検証を行わないと、ユーザーはアプリが失敗する原因となるデータを提供する危険性があります。 検証を行うと、ビジネス ルールが適用され、攻撃者による悪意のあるデータの挿入を防ぎます。
Model-View-ViewModel (MVVM) パターンのコンテキストでは、多くの場合、データの検証を実行して、ユーザーが修正できるように検証エラーをビューに通知するために、ビュー モデルまたはモデルが必要です。
構成管理
設定を使用すると、アプリの動作を構成するデータをコードから分離できるため、アプリを再構築せずに動作を変更できます。 アプリ設定は、アプリで作成および管理されるデータであり、ユーザー設定はアプリの動作に影響を与え、頻繁に再調整を必要としない、アプリのカスタマイズ可能な設定です。
コンテナー化 Microservices
マイクロサービスは、アプリケーションの開発と展開のアプローチを提供します。これは、最新のクラウド アプリケーションの機敏性、スケール、信頼性の要件に適したアプローチです。 マイクロサービスの主な利点の 1 つは、個別にスケールアウトできることです。つまり、需要の増加が発生していないアプリケーションの領域を不必要にスケーリングすることなく、需要に対応するためにより多くの処理能力またはネットワーク帯域幅を必要とする特定の機能領域をスケーリングできます。
認証と承認
ASP.NET MVC Web アプリケーションと通信する Xamarin.Forms アプリに認証と認可を統合するには、多くの方法があります。 ここでは、認証と認可は、IdentityServer 4 を使用するコンテナー化された ID マイクロサービスを使用して実行されます。 IdentityServer は、ASP.NET Core Identity と統合してベアラー トークン認証を実行する ASP.NET Core 用の、オープンソースの OpenID Connect および OAuth 2.0 フレームワークです。
リモート データへのアクセス
現代の多くの Web ベース ソリューションでは、Web サーバーによりホストされる Web サービスを使用することで、リモート クライアント アプリケーションの機能を提供します。 Web サービスによって公開される操作では Web API が構成され、クライアント アプリでは、API によって公開されるデータや操作がどのように実装されるかがわかっていなくても、Web API を利用できる必要があります。
単体テスト
MVVM アプリケーションからのモデルとビュー モデルのテストは、他のクラスのテストと同じであり、同じツールと手法を使用できます。 ただし、モデルとビュー モデルのクラスで一般的なパターンがいくつか存在し、これらは、特定の単体テスト手法からベネフィットを得ることができます。
コミュニティ サイト
このプロジェクトにはコミュニティ サイトがあり、質問の投稿やフィードバックの送信を行うことができます。 コミュニティ サイトは GitHub にあります。 または、この電子ブックに関するフィードバックをメールで dotnet-architecture-ebooks-feedback@service.microsoft.com に送信することもできます。