今天工作中遇到一个问题,在支付成功回调时支付系统中校验金额报错,需要在校验金额时给定一个参数,做一下转换,核心逻辑一共只有几行,但是修改了半个多小时,主要时间花费在以下几点。
首先是参数模型需要定义多套,系统的框架采用的是插件方式,如果涉及到比较定制的逻辑需要在各自的插件中完成,需要制定一个扩展点(接口中新增一个方法),定制扩展点的入参与返回值,这些定义都放在一个公共二方库中,而系统的核心模块中(领域模型)不依赖外部接口,因此需要进行依赖倒置,对于二方库中定义好的模型需要在核心模块中重新实现一遍,而两套模型的字段一摸一样,如果后续需要修改模型,同样两个地方都需要修改一遍。DIP是一个典型的场景,DIP系统中内部模型不依赖外部模型,因此即使使用了外部模型,也会重新定义一套非常相似或者完全一样的模型,目的是为了自洽,屏蔽外部变化,但是在后面的变化中,往往两套模型都是同步修改。除了DIP之外分层也会导致这个问题,之前同一个系统分了多个模块,每个模块都有自己的对外模型(接口,入参,返回值),结果就是同一个模型在不同层之间传递时层层复制,修改一个字段往往修改很多地方,对象的转换更是眼花缭乱。
调用的不断传递,一个接口获取的数据,通过了多个接口的层层转发,每个接口中都需要定义一套相似的方法,而接口中逻辑只是简单的传递与转换。
难以找到类的位置,当新增一个模型时,不是很方便就很定位到应该放到何处,同一个接口中不同方法的返回值被放到了不同的模块中,被放置不同模块的类之前差异并不明显,导致需要徘徊类该放置到何处。
除了修改花费时间之外,由于依赖的二方库较多(功能不一),导致打包部署也很繁琐,让人望而生畏。
网友评论