A表信息被多张表B、C、D引用,现在A表信息发生改动,需要对引用数据进行同步。可能随着业务的增加还会有新表继续引用,在这样的情况下怎么才能优雅的实现代码满足开闭原则。不考虑直接使用外键进行管理,业务需要适当的冗余要求。
可以考虑监听者模式,在A里面维护一个List 里面存放需要监听的bean,这些需要监听的bean 可以考虑继承同一个类或者接口,自动注入
把A表中的数据复制出来。进行冗余管理。
这是取舍问题,在维护成本和查询成本之间做抉择
像你说的应该是选择了冗余过多的字段方便使用导致维护起来很麻烦,关于维护的方式如果你们需要实时同步的话事物更新或者能接受延时和错误也可以采用消息进行各自单独延时更新,如果选择后者的话需要一个定时矫正所有数据的兜底任务(具体间隔的话看你们的业务容忍时间),因为其并不能保证绝对正确
个人的话其实还是推荐不冗余过多变动频繁的字段,因为相较于查询成本可以通过缓存等其他方式解决且不是太过复杂,前一种维护的成本真的随着冗余信息而指数型上升
如果以上回答对你有所帮助的话望采纳
可以用mq,消息队列,A表的数据逻辑发生变更的时候,发送消息通知,其他的表去监听,那么后续不管有多少新增的表,去监听这个变更就好了!
在不改变现有设计的模式下,可以考虑异步数据同步的方式或者是定时同步的机制,比如晚上几点,在不影响业务的情况下即可,没啥纠结的,如果A表是你自己的,然后又有时间让你来做这个优化的事情,那么,我觉得直接写数据时同步到其他几张表即可。
建议用消息做个异步处理就好了