• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 談實體對象和值對象

    發表于:2012-05-22來源:新浪博客作者:人月神話點擊數: 標簽:實體對象值對象
    對于實體Entity和值對象Value Object是領域驅動設計里面兩個重要的模型對象。所以有必要對兩者的關系和區別進行理解。以下部分內容直接引用自《領域驅動設計》一書相關內容。

      對于實體Entity和值對象Value Object是領域驅動設計里面兩個重要的模型對象。所以有必要對兩者的關系和區別進行理解。以下部分內容直接引用自《領域驅動設計》一書相關內容。

      首先對于實體Entity,實體核心是用唯一的標識符來定義,而不是通過屬性來定義。即即使屬性完全相同也可能是兩個不同的對象。同時實體本身有狀態的,實體又演進的生命周期,實體本身會體現出相關的業務行為,業務行為會實體屬性或狀態造成影響和改變。

      真正的現實世界,每個事物都一定會有唯一的標識,關鍵點是我們實際的業務場景和需求是否需要管理到唯一標識。書里面舉了一個例子,當我們發放的門票上有座位號的時候,座位需要作為獨立的實體,座位號是唯一的標識。而當先到先座模式下,我們只關心剩余座位數,那么座位號并不是唯一標識。這跟我們的業務需求有關。

      一個對象不由屬性來定義,那么看人這個對象,身份證號是屬性,其實也是對于人的唯一標識。不考慮本身身份證號的位數升級,一個身份證號會跟隨你一輩子。但是對于人我們一般仍然會作為實體Entity來看待,因為人有狀態,有對象演進的生命周期,會主動產生各種行為。

      對于企業內信息系統,很多時候我們把員工工卡號作為唯一標識來使用,但是要意識到工卡號只是人員的一個屬性。雖然工卡號本身不會出現兩個重復的,但是該屬性仍然可能演變,如果將工卡號作為唯一標識和ID,那么在該屬性變化時候所有其余關聯對象都將受到影響。從這個層面來看,一個唯一的內碼ID才是可信的唯一標識。

      而對于值對象Value Object,它用于描述領域的某個方面本身沒有概念標識的對象,值對象被實例化后只是提供值或叫設計元素,我們只關心這些設計元素是什么?而不關心這些設計元素是誰。書里面談到顏色,數字是常見的值對象。這種對象無狀態,本身不產生行為,不存在生命周期演進。

      是否為值對象跟實際的業務場景仍然關系密切。書里面又舉了地址的例子,當地址是值對象的時候,地址本身無狀態,可以被多個實際有狀態的實體使用,地址不存在太多的生命周期演進場景下地址為值對象。而對于本身行政區域管理軟件中,地址本身存在狀態,存在根據行政區域規劃變化而演進的過程,因此地址為實體。

      如果從值對象本身無狀態,不可變,并且不分配具體的標識層面來看。那么值對象可以僅僅理解為實際的Entity對象的一個屬性結合而已。該值對象附屬在一個實際的實體對象上面。值對象本身不存在一個獨立的生命周期,也一般不會產生獨立的行為。

      值對象往往可能是多個屬性的聚合,本身無唯一標識,多個屬性最終形成的一個結果值,而這個結果值往往又依附在一個實際的實體Entity上面。那么如果從這個概念來說,值對象往往不會單獨進行持久化,或形成數據庫設計的一張數據表。另外一種情況,對于簡單的數據字典類對象,是否考慮作為值對象,這種對象需要持久化,如納稅屬性,物料類型,它們設計到數據字典中取值,這個數據字典無狀態,無自己的生命周期,是可以作為值對象來處理的。

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>