頭の中にある設計を伝えて、Javaのコードに起こしてもらいました。

こんにちは、皆さん。今日は興味深い実験についてお話しします。OpenAIのGPT-4をベースにしたChatGPTというツールを使い、私の頭の中にあるJavaのドメインサービスの設計をコードに起こしてもらいました。

まず、私がChatGPTに渡した設計は以下の通りです。値オブジェクト、エンティティ、そしてドメインサービスに分けられています。


プロンプト

# 指示
次の設計からJavaのプログラムを出力して。設計思想としてはDDDをイメージしています。

# 設計

## 値オブジェクト
クラス:  Item
説明: ユーザーが所持するItem。交換サービスを利用することで交換可能
プロパティ:
  String name:  itemの名前
コンストラクター:
  Item(String name) 

## エンティティ 
クラス: User
説明: Userエンティティ
プロパティ: 
  String name: ユーザー名
  List<Item> items: ユーザーが保持するItem
コンストラクター:
  User(String name, List<Item> items) 
メソッド: 
  getName()
  getItems()

## ドメインサービス
クラス: ExchangeService
説明: UserがItemを交換するサービス
プロパティ: 
  Name: 交換所名
コンストラクター:
  ExchangeService(String name) 
メソッド: 
  exchange(User from, User to, Item item)

ChatGPTの回答

public class Item {
    private String name;

    public Item(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }
}

-----------------

import java.util.List;

public class User {
    private String name;
    private List<Item> items;

    public User(String name, List<Item> items) {
        this.name = name;
        this.items = items;
    }

    public String getName() {
        return name;
    }

    public List<Item> getItems() {
        return items;
    }

    public boolean removeItem(Item item) {
        return items.remove(item);
    }

    public void addItem(Item item) {
        items.add(item);
    }
}

-----------------

public class ExchangeService {
    private String name;

    public ExchangeService(String name) {
        this.name = name;
    }

    public boolean exchange(User from, User to, Item item) {
        if(from.getItems().contains(item)) {
            from.removeItem(item);
            to.addItem(item);
            return true;
        }
        return false;
    }
}

このプログラムは、各ユーザーが保持するアイテムを別のユーザーに交換することを可能にします。交換が成功すると true を返し、もし交換元のユーザーがアイテムを持っていなければ false を返します。

また、アイテムとユーザーの名前は、そのオブジェクトを一意に識別するために使用されます。DDD(ドメイン駆動設計)の概念に基づいて、それぞれのエンティティと値オブジェクトが意味を持つよう設計されています。


この結果を見ると、設計の内容に忠実にドメインモデルが実装されていることがわかります。UserエンティティとItem値オブジェクト、そしてExchangeServiceドメインサービスに分けて設計した内容が正確に反映されています。もちろん、具体的なビジネスロジックは適宜追加する必要がありますが、雛形としては十分なものが得られました。

このように、ChatGPTはコーディングの初期段階で設計を形にする補助となり、エンジニアの作業を効率化することができます。また、この過程で設計の整合性を確認する機会を得ることもできます。

これからも、ChatGPTのようなAIツールをどのようにソフトウェア開発に組み込んでいけるか、その可能性を探求していきたいと思います。

以上、OpenAIのChatGPTを利用したJavaのドメイン駆動設計(DDD)の実装についての報告でした。ありがとうございました。