服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - 编程技术 - 前端架构设计中如何做好技术决策?

前端架构设计中如何做好技术决策?

2022-04-11 23:14code秘密花园宝玉xp 编程技术

今天做了一个关于如何做架构设计的分享,其中有个很重要的问题就是如何更好的做技术决策,我针对我们前端团队整理了5条做技术决策的原则。

今天做了一个关于如何做架构设计的分享,其中有个很重要的问题就是如何更好的做技术决策,我针对我们前端团队整理了5条做技术决策的原则。

原则1: 遵守公认的好的设计原则,比如说:

  • DRY - Don't repeat yourself (不要重复自己)
  • KISS - Keep it Simple, Silly (让设计尽可能的简单)
  • YAGNI - You aren't gonna need it (只做刚刚好的设计,不要过度设计)
  • … 其他

原则2: 找出最本源的需求,而不应该局限于当前的技术实现和资源

很多时候我们很容易被表面需求所误导,类似于乔布斯的名言:“如果亨利福特在发明汽车之前去做市场调查,他得到的答案一定是大家想要一辆更快的马车。”,如果我们在做设计和技术决策的时候,没有找出用户的真实需求,很容易就会在错误的方向上狂奔,做很多无用功!

要找出本源的需求,还是需要多问为什么,多和干系人沟通,少考虑技术细节,少被现有的技术所误导或局限。

案例:设计部门希望设计系统支持Angular

我们设计部门最近希望我们的设计系统提供 Angular 版本,因为当前只支持 React 版本。从这个需求来看,表面是是要我们开发 Angular 版本,其实如果仔细追问他们到底为什么需要 Angular 版本,是因为有一个团队还在用 Angular ,他们希望这个团队能用我们的设计系统,但是人家表示用不了。其实本源的需求是希望有更多的团队用设计系统,而不是要支持 Angualr

那要满足这个团队的这个需求,是不是非要做一个 Angular 版本不可呢?当然不需要,如果我能提供一个类似于 BootStrap HTML CSS 版本,其实他们一样能用起来,而这么做成本不高,并且别的团队也可以用。

前端架构设计中如何做好技术决策?

原则3: 聚焦于 “收益”、“成本”和“风险”三者之间的平衡,而不是技术本身

