記事詳細


投稿日
2026年11月15日10時55分
タイトル

前回のコードをさらに意味のある変更を加えて再生成します。 今回は ASP.NET Core MVC の Controller 内で実際に使える形 にし、 Payment の生成処理をサービスメソッドに分離して再利用可能にします。

内容

今回は ASP.NET Core MVC の Controller 内で実際に使える形 にし、
Payment の生成処理をサービスメソッドに分離して再利用可能にします。

Csharp
using System; using System.Collections.Generic; using Microsoft.AspNetCore.Mvc; public class Payment { public int PaymentId { get; set; } // DB側で自動生成 public DateTime Posted { get; set; } public bool InOut { get; set; } public int? SubjectNameId { get; set; } public string ItemName { get; set; } public string PaymentName { get; set; } public int? PaymentTypeId { get; set; } public int? PaymentMethodId { get; set; } public int? IncomeCategoryId { get; set; } public int? IncomeTypeId { get; set; } public decimal Amount { get; set; } } public interface IPaymentService { List<Payment> GeneratePayments(); } public class PaymentService : IPaymentService { private static int? GetId(Dictionary<string, int> dict, string key) { return dict.TryGetValue(key, out var value) && value != 0 ? value : (int?)null; } public List<Payment> GeneratePayments() { int thisYear = DateTime.Now.Year; int previousMonth = DateTime.Now.Month - 1; if (previousMonth == 0) { previousMonth = 12; thisYear--; } // 各Id辞書 var subjectNameDict = new Dictionary<string, int> { { "家計", 1 }, { "事業", 2 } }; var paymentTypeDict = new Dictionary<string, int> { { "予算", 10 }, { "支出", 20 } }; var paymentMethodDict = new Dictionary<string, int> { { "現金", 100 }, { "銀行振込", 200 } }; var incomeCategoryDict = new Dictionary<string, int> { { "給与", 300 }, { "副業", 400 } }; var incomeTypeDict = new Dictionary<string, int> { { "定期", 500 }, { "臨時", 600 } }; // 複数のPaymentデータ定義 var paymentData = new[] { new { SubjectKey = "家計", TypeKey = "予算", MethodKey = "現金", CategoryKey = "給与", IncomeTypeKey = "定期", Amount = 268000m, ItemName = "今月予算" }, new { SubjectKey = "事業", TypeKey = "支出", MethodKey = "銀行振込", CategoryKey = "副業", IncomeTypeKey = "臨時", Amount = 150000m, ItemName = "事業支出" } }; var payments = new List<Payment>(); foreach (var data in paymentData) { payments.Add(new Payment { Posted = new DateTime(thisYear, previousMonth, 1), InOut = true, SubjectNameId = GetId(subjectNameDict, data.SubjectKey), ItemName = data.ItemName, PaymentName = null, PaymentTypeId = GetId(paymentTypeDict, data.TypeKey), PaymentMethodId = GetId(paymentMethodDict, data.MethodKey), IncomeCategoryId = GetId(incomeCategoryDict, data.CategoryKey), IncomeTypeId = GetId(incomeTypeDict, data.IncomeTypeKey), Amount = data.Amount }); } return payments; } } public class PaymentsController : Controller { private readonly IPaymentService _paymentService; public PaymentsController(IPaymentService paymentService) { _paymentService = paymentService; } public IActionResult Index() { // サービスからPaymentリストを取得 var payments = _paymentService.GeneratePayments(); // Viewに渡す return View(payments); } }

改良点

  1. MVC構造対応
    PaymentService に生成処理を分離し、PaymentsController から呼び出す形に変更。

  2. 依存性注入(DI)対応
    IPaymentService インターフェースを用意し、ASP.NET Core の DI コンテナに登録すればテストや拡張が容易。

  3. 再利用性向上
    GeneratePayments() メソッドは他のコントローラーやバッチ処理でも利用可能。

  4. View連携
    コントローラーの Index アクションで生成した payments をビューに渡す。

この形なら、実際の ASP.NET Core MVC プロジェクトに組み込んで動かせます。
次はこの PaymentService を DBから辞書データを取得する形 に変えることもできますが、それも作りますか?
そうすれば完全に動的な ID 取得になります。

Powered by Froala Editor

添付画像

画像はありません
Genreのカテゴリ-名
Contexts
編集 | 記事一覧