モデル定義とサービス層の作成|Blazor Todoアプリ構築 |ASP.NET×Blazor入門 11.2
11.2 モデル定義、サービス層作成
このセクションでは、Todoアプリに必要なモデル(データ構造)と、それを操作するサービス層の作成について詳しく説明します。 モデルはアプリケーションの土台であり、サービス層はそれを操作する「ビジネスロジックの窓口」です。
1. Todoモデルの定義
タスクの1件を表すクラスとして TodoItem を定義します。最小限のプロパティから開始し、必要に応じて拡張します。
public class TodoItem
{
public int Id { get; set; } // 一意の識別子
public string Title { get; set; } // タスクのタイトル
public string? Description { get; set; } // 詳細説明(省略可)
public bool IsCompleted { get; set; } // 完了状態
public DateTime CreatedAt { get; set; } // 作成日時
}
2. サービスインターフェースの定義
テストや保守性を考慮し、インターフェース ITodoService を定義してから実装を行います。
public interface ITodoService
{
Task> GetTodosAsync();
Task GetTodoByIdAsync(int id);
Task AddTodoAsync(TodoItem item);
Task UpdateTodoAsync(TodoItem item);
Task DeleteTodoAsync(int id);
}
3. モック実装の作成
最初はAPIとの接続ではなく、インメモリで動作するモック実装を用意します。
public class TodoService : ITodoService
{
private List _items = new();
public Task> GetTodosAsync()
=> Task.FromResult(_items);
public Task GetTodoByIdAsync(int id)
=> Task.FromResult(_items.FirstOrDefault(t => t.Id == id));
public Task AddTodoAsync(TodoItem item)
{
item.Id = _items.Count + 1;
item.CreatedAt = DateTime.Now;
_items.Add(item);
return Task.CompletedTask;
}
public Task UpdateTodoAsync(TodoItem item)
{
var existing = _items.FirstOrDefault(t => t.Id == item.Id);
if (existing != null)
{
existing.Title = item.Title;
existing.Description = item.Description;
existing.IsCompleted = item.IsCompleted;
}
return Task.CompletedTask;
}
public Task DeleteTodoAsync(int id)
{
_items.RemoveAll(t => t.Id == id);
return Task.CompletedTask;
}
}
4. DIへの登録
最後に、Program.cs または Startup.cs に以下を追加してDIにサービスを登録します。
builder.Services.AddSingleton<ITodoService, TodoService>();
これでアプリ全体で ITodoService を介してタスクデータを扱う準備が整いました。 次のセクションでは、コンポーネント分割、リスト表示、編集機能 に進み、UIの実装へと入っていきましょう。
2025-05-18
下田 昌平
開発に関するインプットをアウトプットしています。検索ログ
Blazor 自動化 342
Blazor JSON表示 323
Blazor API連携 315
HTMLとC 312
Blazor データ取得 304
Blazor 初期処理 304
Blazor エラー処理 303
Python入門 302
Blazor 運用 298
Razor入門 298
Blazor テスト 293
Blazor リスト表示 293
API呼び出し Blazor 290
.NET HttpClient 使い方 289
入門 289
Blazor 非同期通信 288
Blazor コンポーネント初期化 287
Blazor サーバー通信 287
Blazor 非同期処理 286
使い分け 285
フォーム入力 282
HttpClient 使い方 279
bUnit使い方 275
依存性注入 274
Blazor入門 271
HttpClient 例外処理 267
UI操作 260
フォルダ構成 255
AIとPython 249
Pythonとは 243
開発・技術相談
システム開発や技術検証、要件定義の作成、アーキテクチャ設計、 テスト設計、運用設計まで、一気通貫で支援しています。 企画段階の「まず相談したい」レベルから、実装・運用まで 幅広く対応できますので、お気軽にお問い合わせください。
お問い合わせ