.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~