Categories
ドメイン駆動設計

エンティティ

概要

 エンティティ(Entity)は、ソフトウェア開発におけるデータモデリングやドメイン駆動設計において使用される概念の一つです。エンティティは、ユニークな識別子(ID)に基づいて特定される個別のオブジェクトや実体を表現します。

エンティティは、データベースやアプリケーションの中で重要な役割を果たします。エンティティは一般的に、状態(ステート)を持ち、その状態を変更することができます。また、エンティティは他のエンティティとの関連を持つことがあります。

以下はエンティティの特徴です:

  1. ユニークな識別子(ID):エンティティは一意のIDによって識別されます。このIDは他のエンティティと区別するために使用されます。
  2. 状態(ステート):エンティティはデータを保持し、その状態を変更することができます。例えば、顧客エンティティは名前や住所といった属性を持ち、これらの値を変更することができます。
  3. 関連:エンティティは他のエンティティと関連を持つことがあります。関連は異なるエンティティ間の関係を表現し、データの一貫性や関連データの操作を可能にします。例えば、注文エンティティは顧客エンティティとの関連を持つことがあります。

エンティティはビジネスドメインの重要な概念や実体を表現するために使用されます。データベースのテーブルやオブジェクト指向プログラミングのクラスとして実装されることが一般的です。エンティティを使用することで、ビジネスルールや関連データの管理、データの永続性と一貫性の確保が容易になります。

コード例

#include <iostream>
#include <string>

class Customer {
private:
    int id;
    std::string name;
    std::string address;

public:
    Customer(int id, const std::string& name, const std::string& address)
        : id(id), name(name), address(address) {}

    int getId() const {
        return id;
    }

    std::string getName() const {
        return name;
    }

    std::string getAddress() const {
        return address;
    }

    void setAddress(const std::string& newAddress) {
        address = newAddress;
    }
};

int main() {
    Customer customer(1, "John Doe", "123 Main St");
    std::cout << "Customer ID: " << customer.getId() << std::endl;
    std::cout << "Customer Name: " << customer.getName() << std::endl;
    std::cout << "Customer Address: " << customer.getAddress() << std::endl;

    customer.setAddress("456 Elm St");
    std::cout << "Updated Customer Address: " << customer.getAddress() << std::endl;

    return 0;
}

この例では、Customerクラスがエンティティとして定義されています。Customerクラスは顧客を表現し、id(識別子)、name(名前)、address(住所)の3つのプライベートメンバ変数を持ちます。

コンストラクタによって値が設定された後は、これらの値は変更可能です。getメソッドを通じて値を取得し、setAddressメソッドを使用して住所を変更することができます。

main関数では、Customerオブジェクトを作成し、その属性値を表示します。また、setAddressメソッドを使用して住所を更新し、変更後の値を表示します。

このようなエンティティを使用することで、ビジネスドメインの実体を表現し、状態の管理と操作を容易にすることができます。