<source id="4vppl"><ins id="4vppl"></ins></source>
<u id="4vppl"><sub id="4vppl"><label id="4vppl"></label></sub></u>
<object id="4vppl"></object>
  • <u id="4vppl"><li id="4vppl"><label id="4vppl"></label></li></u>

    <object id="4vppl"></object>
    <b id="4vppl"><sub id="4vppl"><tr id="4vppl"></tr></sub></b>

      <i id="4vppl"><thead id="4vppl"></thead></i>

      <thead id="4vppl"><li id="4vppl"><label id="4vppl"></label></li></thead>

      當(dāng)前位置:首頁 > 網(wǎng)站舊欄目 > 學(xué)習(xí)園地 > 設(shè)計軟件教程 > DomainModel之DomainObject

      DomainModel之DomainObject
      2010-01-14 22:32:24  作者:  來源:
      相對于UI的開發(fā)受限于既有框架的結(jié)構(gòu),DomainModel有更大的靈活性,因為框架本身由自己開發(fā)的。
        在整個DomainModel框架中,最基礎(chǔ)的對象莫過于DomainObject。DomainObject既然是所有領(lǐng)域
      對象的父類,就該體現(xiàn)最基礎(chǔ)的特征。并且為其他層或某些方面提供一致的入口。
        “有名萬物之母”,這也是DomainObject中需要體現(xiàn)的。
      DomainObject的名有很多,很多的原因是有很多關(guān)心它的參與者。

      計算機(jī)使用的名--ID:必須,通常為64位的Integer。如果數(shù)據(jù)庫是64位的CPU,據(jù)說這樣定ID效率是最高的。

      第三方和用戶輸入的名--Code:可選,String類型。盡管計算機(jī)知道了DomainObject,但用戶卻不知道,(用戶登錄系統(tǒng)就需要通過Code)第三方的開發(fā)人員也不知道。

      用戶期望看到的名--Name: 可選,String類型。對應(yīng)于自然語言中的名。

      用戶期望看到的關(guān)于該對象的描述之名--Description:可選,String類型。這也需要最不重要的名了,對于該對象的備注,簡要解釋都可以放到這里。

      有了名,我們就可以思考DomainObject了,基于“萬物皆過程”的思考,表現(xiàn)過程的屬性是需要加上的。于是
      DomainObject有了{(lán)TimePeriod lifecycle}字段。lifecycle.start應(yīng)該可以在某個構(gòu)造函數(shù)中填入,當(dāng)對象在業(yè)務(wù)上無效時可以填入lifecycle.end。DomainObject就“存活”于lifecycle之中。
      當(dāng)然你可以殘酷一些,讓DomainObject回歸虛無,直接調(diào)用destroy方法,徹底刪除它。

      實際上持久化的DomainObject不過是反映了對象在lifecycle期間的當(dāng)前快照,也就是說DomainObject存在很多快照,
      我們可以使用{int version}來標(biāo)識當(dāng)前快照。

      不知道什么時間,有人在DomainObject中放入了{(lán)int serialNumber},說是為了比較同類DomainObject的次序,我也說不清這是否站得住腳。

      Java代碼 復(fù)制代碼
      1. public abstract class DomainObject implements Comparable{   
      2.        
      3.     private Long id;   
      4.        
      5.     private String code;   
      6.        
      7.     private String name;   
      8.   
      9.     private String description;   
      10.   
      11.           private TimePeriod lifecycle;   
      12.   
      13.           private int version;   
      14.   
      15.           private int serialNumber;   
      16.   
      17.     /**  
      18.     * 從持久層中重新構(gòu)造DomainObject  
      19.     */  
      20.     protected DomainObject(); {   
      21.   
      22.     }   
      23.   
      24.     /**  
      25.     * 業(yè)務(wù)上創(chuàng)建DomainObject  
      26.     */  
      27.     protected DomainObject(String name, String code, int serialNumber,   
      28.         String description); {   
      29.         this.id = IdGenerator.getCurrent();.nextId(this);;   
      30.         this.version = 0;   
      31.         this.lifecycle = new TimePeriod();;   
      32.         this.name = name;   
      33.         this.code = code == null ? id.toString(); : code;   
      34.         this.serialNumber = serialNumber;   
      35.         this.description = description;   
      36.     }   
      37.        
      38.     public void destroy(); {   
      39.        
      40.     }   
      41.        
      42.     @Override  
      43.     public int hashCode(); {   
      44.         assert id != null : this.getClass();.getName(); + " id為null";   
      45.         return id.hashCode();;   
      46.     }   
      47.   
      48.     @Override  
      49.     public boolean equals(Object obj); {   
      50.         if (!(obj instanceof DomainObject););   
      51.             return false;   
      52.         DomainObject domainObj = (DomainObject); obj;   
      53.         return this.getId();.longValue(); == domainObj.getId();.longValue();;   
      54.     }   
      55.   
      56.     public int compareTo(Object obj); {   
      57.         assert this.getClass(); == obj.getClass(); : "無在不同的DomainObject間比較";   
      58.         DomainObject o = (DomainObject); obj;   
      59.         return this.serialNumber.compareTo(o.serialNumber);;   
      60.     }   
      61.        
      62.     /**  
      63.     * 判斷DomainObject是否已過期  
      64.     */  
      65.     public boolean isExpired(); {   
      66.         Calendar now = Calendar.getInstance();;   
      67.         if (now.compareTo(lifecycle.getEnd();); > 0);   
      68.             return true;   
      69.         else  
      70.             return false;   
      71.     }   
      72.        
      73.     public TimePeriod getLifecycle(); {   
      74.         return (TimePeriod); lifecycle.clone();;   
      75.     }   
      76.        
      77.     public void setEnd(Calendar end); {   
      78.         lifecycle.setEnd((Calendar); end.clone(););;   
      79.     }   
      80.        
      81.     public void checkVersion(int version); {   
      82.         if (this.version.compareTo(version); != 0);   
      83.             throw new DataChangedByOthersException();;   
      84.     }   
      85.        
      86. }  

      安徽新華電腦學(xué)校專業(yè)職業(yè)規(guī)劃師為你提供更多幫助【在線咨詢
      国产午夜福三级在线播放_亚洲精品成a人片在线观看_亚洲自慰一区二区三区_久久棈精品久久久久久噜噜
      <source id="4vppl"><ins id="4vppl"></ins></source>
      <u id="4vppl"><sub id="4vppl"><label id="4vppl"></label></sub></u>
      <object id="4vppl"></object>
    1. <u id="4vppl"><li id="4vppl"><label id="4vppl"></label></li></u>

      <object id="4vppl"></object>
      <b id="4vppl"><sub id="4vppl"><tr id="4vppl"></tr></sub></b>

        <i id="4vppl"><thead id="4vppl"></thead></i>

        <thead id="4vppl"><li id="4vppl"><label id="4vppl"></label></li></thead>
        欧美性爱在线免费观看 | 中文字老妇女偷乱视频在线 | 亚洲va久久久噜噜噜熟女88 | 少妇把腿扒开让我添免费视频 | 亚洲区日韩精品中文字幕 | 亚洲高潮在线播放 |