本プロジェクトでは、MVVM + Clean Architecture を採用し、商用アプリケーションに適した構成・設計を目指しました。
| 層 | 役割 |
|---|---|
| Presentation 層(UI) | View(Widget)と ViewModel を通して状態管理(flutter_riverpod を利用) |
| Application 層(UseCase) | UIロジックからドメインの処理を切り離し、ユースケースを定義 |
| Domain 層(Entity / Repository Interface) | アプリの中心的なビジネスロジックを定義(モデル・抽象リポジトリ) |
| Data 層(Repository Impl / API) | OpenWeatherMap API との通信、永続化、設定保存などを担当 |
| Core 層(Repository Impl / API) | アプリ全体で使い回される「非依存・非ビジネスロジック」な共通コードをまとめ、純 Dart 層であり、UI系とは無関係であるべき |
- 責務分離:UI / ロジック / データ を明確に分離し、保守性を向上
- 拡張性:今後の機能追加(お気に入り都市の保存など)にも柔軟に対応
- テスト容易性:ViewModel や UseCase 単位でのユニットテストが可能
- 商用品質の担保:スケーラブルで堅牢な構成を意識し、実務でも通用する実装