mysql 循环查询依赖_关于循环依赖 - _江左梅郎_的个人空间 - OSCHINA - 中文开源技术交流社区...

1:不要出现相互依赖  或者循环依赖, 最好是单向依赖   (之前pb出现循环依赖)

2:api之间不相互依赖, 只是实现之间相互依赖api,这样就不会出现循环依赖了

比如  现在的需求是  查询达人需要查询达人的行程,   查询达人的行程,也需要查询行程属于哪个达人    这个看起来似乎是

class User{

private Journey journey;

}

class Journey{

private User user;

}

达人模块依赖于行程模块     行程模块也依赖达人模块   如果按照之前的设计一定是这样的

也就是 user-api 里面有个方法  需要根据userId来获取行程对象Journey   而Journey对象在journey-api里面   所以 user-api依赖了 journey-api

同理, 需要根据journeyId 来获取User对象 那么journey-api依赖了user-api.  那么问题来了,maven打包 很可能就会因为两者相互依赖编译通不过

如果改进一下呢?是这样的

那么现在,实现只依赖api,api之间不依赖 , 然后通过dubbo的暴露服务的方式,自动去查找对应的实现

事实上,设计也是合理的, 细想一下, user-api为什么要依赖行程journey-api 呢

要依赖也是具体的实现的时候  才会获取到行程

那么,问题又来了,我需要获取达人和他的行程 怎么办, 也就是最上面的User对象带journey

别急,如果是这样的需求,那么这样的一个接口,  不应该是user-api 单独提供,也不应该是 journey-api单独提供.

那么,怎么返回呢.答案应该是这样的,这一个controller里面调用2次

1: 获取User对象  User user=userService.getById(userId);

2:获取Journey对象   Journey journey=journerService.getByUserId(userId);

class UserResp{

privatee User user;

private Journey journey;

}

UserResp resp =new UserResp();

resp.serUser(user);

resp .setJourney(journey);

这样是不是解决了呢 ,如果为了减少远程调用,那么是不是可用使用一个base-api  依赖 user-api 和 journey-api  一次返回

那么对于最开始提到的pb循环依赖也是一样,2个对象相互依赖,那么怎么解决呢,那就是加一个对象,就像UserResp 把2个对象组合到一起

所以解决这种循环依赖的本质,还是抽象一个第三方模块, 来分别依赖User和Journey。而不是两者互相嵌套,相互依赖

写到这里,你是不是觉得,这个循环依赖,像是死锁,两个人都需要对方的锁,但是都不给,导致都拿不到,然后互相等待。

这就跟2个小朋友都喜欢对方的玩具一样,都想交换来玩,但是谁都不想先给对方,怕对方不给自己,当然小孩子的心理是这样的。

那么这样依赖怎么促成这个交易呢, 这就需要一个中间人了,比如爸爸妈妈说:你们先把玩具都给我,我不会要你们的玩具吧,这样说孩子肯定相信爸爸妈妈

于是,当爸爸妈妈都拿到玩具之后,再分别给2个小朋友,这样是不是就顺利完成了?

那么在这里爸爸妈妈充当了一个什么角色呢?没错,就是中间人。就是上面的第三方模块。就是上面的UserResp的

上面的情况是A---B  而且B---A的情况

那么 A---B   B---C  C---A的情况呢  这个是一个环状

这个情况怎么解决呢? 有没有办法?

其实,没错,还是可以用上述方法实现

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值