1. 程式人生 > >綠葉水果商城系統開發代碼技術、

綠葉水果商城系統開發代碼技術、

至少 pool 經理 bsp 行業 情況 return 領域建模 int

  綠葉水果商城系統開發 婷經理 【聯系電話:184-7578-0020】 綠葉水果商城軟件開發 綠葉水果商城平臺開發 至少30年以前,一些軟件設計人員就已經意識到領域建模和設計的重要性,並形成一種思潮,Eric Evans將其定義為領域驅動設計(Domain-Driven Design,簡稱DDD)。在互聯網開發“小步快跑,叠代試錯”的大環境下,DDD似乎是一種比較“古老而緩慢”的思想。然而,由於互聯網公司也逐漸深入實體經濟,業務日益復雜,我們在開發中也越來越多地遇到傳統行業軟件開發中所面臨的問題。本文就先來講一下這些問題,然後再嘗試在實踐中用DDD的思想來解決這些問題。

  在我們習慣了J2EE的開發模式後,Action/Service/DAO這種分層模式,會很自然地寫出過程式代碼,而學到的很多關於OO理論的也毫無用武之地。使用這種開發方式,對象只是數據的載體,沒有行為。以數據為中心,以數據庫ER設計作驅動。分層架構在這種開發模式下,可以理解為是對數據移動、處理和實現的過程。

  以筆者最近開發的系統抽獎平臺為例:

  場景需求

  獎池裏配置了很多獎項,我們需要按運營預先配置的概率抽中一個獎項。

  實現非常簡單,生成一個隨機數,匹配符合該隨機數生成概率的獎項即可。

  貧血模型實現方案

  先設計獎池和獎項的庫表配置。

  

技術分享圖片

  設計AwardPool和Award兩個對象,只有簡單的get和set屬性的方法

  class AwardPool {

  int awardPoolId;

  List awards;

  public List getAwards() {

  return awards;

  }

  public void setAwards(List awards) {

  this.awards = awards;

  }

  ......

  }

  class Award {

  int awardId;

  int probability;//概率

  ......

  }

  Service代碼實現

  設計一個LotteryService,在其中的drawLottery()方法寫服務邏輯

  AwardPool awardPool = awardPoolDao.getAwardPool(poolId);//sql查詢,將數據映射到AwardPool對象

  for (Award award : awardPool.getAwards()) {

  //尋找到符合award.getProbability()概率的award

  }

  按照我們通常思路實現,可以發現:在業務領域裏非常重要的抽獎,我的業務邏輯都是寫在Service中的,Award充其量只是個數據載體,沒有任何行為。簡單的業務系統采用這種貧血模型和過程化設計是沒有問題的,但在業務邏輯復雜了,業務邏輯、狀態會散落到在大量方法中,原本的代碼意圖會漸漸不明確,我們將這種情況稱為由貧血癥引起的失憶癥。

  更好的是采用領域模型的開發方式,將數據和行為封裝在一起,並與現實世界中的業務對象相映射。各類具備明確的職責劃分,將領域邏輯分散到領域對象中。繼續舉我們上述抽獎的例子,使用概率選擇對應的獎品就應當放到AwardPool類中。

  綠葉水果商城系統開發 婷經理 【聯系電話:184-7578-0020】 綠葉水果商城軟件開發 綠葉水果商城平臺開發

綠葉水果商城系統開發代碼技術、