你的位置:首页 > 软件开发 > Java > 项目中应用eventbus解决的问题

项目中应用eventbus解决的问题

发布时间:2016-01-29 18:00:10
在项目开发过程中,往往有些功能表面看起来简单,但实际开发的结果非常复杂,仔细分析下原因发现很多都是因为附加了许多的额外功能。 真的简单吗? 比如我们对一个电商平台的商品数据做修改的功能来讲,其实非常简单,无非就是运营人员在管理平台中对商品进行修改数据,然后点击提交,核 ...

项目中应用eventbus解决的问题

  在项目开发过程中,往往有些功能表面看起来简单,但实际开发的结果非常复杂,仔细分析下原因发现很多都是因为附加了许多的额外功能。

项目中应用eventbus解决的问题

  真的简单吗?

  比如我们对一个电商平台的商品数据做修改的功能来讲,其实非常简单,无非就是运营人员在管理平台中对商品进行修改数据,然后点击提交,核心功能的确很简单,但可能有人会要求对商品的修改都需要增加操作日志,还有人提出需要在商品数据修改后自动去更新检索系统中的数据,有人提要在商品数据修改后需要经过审核人的审核才能生效,还有人提需要给运营人员发邮件通知等等,如此一来这个商品修改的功能就不是那么简单了,它除了完成自己的使命,还需要去调用其它的服务来完成,活动类似如下:

项目中应用eventbus解决的问题

 横向的主流程,上下四个小方框是附加功能,复杂的原因包含如下两点:

  •   附加功能导致功能开点变多,工作量加大
  •   附加功能导致程序逻辑复杂,在程序中需要去访问其它的服务,还需要考虑数据完整性,性能,服务依赖等各种问题。

  刚开始我们在项目中开发时,使用的就是最简单的强耦合去直接调用服务,比如在调用完数据保存的方法后,去调用logService的log方法记录日志,调用esService的方法去更新检索系统,调用mailService的方法去发邮件,这样会导致我们的productService强耦合这些与商品保存逻辑没有直接关联的服务,这样看起来商品保存的功能变得不那么单纯,也就是我们文前提到的复杂了,会出现类似代码:

@Autowiredprivate SearchService searchService;@Autowiredprivate MailService mailService;@Autowiredprivate ProductLogService productLogService;//如下下保存商品的代码片段itemDao.save(product);searchService.update(product.getId());mailService.post(product.getId());logService.log(product.getId());
  第一:要有观察者,这里我们根据不同的业务封装不同的观察者,下面是更新检索系统数据的类

@Service public class SearchEventListener {  @Autowired()  ProductUpdateMgr productSearchUpdateMgr;  private final static Logger logger = LoggerFactory.getLogger(SearchEventListener.class);  @Subscribe  public void listen(String itemLegacyId) {    try    {      productSearchUpdateMgr.markProductDirty(itemLegacyId);    }    catch(Exception ex)    {      logger.error("更新检索异常:" + ex.getMessage() + ex.getStackTrace());    }  }  }
  问题三:强耦合问题,由于有了EventListenerManager,我们在具体业务中就不需要依赖不直接相关的服务了,只需要依赖EventListenerManager这个看起来与任务业务都无关的管理类就可以了。

项目中应用eventbus解决的问题

原标题:项目中应用eventbus解决的问题

关键词:

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

可能感兴趣文章

我的浏览记录