这段时间一直参与公司项目,一期开发较为顺利,二期开发其实也还好,不过有个点一直卡的很难受
先说难受的地方吧!!!
我们公司项目存在vue2以及vue3两种项且部分项目存在一些公用的表单管理器,由于公司内部的表单管理器模块我不是很熟悉走了一些弯路
因为很多模块有很多所以不是所有模块都存在表单统一管理,很多都是开发者个人写的表单,所以统一放到表单管理器里面是不能覆盖全面的
我当时的做法是:写了一个公共组件兼容表单管理器以及其他表单,其他表单只需要引入该组件,即可完成。当时为了方便后续开发者维护,我特地专门写了一个mixins以便需要用到的模块引入mixin即可使用,且该组件内部的参数传递都是和mixin进行传递,而不让模块出现很多冗余代码,方便代码清晰明了。
但是问题就是这样做会有几个问题,该组件内部发送时间会有两个emit事件,一个用于表单管理器,一个用于其他表单,所以需要开发者根据不同模块来接受不同的emit事件,代码和项目中的其他组件有些违和(该组件特殊业务上不属于表单管理器)还有一个问题就是如果使用mixin那么会导致vue3项目有一些影响,因为vue3不推荐mixin,虽然可以使用,但不是最佳实践。
我接了两三个模块之后发现问题变得似乎复杂了,我询问了高级开发关于表单管理器的使用规范,发现了问题:我的问题就是把传递的值分的过于细化了,该组件只需要暴露需要传递的值即可,不同模块可以自己去根据参数做处理
通过他们的建议,我目前的解决思路如下:保留现在存在的mixin以便后续还有需要用到的地方,重新设计一下新组件,不要暴露一个emit事件和表单管理器对齐即可,如果其他组件使用了该组件依然可以使用该组件(我之前当时是这样设计来的,但是当时遇到了一个小问题,迫使发送两个事件导致设计不是很合理)
说一说为什么当时为什么觉得不合理吧!因为该组件不像其他组件传递了值就能很好的接收,而是还需要通过将值通过组件内部调用接口再回显值给到父组件,这时会出现watch侦听器一直触发,我当时本想在watch里面来判断这个接受的参数是否是组件返回的值,因为返回的值和进来的值是有区别的可以通过属性判断。
但是当时考虑组件这样就不是很纯粹了,索性在定义一个data值来用于接受详情数据,这样就不会出现watch侦听器一直触发的问题了,但是一旦这样设计将会和表单管理器相违背,现在重新设计的话,只需要把值传递给组件即可,组件内部根据参数做处理,这样就不会出现watch侦听器一直触发的问题了,而且也不会出现和表单管理器相违背的问题了,然后组件返回的值都是模块需要用到的值,模块进行一些拼装即可完成接口对接
哎~~心累这里面我前前后后改了好几次,感觉还是不够好,希望这次改造好后能有所改进吧😭😭😭
后天加班,先把其他模块功能对接完成,表单这块需要重新设计一下