Java设计模式
今天一直在思考一个让我疑惑的问题,在用 SpringBoot 进行项目开发的时候,有这样一个场景,比如说家具和物料是两个不同的模块,有一个调用的是我们小米数字门店通用的接口,代码的实现逻辑都是一致的,我想用什么方式可以把它抽象成一个公共的方法,这样相同的代码不用的 provider 间 copy 出两份。
我最开始的思路是把方法提成一个定义在 assets-app 目录下的公共方法,然后在几个对外提供服务的接口里面调用这个抽象出的方法,最终返回三个参数值就可以了。但是这样在家具和模块中都要弄一份一模一样的方法,怎么解决这个问题呢?
想到了现在做数字门店对接的时候,先在 pom 中进行声明,把它导到当前 assets-app 目录里面,在代码顶部通过@Reference 描述来指定引入的是哪个外部类,其中的哪个方法。我可不可以用用这个思路呢?我也在 pom 文件中把比如家具的模块声明好,然后用@Reference 关键字把它声明到物料中,这样家具中定义好的方法就可以得到复用了,这种方式可行吗?
最后,这个问题是被我如何解决的呢?
又详细翻看了一下之前调用数字门店 pom 文件中的配置,跟上面描述的一致,确实已经声明了对于外部依赖包的导入。看我截图的部分,分别包含了当前项目结构 app 目录下不同 provider 之间方法的调用以及导包完成解决依赖以后,跨项目间方法的调用。这个思路清晰以后,我也迅速把项目里冗余的大段大段代码优化掉了,因为完全相同的代码在整个项目中用到就 copy 一份,导致代码臃肿、结构混乱,这样一优化清爽多了。最主要是你可以随时在需求的地方,把相应的 provider 引入进来,实现公共方法的调用,再也不需要每个 provider 自己写一遍内部逻辑完全一模一样的方法了。
沿着问题继续做一下研究,我如果想对外提供接口服务,有没有更简单,不遵循 api,app,domain,infrustrucate,server 五个分层,只通过定义接口及实现接口,就能对外提供接口服务的方式?feign 能达到这个效果吗?比较担心的点是如果业务不涉及到数据库还好,但是一旦涉及到数据库,已知的系统,比如说的这个五层 domain 和 infrustrucate 基本都是在与数据库打交道,如果我也想与数据库有交互,是不是必须还得用这种方式?