Value Object & Entity & Domain Service

2835 단어

Entity


Entity에 대해 Value Object와 구별되는 점은 Entity가 유일한 표시를 가지고 실체의 ID라고 볼 수 있고 유일무이하다고 할 수 있지만 나머지 부분은 Entity가 Value Object와 유사하며 구체적으로 코드 형식으로 볼 수 있다.먼저 Entity
class Entity {
    constructor(id) {
        super();
        this.id = id
    }

    get id() {
        return this._id;
    }
    set id(value) {
        this._id = value;
    }
}
class Business extends Entity {
    constructor(options = {}) {
        const {
            amount, date, status
        } = options;
        //      id  ,    Entity     
        super(id);
        this.amount = amount;
        this.date = date;
        this.status = status;
    }

    get amount() {
        return this._amount;
    }
    set amount(value) {
        this._amount = value;
    }

    get date() {
        return this._date;
    }
    set date(value) {
        this._date = value;
    }

    get status() {
        return this._status;
    }
    set status(value) {
        this._status = value;
    };
}

먼저 기본적인 속성을 정의하고 Entity에서 ID와 같은 속성을 계승하여 유일무이한 표지로 사용했다. 그 중에서 표지는 대상이 만들어질 때 생성될 수도 있고 대상을 영구화할 때 생성될 수도 있다.

Value Object


우선 EntityValue Object에 대해 우리는 실체가 아닌 값 대상을 최대한 사용해야 한다.모든 대상을 실체로 만들면 모든 실체의 속성이 데이터베이스에 비치고 모든 속성에 해당하는 settergetter를 설정하면 매우 복잡하고 시간을 낭비할 수 있다.반대로 값 대상은 창설 대상화 후에 직접 처리할 수 있으며 클라이언트가 값 대상에 대한 수정 문제를 걱정할 필요가 없다.값의 대상에 대해 그것은 영역 내의 어떤 것이 되어서는 안 되고 단지 영역 내의 하나의 개념만을 묘사해서는 안 된다.값 대상이 만들어진 후에 다시 수정하지 말아야 한다. 즉, 값 대상의 불변성이다.간단한 코드에 대해서 말하자면
class ValueObject {
    constructor() {
        super()
    }
}

class Business extends ValueObject {
    constructor(options = {}) {
        const {
            amount, date, status
        } = options;
        //      id  ,    Entity     
        super();
        this.amount = amount;
        this.date = date;
        this.status = status;
    }

    get amount() {
        return this._amount;
    }
    set amount(value) {
        this._amount = value;
    }

    get date() {
        return this._date;
    }
    set date(value) {
        this._date = value;
    }

    get status() {
        return this._status;
    }
    set status(value) {
        this._status = value;
    };
}


ID 속성이 없으면 고유한 특성이 없어집니다.

Domain Service


영역 중의 서비스는 무상태의 조작을 나타내며 특정한 영역의 임무를 실현하는 데 쓰인다.집합이나 ValueObject에 작업이 적합하지 않을 때 영역 서비스에 놓아야 합니다.그 중에서 분야 서비스는 업무 서비스가 아니라 업무 서비스가 업무 논리에 처리되지 않고 분야 서비스는 바로 업무 논리를 처리하는 것이다.일부 명확한 무상태 조작은 분야 서비스로 나눌 수 있는데 다음과 같다.
class DomainService {
    constructor() {
        super()
    }
}
class queryService extends DomainService {
    static async getTransaction(){
        ...
    }
}

조회 조작은 분야 서비스로 나눌 수 있다.

좋은 웹페이지 즐겨찾기