Java上級

上級 Javaで学ぶドメイン駆動設計|ケーススタディ編

導入

ドメイン駆動設計(DDD)は、複雑なビジネスニーズを効率的にモデル化するための強力なアプローチです。本記事では、架空のプロジェクトを通じて、DDDの実践的な適用方法を探ります。具体的には、オンライン書店のシステムを題材にし、どのようにドメインモデルを設計し、実装するかを解説します。

教科書レベルの解説(ドメイン駆動設計)

重要な概念の整理

ドメイン駆動設計の中心には、ドメインモデル、ユビキタス言語、バウンデッドコンテキストといった重要な概念があります。ドメインモデルはビジネスロジックを表現し、ユビキタス言語は開発チームとビジネス側の共通言語を提供します。バウンデッドコンテキストは、異なるモデルがどのように相互作用するかを定義します。

コード例(Java)


public class Book {
    private String title;
    private String author;
    private double price;

    public Book(String title, String author, double price) {
        this.title = title;
        this.author = author;
        this.price = price;
    }

    public String getTitle() {
        return title;
    }

    public String getAuthor() {
        return author;
    }

    public double getPrice() {
        return price;
    }
}

public class ShoppingCart {
    private List books = new ArrayList<>();

    public void addBook(Book book) {
        books.add(book);
    }

    public double calculateTotal() {
        return books.stream().mapToDouble(Book::getPrice).sum();
    }
}

コードの行ごとの解説

  1. Bookクラス: 書籍の属性(タイトル、著者、価格)を持つシンプルなドメインモデル。
  2. ShoppingCartクラス: 書籍を管理し、合計金額を計算するメソッドを提供。
  3. addBookメソッド: ショッピングカートに書籍を追加する機能。
  4. calculateTotalメソッド: ストリームAPIを使用して、カート内の書籍の価格を合計する。

ケーススタディ編

架空のオンライン書店プロジェクトでは、顧客が書籍を購入するためのシステムを構築しています。このプロジェクトの初期段階で、ドメイン駆動設計の原則に従って、書籍とショッピングカートのモデルを設計しました。ここでの落とし穴は、書籍の在庫管理を考慮していなかった点です。実際には、書籍が在庫切れの場合、カートに追加できないようにする必要があります。この問題を解決するために、Bookクラスに在庫数の属性を追加し、在庫がある場合のみカートに追加できるロジックを実装しました。

まとめ

  • ドメイン駆動設計を用いることで、ビジネスロジックを明確にモデル化できる。
  • 実際の業務における具体的な要件を反映させることが重要。
  • 設計段階での落とし穴を認識し、改善策を講じることで、より堅牢なシステムを構築できる。