🐡

オタクくん「ギャル先輩、ドメイン駆動開発(DDD)ってなんですか?」

2024/05/29に公開

オタクくん「ギャル先輩、ドメイン駆動開発(DDD)ってなんですか?」

ギャル先輩「お、オタクくん、DDDに興味持つなんて偉いじゃん!DDDはソフトウェア開発の手法の一つで、複雑な問題を解決するために使うんだよ。」

ドメイン駆動開発(DDD)の基本概念

オタクくん「でも、具体的にはどういうものなんですか?」

ギャル先輩「DDDは、ビジネスの ドメイン を中心に設計する方法だよ。つまり、ビジネスのルールやロジックをコードに反映させるんだ。」

オタクくん「ビジネスのドメインって?」

ギャル先輩「ドメインは、そのビジネスが関わる領域のことだよ。例えば、eコマースのドメインなら、商品、注文、顧客などが含まれるね。」

エンティティとバリューオブジェクト

ギャル先輩「DDDでは、エンティティバリューオブジェクト っていう概念を使うんだ。」

オタクくん「それって何ですか?」

ギャル先輩「エンティティは、一意の識別子を持つオブジェクトで、バリューオブジェクトは識別子を持たないオブジェクトだよ。例えば、注文はエンティティで、住所はバリューオブジェクトになることが多いね。」

オタクくん「なるほど、具体例を見せてもらえますか?」

ギャル先輩「もちろん!例えばこんな感じ。」

// エンティティの例
class Order {
    constructor(id, customer, items) {
        this.id = id; // 一意の識別子
        this.customer = customer;
        this.items = items;
    }
}

// バリューオブジェクトの例
class Address {
    constructor(street, city, zipcode) {
        this.street = street;
        this.city = city;
        this.zipcode = zipcode;
    }

    // 値の比較は、値そのものを比較
    equals(otherAddress) {
        return this.street === otherAddress.street &&
               this.city === otherAddress.city &&
               this.zipcode === otherAddress.zipcode;
    }
}

オタクくん「エンティティとバリューオブジェクトの違いがよくわかりました!」

アグリゲートとリポジトリ

ギャル先輩「次に、アグリゲートリポジトリ について話そう。」

オタクくん「アグリゲートって何ですか?」

ギャル先輩「アグリゲートは、エンティティとバリューオブジェクトの集まりで、一つのまとまりとして扱うものだよ。例えば、注文とその注文に含まれる商品がアグリゲートになるんだ。」

オタクくん「リポジトリは?」

ギャル先輩「リポジトリは、アグリゲートを永続化するためのパターンだよ。データベースとやり取りする役割を持ってるんだ。」

オタクくん「具体的なコードはどうなりますか?」

ギャル先輩「こんな感じかな。」

// アグリゲートの例
class OrderAggregate {
    constructor(order, items) {
        this.order = order;
        this.items = items;
    }
}

// リポジトリの例
class OrderRepository {
    constructor(database) {
        this.database = database;
    }

    save(orderAggregate) {
        // データベースにアグリゲートを保存する処理
    }

    findById(orderId) {
        // データベースからアグリゲートを取得する処理
    }
}

オタクくん「なるほど、これでデータの永続化がうまくできるんですね!」

ユビキタス言語

ギャル先輩「最後に ユビキタス言語 について話そう。」

オタクくん「ユビキタス言語って?」

ギャル先輩「ユビキタス言語は、開発チーム全員が共通して使う言葉のことだよ。これを使うことで、ビジネスと技術のギャップを埋めるんだ。」

オタクくん「具体的には?」

ギャル先輩「例えば、コードにもその言葉を反映させるんだ。さっきのエンティティやバリューオブジェクトもユビキタス言語の一部だよ。」

オタクくん「なるほど、全員が同じ言葉を使えば、コミュニケーションがスムーズになるんですね!」

まとめ

オタクくん「ギャル先輩、DDDについてよくわかりました!これからの開発に役立てます。」

ギャル先輩「よかったじゃん、オタクくん!DDDを使えば、複雑なシステムも整理しやすくなるよ。頑張ってね!」

オタクくん「ありがとうございます、ギャル先輩!」

Discussion