皆さん、こんにちは。この投稿では、私が構築したクリーンアーキテクチャに基づいた Android アプリケーションのソースコードを共有したいと思います。
このソースコードは個人の GitHub に公開しています:GitHub。
MVVM、MVC、MVP、TCA などのモデルを使用してモバイルアプリケーションの開発を行ってきましたが、MVVM がテストしやすく、維持管理が容易なため、最も実用性が高いと感じました。最も重要なのは、use case
の概念があり、user story
から分離して基本設計のドキュメントを作成できることです。
Jetpack Compose とは?そしてなぜ使うべきか?
Jetpack Compose は、Google が開発した Android 向けのモダンな UI(ユーザーインターフェース)ツールキットで、柔軟かつ容易にユーザーインターフェースを作成できます。Kotlin で記述されており、XML などの従来の方法ではなく、コンポーザブル関数を通じてインターフェースを構築します。
利点:
- 開発の迅速化: コードの記述と保守にかかる時間を短縮。
- より良いユーザーインターフェースのインタラクション: 複雑なエフェクトやトランジションを簡単に作成可能。
- 拡張性: 既存のコードに大きな影響を与えることなく、新しい機能の追加や UI の変更が容易。
なぜクリーンアーキテクチャを使うべきか?
クリーンアーキテクチャは多くの利点をもたらします。以下に簡単にまとめます:
- 保守性の向上: 簡単に保守および更新可能。
- 拡張性の向上: システムの他の部分に影響を与えることなく、新しい機能を簡単に追加。
- テスト容易性の向上: コンポーネントが分離されているため、テストが容易。
- 依存関係の削減: クラス間の依存関係が少なく、管理が容易。
- コアビジネスロジックに集中: ビジネスロジックと UI コンポーネントの間に明確な分離がある。
クリーンアーキテクチャの主な構造
- エンティティ: アプリケーションのビジネスオブジェクトとルールを定義。
- ユースケース: ビジネスロジックを含み、データの処理と保存方法を決定。
- インターフェースアダプター: ビジネスロジック層とフレームワーク層間のデータを変換。
- フレームワーク: UI、データベース、および外部サービスなどの特定のフレームワークコンポーネントを含む。
クリーンアーキテクチャは、柔軟で保守しやすく、テストが容易なアプリケーションを作成し、現在のシステムの運用を中断せずに変更や開発をサポートします。
ソースコードの概要
私は MVP アプリケーションを、最もシンプルな機能で構築しましたが、このシンプルさが、初心者にとっては理解しやすいものになっていると信じています。可能であれば、最新の Android Studio バージョンと最低 Java バージョン 1.8 を使用してください。
画面フローの図
+-----------+ +-----------+ +------------+
| | | | | |
| Splash | ------>| Login | ------>| Main |
| Screen | | Flow | | Flow |
| | | | | |
+-----------+ +-----------+ +------------+
スクリーンショット
以下は、さまざまなモードの Android アプリのスクリーンショットです。
**スプラッシュ画面** | **ログイン画面** | **登録画面** |
**コース画面** | **学生画面** |
Android
アプリの構造
アプリの構造は、主に以下の 3 つの部分に分かれています:
- アプリ: ビュー、アクティビティ、ビューモデル、ビジネスロジックの処理などの UI を含む。
- buildSrc: 依存関係、ライブラリ、およびバージョン管理を担当する層。
- フレームワーク: 共通処理を含む層。
アプリ
- コンポーネント: 共通ビューを含む。
- コントローラー: 共通処理。
- テーマ: スタイルを管理。
- データ: リポジトリ、API、データベース、ユースケースなど、アプリ全体のデータを管理。
- プレゼンテーション: 画面。
- プロバイダー: リソースへのアクセスを提供し、ナビゲーションを管理。
buildSrc
アプリのすべての依存関係、バージョン、およびバージョン管理を担当。
フレームワーク
共通処理を管理:
- ベース: ビューモデルと状態の共通ベース。
- キャッシュ: ビュー間でデータを移動する際に使用することを推奨。
- エクステンション: 共通のエクステンション処理。
- プレフ: 共有プリファレンスの処理。
- ルーム: データベースの処理。
結論
このソースコードを気に入っていただけると幸いです。フィードバックや提案があれば、GitHub で問題を開いていただくか、LinkedIn でご連絡ください。
完全なプロジェクト
以下のリンクからプロジェクトのソースコードにアクセスできます: GitHub.