LoginSignup
1
0
記事投稿キャンペーン 「2024年!初アウトプットをしよう」

Flutterプロジェクト 自分用のテンプレートを公開した ~Infrastructure層編~

Last updated at Posted at 2024-01-31

概要

約半年間、独学でFlutterを勉強しました。
自分なりに開発の型が見えてきたのでGitのリポジトリと記事を残したいと思います。
本記事はそのInfrastructure層編です。



flutterプロジェクトの開始時に作成されるサンプルアプリを置き換えたもので、基本的な仕様やUIは一緒ですが、カウントを1つ進めるたびにsharedPreferencesに現在のカウントが保存されるようになっています。


デザインパターン

こちらの大変わかりやすい記事を参考にさせていただきました!

レイヤードアーキテクチャに関しては、こちらの記事内で詳しく(かつ非常にわかりやすく!)説明がされているので、こちらをご参照ください。



ディレクトリ構成

lib
├ features/
│ ├ common_utils/
│ └ #feature-1
│ ├ application/
│ ├ domain/
│ └ infrastructure/
├ presentation/
└ main.dart


Infrastructure

この層にはDomain層編概要編で触れた、抽象クラスをImplementsした機能実装済みのRepoitoryが配置されます。

また、DB操作で使用するテーブルキーなどの定数を管理するクラスも配置しています。

\lib\features\counter\infrastructure\counter_repository_constants.dart
// repository内で使用するキーやフィールド名などの定数を定義するクラス
class CounterConstants {
  //fieldName
  final String countKey = 'count';
}

このシンプルなテンプレートアプリではCountをSharedPreferencesに保存するRepositoryしかありませんが、実際のアプリではDBとの通信や広告の取得などもRepositoryを通じて通信していく形になるかと思います。
アプリ外との通信は基本的にRepositoryから行うという認識で開発しています。

Mock

mockのRepositoryをproviderにoverrideすると、バックエンドとフロントエンドの開発を別々に進めることができるというメリットがあるようです。

\lib\features\counter\infrastructure\mock\mock_count_repository.dart
//開発時に利用するモックのrepository
class MockCountRepository implements CounterRepository {
  @override
  Future<Count?> fetch() async {
    return CountCreator.create();
  }

  @override
  Future<void> saveCount(Count count) async {}
}

フロントエンドの開発では、このようにmockで適当な値を返してあげればバックエンドの開発が終わっていない個所でもエラーを出さずに開発を進めることができます。
テストもしやすくなるっぽいです。

おわりに

Infrastructure層編は以上になります。
以下の記事も併せてよろしくお願いします!

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0