每一次技术决策,其实本质上就是一次取舍( Trade-Offs

前端架构设计中如何做好技术决策?

每一次取舍( Trade-Offs ),本质上就是在“收益”、“成本”和“风险”三者之间的平衡

既然每一个决策都涉及到收益成本风险,那么就不能只看收益而无视成本和风险。就像前一个案例中提到的,设计部门考虑的是 Angular 版本带来的收益,但是他们却忽略了打造一套 Angular 版本的设计系统所需要的成本,以及可能带来的巨大风险。

所以在做技术决策的时候,理性的考虑一下 决策背后的收益、成本和风险的关系是很必要的,而不是仅靠喜好或者直觉来做决策。

原则4: 选择某个技术背后的生态系统而不是某个技术

这条原则特别适用于前端领域,在前端,各种新技术、框架、工具层出不穷,如果总是追新,或者被某个软文吸引轻易选择了某个技术,最终会带来巨大的成本。

案例:为什么我们从Preact迁移到React

在早些年的时候,我们前端选择了 Preact 作为UI渲染技术,这有早年 React License 的原因,也有 Preact 更小性能更好的原因。

然而这些年在使用过程中,还是有很多不足的地方,核心原因都是生态不够好。

比如说 Preact 调试很麻烦,因为它不像 React 有一个强大的 DevTools ;比如说我们遇到过 Preact 在服务端渲染的内存泄漏问题,如果像我们这样大规模访问量的用户多一点,可能早就有人踩过坑了,不需要我们去花很长时间定位并最终去解决这个问题;比如最近我们在集成 Nextjs Nextjs 是完全为 React 设计的,对 Preact 兼容性并不好。

这样的案例还很多,所以选择技术,它背后的生态和社区活跃度很重要。

前端架构设计中如何做好技术决策?

原则5: 不仅要考虑如何构建,还要考虑如何维护

这是一个常见的问题,很多人只管搭建新项目的时候爽,而不管后续维护是不是困难,用了一堆自己喜欢的新技术,最后难以维护。下一个人接手了,搞不好会推翻重写一遍,这样的循环一次又一次。

前端架构设计中如何做好技术决策?

这样的错误我也常犯,比如2年前 React Hooks 刚出的时候,我就迫不及待用它来替代 Redux ,结果上线后发现不好维护,有 Bug 也不好定位,不像以前 Redux ,数据流特别清晰,借助工具非常好重现和定位问题,最终上线没多久就改回去了。

所以现在在做技术决策的时候,我们很注意的一个问题就是将来维护的时候是不是很麻烦。

包括我在代码审查的时候,有时候看到一些功能能运行的很好 PR,但是代码写的比较难懂的,或者没有遵守最佳实践的,只要是给未来的维护造成麻烦的,我都会毫不犹豫要求重写,避免增加未来的维护成本。

最后

上面就是我们现在实践的五个技术决策原则:

  • 原则 1: 遵守公认的好的设计原则
  • 原则 2: 找出最本源的需求,而不应该局限于当前的技术实现和资源
  • 原则 3: 聚焦于 “收益”、“成本”和“风险”三者之间的平衡,而不是技术本身
  • 原则 4: 选择某个技术背后的生态系统而不是某个技术
  • 原则 5: 不仅要考虑如何构建,还要考虑如何维护

这些原则绝大部分时候都可以很好的帮助我们做出正确的决策,避免踩坑。但我也会一直在反思曾经做过的决策,对于做出的不太好的决策,会反过来考虑是否要修订这些原则,最终通过不断完善决策原则,帮助我和团队更好的做出技术决策。

原文地址:https://mp.weixin.qq.com/s?__biz=Mzk0MDMwMzQyOA==&mid=2247493736&idx=1&sn=8938e324185d6e66bf128d3d1c39381b

延伸 · 阅读

精彩推荐
  • 编程技术AIOps,SRE工程师手中的利器

    AIOps,SRE工程师手中的利器

    AIOps开始成为一种极为重要的站点可靠性工程工具。它能够高效吸纳观察数据、参与数据以及来自第三方工具的数据,判断系统运行状态并保证其处于最佳...

    至顶网5972021-03-08
  • 编程技术简单、好懂的Svelte实现原理

    简单、好懂的Svelte实现原理

    本文会围绕一张流程图和两个Demo讲解,正确的食用方式是用电脑打开本文,跟着流程图、Demo一边看、一边敲、一边学...

    魔术师卡颂4822021-11-10
  • 编程技术真正聪明的程序员,总有办法不加班

    真正聪明的程序员,总有办法不加班

    工作效率提升了,就可以少加班了,聪明的程序员,总会有一堆可以提升编码效率的工具?当一种工具满足不了工作需求,就去探索新的,今天纬小创就给...

    今日头条12482021-03-04
  • 编程技术2021年值得关注的React PDF 库

    2021年值得关注的React PDF 库

    今天,许多网络应用程序为其用户提供内置的PDF浏览选项。然而,选择一个并不容易,因为它们的功能远远超过显示PDF。在这篇文章中,我将评估5个React的...

    TianTianUp5232021-06-21
  • 编程技术从Context源码实现谈React性能优化

    从Context源码实现谈React性能优化

    这篇文章主要介绍Context的实现原理,源码层面掌握React组件的render时机,从而写出高性能的React组件,源码层面了解shouldComponentUpdate、React.memo、PureComponen...

    魔术师卡颂5312020-12-20
  • 编程技术让开发效率倍增的 VS Code 插件

    让开发效率倍增的 VS Code 插件

    今天来分享一些提升开发效率的实用 VS Code 插件!Better Comments 扩展可以帮助我们在代码中创建更人性化的注释,有不同形式和颜色的注释供我们选择。 ...

    前端充电宝7132022-04-21
  • 编程技术Delphi - Indy idMessage和idSMTP实现邮件的发送

    Delphi - Indy idMessage和idSMTP实现邮件的发送

    这篇文章主要介绍了Delphi - Indy idMessage和idSMTP实现邮件的发送,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下...

    JJ_JeremyWu6592020-09-22
  • 编程技术用户态 Tcpdump 如何实现抓到内核网络包的?

    用户态 Tcpdump 如何实现抓到内核网络包的?

    在网络包的发送和接收过程中,绝大部分的工作都是在内核态完成的。那么问题来了,我们常用的运行在用户态的程序 tcpdump 是那如何实现抓到内核态的包...

    开发内功修炼11612021-09-08