隨筆 - 16  文章 - 0  trackbacks - 0
          <2011年9月>
          28293031123
          45678910
          11121314151617
          18192021222324
          2526272829301
          2345678

          常用鏈接

          留言簿

          隨筆檔案

          友情鏈接

          搜索

          •  

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          背景分析:
               在企業(yè)內(nèi)部信息系統(tǒng)中,大部分的業(yè)務(wù)數(shù)據(jù)可以簡(jiǎn)單的分成兩類:
                一、基礎(chǔ)數(shù)據(jù),為業(yè)務(wù)處理提供必需參數(shù),在MIS系統(tǒng)中的客戶信息、網(wǎng)點(diǎn)信息等等;
                二、業(yè)務(wù)單據(jù),為實(shí)現(xiàn)企業(yè)信息流、數(shù)據(jù)流、資金流的流轉(zhuǎn)與控制提供業(yè)務(wù)數(shù)據(jù)支持,在快遞企業(yè)中的運(yùn)單就是一個(gè)典型業(yè)務(wù)單據(jù)。

                簡(jiǎn)單的說,基礎(chǔ)數(shù)據(jù)與具體業(yè)務(wù)關(guān),業(yè)務(wù)單據(jù)就是只管具體業(yè)務(wù)。    
                基礎(chǔ)數(shù)據(jù)的特點(diǎn),1、涉及業(yè)務(wù)單據(jù)的引用問題,一旦引用就是不能刪除;2、為了方便數(shù)據(jù)歸類,使用編碼進(jìn)行分類數(shù),如在財(cái)務(wù)系統(tǒng)中的科目;3、為了增強(qiáng)基礎(chǔ)數(shù)據(jù)的可讀性,我們需要增加一個(gè)名稱屬性,如果名稱太長了,我們可以考慮增加一個(gè)檢查或者備注;
               業(yè)務(wù)數(shù)據(jù)呢,現(xiàn)實(shí)業(yè)務(wù)中所有單據(jù)都通過編碼進(jìn)行區(qū)分,比如發(fā)票,業(yè)務(wù)發(fā)生后要記錄業(yè)務(wù)日期及記賬日期,當(dāng)業(yè)務(wù)記錄錯(cuò)誤時(shí),我們要保證系統(tǒng)業(yè)務(wù)的原始記錄,不能對(duì)系統(tǒng)原始數(shù)據(jù)直接更改(審計(jì)叫做業(yè)務(wù)數(shù)據(jù)的靜止性),需要進(jìn)行紅沖,然后然后寫入新的業(yè)務(wù)數(shù)據(jù),新的業(yè)務(wù)數(shù)據(jù)業(yè)務(wù)編號(hào)、業(yè)務(wù)日期無需改變,記賬則要記錄到當(dāng)前時(shí)間,如果發(fā)生多次紅沖,如何處理呢,我們可以考慮增加一個(gè)有效版本控制。
               再看看,是不是還少了主鍵?還有一種場(chǎng)景是不是沒有考慮到,同一個(gè)單據(jù)或者基礎(chǔ)數(shù)據(jù)被兩個(gè)人同時(shí)編輯是不是會(huì)事務(wù)并發(fā)的問題?一個(gè)單據(jù)是否對(duì)應(yīng)多個(gè)明細(xì),如果進(jìn)行處理?試著對(duì)問題的回答,對(duì)模型進(jìn)一步總結(jié)形成以下結(jié)果。
          如何通過基類簡(jiǎn)化開發(fā)工作,請(qǐng)見構(gòu)建基于Hibernate的基類實(shí)體(2)
          (第一次寫博,歡迎大家指點(diǎn),如有錯(cuò)誤謝絕辱罵)。
          package com.kds.kuaijian.framework.entity;

          import java.io.Serializable;
          import javax.persistence.*;


          /**
           * @generated
           * 實(shí)體基類,用于將來擴(kuò)展
           
          */
          @MappedSuperclass
          public abstract class CoreBase implements Serializable {

              
          /**
               *
               
          */
              
          private static final long serialVersionUID = 3086983746058217854L;
              
          /**
               * @generated
               * 主鍵,禁止為空,禁止更改
               
          */
              @Column(length 
          = 44,nullable = false,updatable = false)
              @Id
              
          private String id;

              
          /**
               * @generated
               
          */
              
          public String getId() {
                  
          return this.id;
              }

              
          /**
               * @generated
               
          */
              
          public void setId(String value) {
                  
          this.id = value;
              }
              
              
              
          /**
               * 別名
               * 
          @return 
               
          */
              
          public abstract String getAlias();
              
          }


          package com.kds.kuaijian.framework.entity;

          import java.util.Date;

          import javax.persistence.*;

          /**
           * @generated
           * 業(yè)務(wù)對(duì)象基類,增加創(chuàng)建日期、更新時(shí)間、版本號(hào),用于處理事務(wù)并發(fā)
           
          */
          @MappedSuperclass
          public abstract class ObjectBase extends CoreBase {

              
          /**
               *
               
          */
              
          private static final long serialVersionUID = -3493844437392704456L;
              
              
          /**
               * @generated創(chuàng)建時(shí)間
               
          */
              @Column(nullable 
          = false, updatable = false)
              @Temporal(TemporalType.TIMESTAMP)
          //不用set,hibernate會(huì)自動(dòng)把當(dāng)前時(shí)間寫入  
              private Date  createTime;
              
          /**
               * @generated更新時(shí)間
               
          */
              @Column(nullable 
          = false)
              @Temporal(TemporalType.TIMESTAMP)
              
          private Date lastUpdateTime;
              
          /**
               * 版本號(hào)
               
          */
              @Column(nullable 
          = false)
              
          private int version;

              
          /**
               * 
          @return the version
               
          */
              
          public int getVersion() {
                  
          return version;
              }

              
          /**
               * 
          @param version the version to set
               
          */
              
          public void setVersion(int version) {
                  
          this.version = version;
              }

              
          /**
               * 
          @return the createTime
               
          */
              
          public Date getCreateTime() {
                  
          return createTime;
              }

              
          /**
               * 
          @param createTime the createTime to set
               
          */
              
          public void setCreateTime(Date createTime) {
                  
          this.createTime = createTime;
              }

              
          /**
               * 
          @return the lastUpdateTime
               
          */
              
          public Date getLastUpdateTime() {
                  
          return lastUpdateTime;
              }

              
          /**
               * 
          @param lastUpdateTime the lastUpdateTime to set
               
          */
              
          public void setLastUpdateTime(Date lastUpdateTime) {
                  
          this.lastUpdateTime = lastUpdateTime;
              }
          }


          package com.kds.kuaijian.framework.entity;

          import java.util.Date;
          import javax.persistence.*;

          /**
           * 業(yè)務(wù)單據(jù)基類
           
          */
          @MappedSuperclass
          public abstract class BillBase extends ObjectBase {

              
          private static final long serialVersionUID = -8711722606843400608L;
              
          /**
               * @generated編碼
               
          */
              @Column(length 
          = 100, nullable = false, updatable = false)
              
          private String number;
              
          /**
               * @generated描述
               
          */
              @Column(length 
          = 200)
              
          private java.lang.String description;

              
          /**
               * 業(yè)務(wù)日期
               
          */
              @Column(nullable 
          = false, updatable = false)
              @Temporal(TemporalType.TIMESTAMP)
          //不用set,hibernate會(huì)自動(dòng)把當(dāng)前時(shí)間寫入
              private Date bizDate;
              
          /**
               * 記賬日期
               
          */
              @Column(nullable 
          = false, updatable = false)
              @Temporal(TemporalType.TIMESTAMP)
          //不用set,hibernate會(huì)自動(dòng)把當(dāng)前時(shí)間寫入
              private Date acctDate;
              
              
          /**
               * 是否為有效版本
               
          */
              @Column(nullable 
          = false)
              
          private boolean effectionVerion;
              
              
          /**
               * 是否為紅單
               
          */
              @Column(nullable 
          = false)
              
          private boolean redBill;
              

              
          /**
               * @generated
               
          */
              
          public java.lang.String getDescription() {
                  
          return this.description;
              }

              
          /**
               * @generated
               
          */
              
          public void setDescription(java.lang.String value) {
                  
          this.description = value;
              }

              
          /**
               * 
          @return the number
               
          */
              
          public String getNumber() {
                  
          return number;
              }

              
          /**
               * 
          @param number the number to set
               
          */
              
          public void setNumber(String number) {
                  
          this.number = number;
              }

             
              
          /**
               * 
          @return the bizDate
               
          */
              
          public Date getBizDate() {
                  
          return bizDate;
              }

              
          /**
               * 
          @param bizDate the bizDate to set
               
          */
              
          public void setBizDate(Date bizDate) {
                  
          this.bizDate = bizDate;
              }

              
          /**
               * 
          @return the acctDate
               
          */
              
          public Date getAcctDate() {
                  
          return acctDate;
              }

              
          /**
               * 
          @param acctDate the acctDate to set
               
          */
              
          public void setAcctDate(Date acctDate) {
                  
          this.acctDate = acctDate;
              }

              
          /**
               * 
          @return the effectionVerion
               
          */
              
          public boolean isEffectionVerion() {
                  
          return effectionVerion;
              }

              
          /**
               * 
          @param effectionVerion the effectionVerion to set
               
          */
              
          public void setEffectionVerion(boolean effectionVerion) {
                  
          this.effectionVerion = effectionVerion;
              }

              
          /**
               * 
          @return the redBill
               
          */
              
          public boolean isRedBill() {
                  
          return redBill;
              }

              
          /**
               * 
          @param redBill the redBill to set
               
          */
              
          public void setRedBill(boolean redBill) {
                  
          this.redBill = redBill;
              }
          }


          package com.kds.kuaijian.framework.entity;

          import javax.persistence.*;

          /**
           * 基礎(chǔ)數(shù)據(jù)基類
           
          */
          @MappedSuperclass
          public abstract class BaseData extends ObjectBase {

              
          private static final long serialVersionUID = -8711722606843400608L;
              
          /**
               * @generated編碼
               
          */
              @Column(length 
          = 100, nullable = false ,updatable = false)
              
          private String number;
              
              
          /**
               * @generated名稱
               
          */
              @Column(length 
          = 200, nullable = false,updatable = false)
              
          private java.lang.String name;
              
              
          /**
               * @generated簡(jiǎn)稱
               
          */
              @Column(length 
          = 200)
              
          private java.lang.String simpleName;
              
              
          /**
               * @generated描述
               
          */
              @Column(length 
          = 200)
              
          private java.lang.String description;
              
              
          /**
               * 是否刪除
               
          */
              @Column(nullable 
          = false)
              
          private boolean isDelete;

              
          /**
               * @generated
               
          */
              
          public java.lang.String getName() {
                  
          return this.name;
              }

              
          /**
               * @generated
               
          */
              
          public void setName(java.lang.String value) {
                  
          this.name = value;
              }

              
          /**
               * @generated
               
          */
              
          public java.lang.String getSimpleName() {
                  
          return this.simpleName;
              }

              
          /**
               * @generated
               
          */
              
          public void setSimpleName(java.lang.String value) {
                  
          this.simpleName = value;
              }

              
          /**
               * @generated
               
          */
              
          public java.lang.String getDescription() {
                  
          return this.description;
              }

              
          /**
               * @generated
               
          */
              
          public void setDescription(java.lang.String value) {
                  
          this.description = value;
              }

              
          /**
               * 
          @return the number
               
          */
              
          public String getNumber() {
                  
          return number;
              }

              
          /**
               * 
          @param number the number to set
               
          */
              
          public void setNumber(String number) {
                  
          this.number = number;
              }

              
          public boolean isDelete() {
                  
          return isDelete;
              }

              
          public void setDelete(boolean isDelete) {
                  
          this.isDelete = isDelete;
              }
          }
          posted on 2011-09-20 23:50 民工二代 閱讀(465) 評(píng)論(0)  編輯  收藏

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 即墨市| 梁河县| 凤山县| 通化市| 灵山县| 临颍县| 林西县| 巨野县| 桑植县| 岳普湖县| 连城县| 郑州市| 台山市| 环江| 清苑县| 合水县| 墨江| 隆昌县| 长汀县| 溧阳市| 木里| 酉阳| 孟津县| 行唐县| 府谷县| 安福县| 九龙城区| 屏山县| 崇礼县| 昭平县| 托克逊县| 安化县| 嘉峪关市| 四川省| 延庆县| 佳木斯市| 贵定县| 留坝县| 同仁县| 安康市| 吉木萨尔县|