首页 新闻 搜索 专区 学院

如何实现一个事件发生时,相关联的订阅处理都触发自动执行?

0
悬赏园豆:15 [待解决问题]

嗨,

库存管理里面,如果某个商品的货位发生变更了,怎样才能自动得更新其他业务表上涉及到该商品的货位?

比如,我们的订单明细表,调拨单,入库单上都记录了相关商品在某仓库上的货位,这些单据可能在商品货位变动前还没有结束。当商品的货位变动时,我想自动修改涉及到该商品的业务单据上的货位信息。

我现在能想到的是在货位调整的方法里面,不断调用修改业务单据的方法,但是如果后续再增加业务,还得修改该方法,很麻烦也很不安全。

我设想有没有什么办法,在新业务上去关联监控货位变化的事件,如果货位变化了,自动调用执行该新业务的某个方法。我看过观察者模式和订阅者模式,总感觉这些还是需要在第三方去做这个关联,总是感觉不方便。

可能是对事件理解不透彻,还望知道的大神们提供点思路或者方案,感谢啦。

HNLY的主页 HNLY | 初学一级 | 园豆:101
提问于:2018-03-07 09:09
< >
分享
所有回答(2)
0

这事情可以从两方面考虑

1、你的需求分析是否需要调整,如果货位是关联信息,是否有必要存储在订单明细表内?

2、假设需求分析无误的话。发布-订阅者模式很简单的,在修改货位的代码中发布货位调整事件。在所有需要响应的单据管理类中,订阅货位调整事件。

爱编程的大叔 | 园豆:30664 (高人七级) | 2018-03-07 09:19

目前的需求是这样子的,业务单据中必须存放商品的货位信息。

类似下面的链接,我怎样让Mouse类的某个方法 直接 订阅到 Cat类的CatCry事件, 而无需再到Program里实例化个Mouse与Cat 关联。
http://blog.csdn.net/loveyou388i/article/details/71211292

因为后面还有其他未知的业务需要用到货位信息,我想在新业务开发时,直接绑定到货位变更上,而无需再到Controller里面再次实例化后再绑定。

支持(0) 反对(0) HNLY | 园豆:101 (初学一级) | 2018-03-07 11:26

@HNLY: 人家那写的只是一个示例而已。

你去看看Prism里面的发布订阅吧。 

使用同一个 IEventRepository 就可以解耦 Cat 和Mouse了。

事件独立定义在一个 common类中。

支持(0) 反对(0) 爱编程的大叔 | 园豆:30664 (高人七级) | 2018-03-07 11:42

@爱编程的大叔: 不好意思,Prism 这个不太懂。你能方便提供个示例吗?

支持(0) 反对(0) HNLY | 园豆:101 (初学一级) | 2018-03-07 14:22
0

在变化的时候发出一条货位变更消息.

订阅这个消息并处理

吴瑞祥 | 园豆:28830 (高人七级) | 2018-03-07 10:34

(。・∀・)ノ゙嗨,我给 @爱编程的大叔  里进一步说明了需求,还请麻烦大神看下,帮我想想办法,谢谢啦。

支持(0) 反对(0) HNLY | 园豆:101 (初学一级) | 2018-03-07 11:30

@HNLY: 这种业务需求的解决流程是:定义一个业务事件(货位变更)-> 定义一个或多个事件处理(在货位变更进行业务1,在货位变更时进行业务2)->将这个事件处理订阅事件.

总的来说一般都要有一个单独的事件处理平台.单独的.

支持(0) 反对(0) 吴瑞祥 | 园豆:28830 (高人七级) | 2018-03-07 12:05
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册