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