文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

有时候,技术问题的最优解并不是从技术考虑

2024-11-30 03:08

关注

大家好,我卡颂。

最近我们技术群发生个事儿,我觉得还挺有代表性的。有时候,技术问题的最优解并不是从技术考虑。

对于工作时间不长的程序员,这篇文章可能对你有帮助。

事情起因

事情起因是一位同学在群里问:“怎么获取react element对应dom中的文本?”

为什么想获取文本内容呢,原来他是想做「交互的打点上报功能」

他希望这个打点上报功能是完全自动化、业务无感知的。但这里存在一个悖论:如果打点上报是“业务无感知的”,那打点功能肯定要和业务解耦。既然和业务解耦,就无法记录“业务的完整操作链路”。

那么类似“用户点击了一个按钮,我想知道这个按钮是否在对话框中,如果在,取出对话框的上报”就无法实现。

想一想,如果是你,会怎么实现这个功能呢?

功能实现

这位同学的做法是 —— 梳理现有业务逻辑中的组件层级,从特定的层级里拿数据。

比如Modal组件的渲染成HTML是:

那么他会按div -> h1这样的层级结构取数据。具体实现还涉及很多hack的方法。

比如,组件没有挂载时如何获取数据?他通过把组件挂载在一个离屏DOM上,再分析他:

function analyzeCpn(node: ReactNode) {
  const div = document.createElement('div');
  const root = reactDOM.createRoot(div);
  flushSync(() => root.render(node));
  // ...分析 div.innerHTML
}

再比如,如何根据DOM不同,增加一些特殊的属性呢?可以覆写jsx、React.createElement方法。

问题

这么实现,当前项目确实没问题。但有个很现实的问题:随着业务不断迭代,如果哪天组件结构变了,按以往结构获取数据就会失败,难道我还得跟着业务一起改打点上报代码么?

一个打点上报功能硬生生开发成了爬虫功能。

但是,这位同学并不觉得这有问题。从他的回答看,他的思想是 —— 技术问题就应该交给技术解决。

实际上有时候,技术问题的最优解并不是从技术考虑。就像遇到产品的不合理需求,我们首先思考的,不应该是“如何实现他”,而是“从哪个角度把需求怼回去”。

就本文的例子来说,一种合理的解决方式是:

总结

作为搞通用服务的同学,要接近业务,又不能让自己陷入业务。

回到本文的例子,如果你替业务同学实现了业务逻辑打点上报还不知会他们。未来业务需求变化导致代码变化后,打点上报有误,这是谁的锅呢?

业务同学会说:我根本不知道打点这回事儿啊。

到时候你就欲哭无泪了。

所以,明确自己的工作职责,做好向上管理,不是所有技术问题都得靠技术解决。

来源:魔术师卡颂内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