如何用最少的代码做最多的事情,如何只专注逻辑本身
- 设计,交互风格随着人员变化而变化,伴随而来的是琐碎,重复地返工过程,每一次的返工, 都导致代码生命的尽头。 然而更随潮流,变更是无法抗拒的过程,那么怎样才能快速,最小化地满足变更?
- ToB的产品形态,在固定的领域内也是相对固定的,那么不变的是什么,变化的是什么?
如何利用这份相对做到更快地交付?(定制化的考虑?配置化?)
领域驱动设计的思考
定制构想 - 在业务支撑过程偿还了大量最早的欠考虑的债,
这样就需要考虑,同一个功能,不同平台,业务的数据流存在相同的时候,这层如何复用。
能否用一份代码打包出不同平台。(PC,移动,PWA,各种小程序,electron) --- uniapp - 开发完成后没有一套共同认知的测试方案,对自身代码如果在开发周期内没有做到极尽测试 后面的修改的成本将随时间成倍增长。对前端的自测,到底要测哪些内容,用什么方式测,以及如何回归?
- 维护的困难:底层工具库不统一,编程范式不统一,没有任何描述,耦合严重,没有为未来预留......
这些让我对代码充满了恐惧,也许更改了一行代码,就会破坏一些根本不相关的东西,导致我下意识地采取更多的防御式编程,并对大的更改非常抵抗,如果没有绝对必要,不要碰任何相关的代码。 - 开发协作,人事变动,项目交接没有明确的基础需知,不同的经历或者习惯,必然造就一些不必要的问题。
- 无效总结:我犯过的错误只是我的积累,换个人重复地犯着一样的错误,如何让积累成为共同?
不加思索地重写,最后只是会换另一个重写的理由,从中并不能获得‘可改进持续’的目的。
不加思索地拒绝重构,最后只是会在迭代的过程中一直偿还技术债,直至偿还不动宣告破产。
如何找到那个平衡点?
- 持续性
1.1)每一次废弃,应该是以修改过去的代码为主观,而不是完全抛弃。 我们更容易从错误的代码中学习,而不是从成功的经验中学习。
- 可维护性
2.1)我为什么想使用Typescript?
- 使用类型和接口等概念来描述正在使用的数据,是极好的文档
- 让javascript的面向对象的特性更加明显
- 减少运行时错误
2.2)我为什么不想使用Typescript?
- javascript 的开发者社区更巨大,更方便找到成熟的项目和可用资源
- OOP开发经验很薄弱的时候,无法真正地利大于弊
- 无法说服自己面对存在仅需要修改语法的工作
2.3) 见Typescript的运用
-
系统级:微前端(每个模块都能成为独立的项目?lerna 包管理,可独立依赖,可独立打包),
监测fundebug(对方:浏览器,地理位置,带宽,自身:报错,性能 :慢怎么个慢法,多种因素如何定位) , 日志 -
应用级:组件库 (改轮子进而贴近实际)
改轮子进而贴近实际,设计最多变化的为圆角,行高,颜色,字号。 组件库引用的方式不再使用npm,而是直接打包完独立到项目中
一次变更对应着一个批量修改的脚本
- 模块级:组件化,模块化
3.1)如何设计合理的方式管理CSS,复用,隔离变化,通用变量
3.2)组件封闭原则和粒度
- 代码级:规范(示例包含简单功能流程,可快速依葫芦画瓢),原则,质量
4.1)开发流程:代码合并方式->代码提交信息(git hooks 检查)->代码规范自动化(Prettier + husky + airbnb + lint-staged)->测试驱动开发
4.2) 测试驱动开发基本步骤(交叉)1.编写一个不通过的测试
2.运行这个测试,并保证它不能通过
3.编写应用代码,让测试通过
4.运行这个测试,保证它能通过
5.运行所有其他测试,保证程序的其他部分没有被破坏
6.重复以上步骤
4.3)质量正常没有一个重要的标准。质量代码是一种能够正常工作并易于扩展的代码。
EVAN的质量代码的原则:
- 提取函数和模块以简化接口。
- 通过测试验证代码行为。
- 尽量避免非纯函数。
- 良好的变量和函数命名。
- 单一职责原则:仅存在一个需要被改变的理由 ,避免修改了一个功能导致其他的功能发生故障。
不要做万能组件或类的封装,当一个组件或者一个类知道了太多或者做了太多事情的时候,就要考虑重新找寻更好的拆分设计。 - 开闭原则:允许新增代码来修改系统行为,而非只能靠修改原来的代码
具体见代码实践
- 从短期来看,如果能够快速地提供功能驱动业务增长,不论其设计多么丑陋,代码质量多么差,只要 不影响性能,未来就有改进空间。
- 在业务进度不合理的情况下,只能在丑陋的,旧的代码上不断堆砌功能。
- 如果发展到影响业务了,就愉快地选择重写,走向更好的设计,架构。
- 编写vscode i18n 插件
- 编写自动化测试范例
- 编写node命令行工具
- 编写组件库整改方式
- 编写生成代码组织结构图
- 编写node自动化gulp,phantomJS
- 编写内嵌本地化
- web性能调优跟踪
- 业务价值的挖掘?用户的分析
- 静态资源包平台
- 监控平台