码迷,mamicode.com
首页 > 其他好文 > 详细

绿叶水果商城系统开发代码技术、

时间:2018-02-02 14:31:34      阅读:176      评论:0      收藏:0      [点我收藏+]

标签:技术分享   过程   一起   大量   img   随机数生成   实现   业务   使用   

  绿叶水果商城系统开发 婷经理 【联系电话: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】 绿叶水果商城软件开发 绿叶水果商城平台开发

绿叶水果商城系统开发代码技术、

标签:技术分享   过程   一起   大量   img   随机数生成   实现   业务   使用   

原文地址:https://www.cnblogs.com/kxt599/p/8404449.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!