モデル定義とサービス層の作成|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 自動化 355
Blazor API連携 354
Blazor JSON表示 343
HTMLとC 338
Blazor エラー処理 322
Razor入門 321
Python入門 320
Blazor データ取得 318
Blazor 初期処理 317
Blazor テスト 313
Blazor 運用 310
Blazor リスト表示 309
入門 307
.NET HttpClient 使い方 305
Blazor 非同期通信 304
API呼び出し Blazor 303
Blazor サーバー通信 302
Blazor コンポーネント初期化 300
Blazor 非同期処理 299
使い分け 298
フォーム入力 296
HttpClient 使い方 294
依存性注入 292
HttpClient 例外処理 291
bUnit使い方 290
Blazor入門 285
UI操作 275
フォルダ構成 275
AIとPython 263
Pythonとは 258
開発・技術相談
システム開発や技術検証、要件定義の作成、アーキテクチャ設計、 テスト設計、運用設計まで、一気通貫で支援しています。 企画段階の「まず相談したい」レベルから、実装・運用まで 幅広く対応できますので、お気軽にお問い合わせください。
お問い合わせ