Value Object & Entity & Domain Service

Entity

對于Entity,區(qū)別于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這樣的屬性,用來作為獨一無二的標識,其中標識可以在對象創(chuàng)建的時候生成,也可以在持久化對象的時候生成。

Value Object

首先針對Entity以及Value Object,我們應該盡量使用的是值對象而非實體。如果將所有的的對象創(chuàng)建實體,每一個實體的屬性都映射到數(shù)據(jù)庫中,并且為每個屬性設置相應的setter以及getter,會變得異常復雜,并且浪費時間。
相反的,值對象可以在創(chuàng)建對象化之后直接處理掉,不用擔心客戶端對值對象的修改問題。
對于值對象,它不應該成為領域內的某一個東西,而僅僅是描述領域內的一個概念。
當值對象創(chuàng)建出來之后,就不應該再去修改,也就是值對象的不變性。
對于簡單代碼而言

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

領域中的服務表示無狀態(tài)的操作,用于實現(xiàn)某個特定領域的任務。當操作不適合放在聚合中或者ValueObject中的時候,此時就應該放置在領域服務中。
其中領域服務并不是業(yè)務服務,業(yè)務服務并不會處理到業(yè)務邏輯,而領域服務恰恰是處理業(yè)務邏輯的。
一些明確無狀態(tài)的操作就可以劃分到領域服務中去,如下

class DomainService {
    constructor() {
        super()
    }
}
class queryService extends DomainService {
    static async getTransaction(){
        ...
    }
}

查詢操作就可以劃分到領域服務中去。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,533評論 19 139
  • 一. Java基礎部分.................................................
    wy_sure閱讀 4,010評論 0 11
  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,637評論 18 399
  • 有人說,你邊上班邊帶孩子,家里肯定有老人幫忙吧! 有人說,你自己帶兩個孩子,還上班?你的工作一定很輕松...
    寧子沫沫閱讀 254評論 1 1
  • 一些博客 王巍 Objc中國發(fā)起人、Line工程師 ibireme YYKit作者 bang JSPatch作...
    RubyAhooo閱讀 7,667評論 21 299

友情鏈接更多精彩內容