基于位掩码权限设计
在权限设计中有一种非常独特、有意思方案叫 位掩码权限设计 ,它在应对一些局部数据权限(权限点不多)的场景下,非常的犀利,比如 PingCode 知识管理页面权限就结合 ACL 对特定人群(用户、用户组、部门)做权限分配,由于权限点只有两个,开发中体现不是非常突出,也没有把这个思维贯彻到底,不过在最近做的一个小项目(业余时间的玩具)中表现比较明显,这篇文章一直是处于未完成的状态 ,做完这个需求后,有触动把它好好写完,分享下。
再谈单元测试
曾写过多篇测试相关的文章,都源于每次测试给我带来的触动,这次也不例外,最近在重构复杂逻辑时,再次感谢它为我保驾护航,同时也发现了历史测试中存在的一些问题。
测试的意义
这是一个认知问题,如果不清楚为何要写测试,那么最终产生的测试大概率是腐烂、或无意义的。
- 保证代码的正确性,提升代码质量是它最高的使命。
- 保证代码的安全性/稳定性,当对某段代码改动后,测试会告诉哪些代码受到了潜在的问题。
- 可以指导写代码的思路,在测试驱动开发(TDD)体现尤为明显。
- 更能透彻的理解代码,很多情况下,写代码时常常会陷入自己的世界,从测试相当于站在旁观者的角度审视代码,从而提升可读性和扩展性。
编辑器系列—如何获取光标/元素位置
Slate Selection
slate 的 selection 是用来表示一个元素或节点的位置,结构如下:
它是基于原生 DOM Selection API 封装的,一些基础概念:
编辑器系列—什么是插件
插件(Plugin)是指一种可以增强或扩展已有软件功能的组件或模块。它们通常是以独立的方式编写,可以被动态地添加到主应用程序中,从而提供额外的功能和特性。 —— ChatGPT
个人理解:插件是一个相对的名词,它必须有一个主体容器/应用,其他独立的组件以插入的形式扩展主体容器/应用。
在 Slate 中,插件是一等公民,连编辑器都是以插件的形式创建的,其中编辑器对象扮演着主体容器/应用的角色,提供核心功能,每个插件可以基于 Editor 提供的核心能力去拦截改写或扩展自己的功能/逻辑。