0
0

.NET MAUIとCleanArchitectureで簡単なアプリを作成してみる4~実装1~

Last updated at Posted at 2024-01-22

.NET MAUIとCleanArchitectureで簡単なアプリを作成してみる3~設計~の続き

フォルダ構成を決める

前回のクラス構成図を元にフォルダ構成を考えてみました。

MauiApp1ソリューション
├ MauiApp1 ★プレゼンテーション層(ベースはMVVMにします)
│  ├─ Platforms
│  │  ├─ Android
│  │  └─ Windows
│  ├─ Models
│  │  ├─ Health.cs
│  │  └─ HealthGraph.cs
│  ├─ Views
│  │  ├─ MainPage.xaml
│  │  └─ HealthEditPage.xaml
│  └─ ViewModels
│      ├─ MainViewModel.cs
│      └─ HealthEditViewModel.cs
│  
├ MauiApp1.Domain ★ドメイン(Interactorはここに移動)
│  ├─ Interactor
│  │  └─ Healths
│  │        ├ HealthCreateInteractor.cs
│  │        └ HealthGetListInteractor.cs
│  └─ Model
│      └─ Healths
│            ├ Health.cs
│            └ IHealthRepository.cs
│
├ MauiApp1.SqlInfrastructure ★インフラストラクチャ
│  └─ Healths
│      └─ HealthRepository.cs
│
└ MauiApp1.UseCase ★ユースケース
  └─ Healths
     ├ Create
     │   ├ HealthCreateRequest.cs
     │   ├ HealthCreateResponse.cs
     │   └ IHealthCreateUseCase.cs
     └  GetList
         ├ HealthGetListRequest.cs
         ├ HealthGetListResponse.cs
         └ IHealthGetListUseCase.cs

UseCaseを実装する

新しいプロジェクトを追加する

種類「クラスライブラリ」
プロジェクト名「MauiApp1.UseCase」
フレームワーク「.NET8」
フォルダ構成はフォルダ構成を決める(MauiApp1.UseCase)の通り

Createユースケースを作成する

インプットするリクエストを実装する

HealthCreateRequest.cs
    public class HealthCreateRequest
    {
        /// <summary>
        /// コンストラクタ
        /// </summary>
        /// <param name="id"></param>
        /// <param name="recordDate"></param>
        /// <param name="heartNumber"></param>
        public HealthCreateRequest(int id, DateTime recordDate, int heartNumber)
        {
            Id = id;
            RecordDate = recordDate;
            HeartNumber = heartNumber;
        }

        /// <summary>
        /// ID
        /// </summary>
        public int Id { get; }
        /// <summary>
        /// 記録日付
        /// </summary>
        public DateTime RecordDate { get; }
        /// <summary>
        /// ハート数
        /// </summary>
        public int HeartNumber { get; }
    }

アウトプットするレスポンスを実装する

HealthCreateResponse.cs
    public class HealthCreateResponse
    {
        /// <summary>
        /// コンストラクタ
        /// </summary>
        /// <param name="id"></param>
        public HealthCreateResponse(int id)
        {
            Id = id;
        }

        /// <summary>
        /// ID
        /// </summary>
        public int Id { get; }
    }

インタフェースを作成する

IHealthCreateUseCase.cs
    public interface IHealthCreateUseCase
    {
        /// <summary>
        /// 体調情報を作成する
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        HealthCreateResponse Handle(HealthCreateRequest request);
    }

GetListユースケースを作成する

インプットするリクエストを実装する
期間を指定してリクエストしたいので、開始日と終了日を持たせる

HealthGetListRequest.cs
    public class HealthGetListRequest
    {
        /// <summary>
        /// コンストラクタ
        /// </summary>
        /// <param name="startDate"></param>
        /// <param name="endDate"></param>
        public HealthGetListRequest(DateTime startDate, DateTime endDate)
        {
            StartDate = startDate;
            EndDate = endDate;
        }

        /// <summary>
        /// 開始日
        /// </summary>
        public DateTime StartDate { get; }
        /// <summary>
        /// 終了日
        /// </summary>
        public DateTime EndDate { get; }
    }

アウトプットするレスポンスを実装する
体調情報をHealthDtoクラスで定義し、複数の情報を取得できるよう配列で持たせる

HealthGetListResponse.cs
    public class HealthGetListResponse
    {
        /// <summary>
        /// コンストラクタ
        /// </summary>
        /// <param name="healths"></param>
        public HealthGetListResponse(HealthDto[] healths)
        {
            Healths = healths;
        }

        /// <summary>
        /// 体調情報
        /// </summary>
        public HealthDto[] Healths { get; }
    }

    public class HealthDto
    {
        /// <summary>
        /// コンストラクタ
        /// </summary>
        /// <param name="id"></param>
        /// <param name="recordDate"></param>
        /// <param name="heartNumber"></param>
        public HealthDto(int id, DateTime recordDate, int heartNumber)
        {
            Id = id;
            RecordDate = recordDate;
            HeartNumber = heartNumber;
        }

        /// <summary>
        /// ID
        /// </summary>
        public int Id { get; }
        /// <summary>
        /// 記録日付
        /// </summary>
        public DateTime RecordDate { get; }
        /// <summary>
        /// ハート数
        /// </summary>
        public int HeartNumber { get; }
    }

インタフェースを作成する

IHealthGetListUseCase.cs
    public interface IHealthGetListUseCase
    {
        /// <summary>
        /// 体調情報リストを取得する
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        HealthGetListResponse Handle(HealthGetListRequest request);
    }

参考にしたURL

実践クリーンアーキテクチャ

まとめ

今回はフォルダ構成を決めてUseCaseを実装しました。
次はDomain、Infrastructureを実装します。
.NET MAUIとCleanArchitectureで簡単なアプリを作成してみる4~実装2~

0
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
0
0