C#中級

中級 C#で学ぶクリーンアーキテクチャ|練習問題編

導入

クリーンアーキテクチャは、ソフトウェア開発における設計原則を示すものであり、特に大規模なアプリケーションにおいてその効果を発揮します。C#を用いた実務において、アプリケーションの可読性や保守性を高めるための具体的なアプローチを探求します。実際の開発シーンで直面する可能性のあるシチュエーションを考え、クリーンアーキテクチャの原則を適用していきます。

教科書レベルの解説(クリーンアーキテクチャ)

重要な概念の整理

クリーンアーキテクチャは、依存関係を管理し、ビジネスロジックを外部の影響から隔離することを目指します。具体的には、エンティティ、ユースケース、インターフェース、外部データソースの4つの層に分かれています。これにより、アプリケーションの各部分が独立してテストや変更を行うことが可能となります。

コード例(C#)


public interface IOrderRepository
{
    void Add(Order order);
    Order GetById(int id);
}

public class Order
{
    public int Id { get; set; }
    public string ProductName { get; set; }
    public int Quantity { get; set; }
}

public class OrderService
{
    private readonly IOrderRepository _orderRepository;

    public OrderService(IOrderRepository orderRepository)
    {
        _orderRepository = orderRepository;
    }

    public void CreateOrder(string productName, int quantity)
    {
        var order = new Order { ProductName = productName, Quantity = quantity };
        _orderRepository.Add(order);
    }
}

コードの行ごとの解説

  1. インターフェースの定義: IOrderRepositoryは、注文を追加するメソッドとIDで取得するメソッドを定義しています。これにより、実装の詳細を隠蔽します。
  2. エンティティの定義: Orderクラスは、注文の属性を持ち、ビジネスロジックを表現します。
  3. サービスの実装: OrderServiceクラスは、依存性注入を利用してIOrderRepositoryを受け取り、注文を作成するロジックを提供します。この設計により、テストが容易になります。

練習問題編

以下の練習問題に取り組み、クリーンアーキテクチャの理解を深めてください。

  1. 問題1: IOrderRepositoryの実装を作成してください。データをメモリ内に保持するシンプルな実装で構いません。
  2. 問題2: OrderServiceに、特定のIDの注文を取得するメソッドを追加してください。
  3. 問題3: OrderServiceに、数量が0以下の場合に例外を投げるバリデーションを追加してください。
  4. 問題4: 依存性注入を使用してOrderServiceをテストするためのテストクラスを作成してください。

まとめ

  • クリーンアーキテクチャの原則を理解し、実務に応用することで、保守性の高いコードが実現できます。
  • 依存関係を明確にし、ビジネスロジックを外部から隔離することで、テストや変更が容易になります。