C#上級

上級 C#で学ぶWebアプリ設計|練習問題編

導入

Webアプリケーションの設計は、エンジニアにとって多くの挑戦が待ち受けています。特に、複雑なビジネスロジックやユーザーインターフェースの要件が絡む場合、設計の選択肢は多岐にわたります。ここでは、C#を用いたWebアプリ設計の上級者向けのケーススタディを通じて、実務に役立つ視点を提供します。

教科書レベルの解説(Webアプリ設計)

重要な概念の整理

Webアプリケーション設計において、特に考慮すべきは「アーキテクチャパターン」です。MVC(Model-View-Controller)やMVVM(Model-View-ViewModel)などのパターンは、アプリケーションの保守性や拡張性に大きく寄与します。また、非同期処理やAPI設計も重要な要素です。これらの概念を深く理解し、実際のプロジェクトに適用することが求められます。

コード例(C#)


using Microsoft.AspNetCore.Mvc;

namespace MyWebApp.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class ProductsController : ControllerBase
    {
        private readonly IProductService _productService;

        public ProductsController(IProductService productService)
        {
            _productService = productService;
        }

        [HttpGet]
        public IActionResult GetAllProducts()
        {
            var products = _productService.GetAll();
            return Ok(products);
        }
        
        [HttpGet("{id}")]
        public IActionResult GetProduct(int id)
        {
            var product = _productService.GetById(id);
            if (product == null)
            {
                return NotFound();
            }
            return Ok(product);
        }
    }
}

コードの行ごとの解説

  1. usingディレクティブで必要な名前空間をインポートしています。
  2. ProductsControllerクラスはAPIエンドポイントを定義し、IProductServiceを依存性注入しています。
  3. GetAllProductsメソッドは、全ての製品を取得し、HTTP 200 OKで応答します。
  4. GetProductメソッドは、指定されたIDの製品を取得し、見つからない場合はHTTP 404 Not Foundを返します。

練習問題編

以下の練習問題に取り組んでみてください。

  1. 問題1: ProductsControllerに新しい製品を追加するメソッドを実装してください。
  2. 問題2: GetProductメソッドに、製品が見つからない場合のカスタムエラーメッセージを追加してください。
  3. 問題3: 非同期処理を用いて、GetAllProductsメソッドを改良してください。

模範解答と解説

問題1の解答: 新しいメソッドを追加し、HTTP POSTを使用して製品を追加します。


[HttpPost]
public IActionResult AddProduct(Product product)
{
    _productService.Add(product);
    return CreatedAtAction(nameof(GetProduct), new { id = product.Id }, product);
}

問題2の解答: GetProductメソッドにエラーメッセージを追加します。


if (product == null)
{
    return NotFound("指定された製品は見つかりませんでした。");
}

問題3の解答: GetAllProductsメソッドを非同期にします。


[HttpGet]
public async Task GetAllProducts()
{
    var products = await _productService.GetAllAsync();
    return Ok(products);
}

まとめ

  • Webアプリ設計において、アーキテクチャパターンの選択は重要です。
  • 依存性注入を活用することで、コードのテストや保守が容易になります。
  • 非同期処理を取り入れることで、アプリケーションのパフォーマンスが向上します。