g4はSImpleModelerによるAndroidアプリケーション自動生成の基盤として新規作成したアプリケーションフレームワークです。
g4の基本構成は以下の通りです。
ボクのAndroid開発経験から、Androidのアプリケーションアーキテクチャとして、この図に示したものがよいのではないかという仮説のものと、このアーキテクチャの基盤となるクラス群を提供してます。
アーキテクチャの基盤となるクラスは以下の3つに分類できます。
- Android基本ライブラリを拡張
- Google Guideを拡張
- g4独自クラス
Android基本ライブラリ
Android基本ライブラリが提供するクラスです。これらのクラスをさらに拡張した基底クラスを用意しています。
Application
- アプリケーション
Activity
- Android画面
Fragment
- Android画面の断片(Android 3.0以降)
View
- Android画面の部品
Service
- アプリケーション本体を補完するサービス
Intent
- Activity/Service間で流通する情報
ContentProvider
- 情報提供
Service, Intent, ContentProviderは、ソースコードの自動生成の直接の対象です。特にドメインモデルからIntentとContentProviderはほぼ完全な形で自動生成できる見込みです。
Serviceは、ファサード部分を自動生成して、実現部分をコーディングする形になりますが、これに対応した拡張を行う予定です。
Google Guiceを拡張
g4は、DI(Dependency Injection)を用いたアプリケーション組立てをサポートします。DI機能にはGoogle Guice(without AOP)を用いています。Guiceを使ったDIで、アプリケーションを構築する各オブジェクトの結合度を低くし、オブジェクトの再利用性、拡張性、保守性、テスタビリティを高めます。
このGuiceのモジュールを定義するクラスがModuleです。g4ではGuiceのMiduleをg4用に拡張した基底クラスを提供しています。
Module
- Google Guiceのモジュール定義クラス
g4クラス
g4では以下のAndroidが提供する基本クラスに、以下のクラスを追加してAndroidアプリケーションのアプリケーションアーキテクチャを構築しています。
Controller
- 画面が実行する責務を提供
Agent
- モデルの更新を伴う責務を実装
Model
- ドメインモデル
ErrorModel
- エラーモデル
Driver
- 外部リソースにアクセスするドライバ
Factory
- オブジェクトの生成とインジェクション
Repository
- エンティティオブジェクトの管理
この方法は初期実装は楽ですが、プログラムがある程度大きくなってくると、再利用性、拡張性、保守性、テスタビリティが損なわれることになります。
そこで、持続的に機能拡張を続ける本格的なアプリケーションの場合はきちんとしたアプリケーションアーキテクチャの構成を取るのが得策です。アプリケーションアーキテクチャでは、分散対象となる部品の構成、分散配置の戦略を定めます。そしてユースケースを構成する各種責務を色々なオブジェクトに分散配置していくことになります。
g4では、以下の方針で責務の分散配置を行います。
- 利用者視点でドメインモデルを操作する責務はControllerに配置
- ドメインモデル視点でモデルの更新処理を行う責務はAgentに配置
- ドメインモデルはModelに配置
- エラー処理の責務はErrorModelに集約
- 外部リソースへのアクセスはDriverに集約
Androidの基本ライブラリのみだと、ここで述べたアプリケーションアーキテクチャを実装することが難しいので、必要なオブジェクトをg4独自クラスとして追加しているわけです。
0 件のコメント:
コメントを投稿