Decorative image frame

阿杰

爱生活|爱编程|爱书法

基于位掩码权限设计

在权限设计中有一种非常独特、有意思方案叫 位掩码权限设计 ,它在应对一些局部数据权限(权限点不多)的场景下,非常的犀利,比如 PingCode 知识管理页面权限就结合 ACL 对特定人群(用户、用户组、部门)做权限分配,由于权限点只有两个,开发中体现不是非常突出,也没有把这个思维贯彻到底,不过在最近做的一个小项目(业余时间的玩具)中表现比较明显,这篇文章一直是处于未完成的状态 ,做完这个需求后,有触动把它好好写完,分享下。

阅读全文...

再谈单元测试

曾写过多篇测试相关的文章,都源于每次测试给我带来的触动,这次也不例外,最近在重构复杂逻辑时,再次感谢它为我保驾护航,同时也发现了历史测试中存在的一些问题。

测试的意义

这是一个认知问题,如果不清楚为何要写测试,那么最终产生的测试大概率是腐烂、或无意义的。

  1. 保证代码的正确性,提升代码质量是它最高的使命。
  2. 保证代码的安全性/稳定性,当对某段代码改动后,测试会告诉哪些代码受到了潜在的问题。
  3. 可以指导写代码的思路,在测试驱动开发(TDD)体现尤为明显。
  4. 更能透彻的理解代码,很多情况下,写代码时常常会陷入自己的世界,从测试相当于站在旁观者的角度审视代码,从而提升可读性和扩展性。

阅读全文...

编辑器系列-剪贴板

剪贴板概述

在编辑器中复制/剪切的方式有两种:

  • 系统剪贴板:快捷键触发 Ctrl/⌘ + C/X/V
  • 浏览器剪贴板:工具栏或拦截快捷键触发

两种方式的区别:数据储存的位置不同,前者的数据是储存在系统的剪贴板中,后者存在浏览器中。

两者都可以基本满足复制/剪切,但是往往在线编辑器常用浏览器剪贴板,为什么呢?

阅读全文...

编辑器系列—什么是插件

插件(Plugin)是指一种可以增强或扩展已有软件功能的组件或模块。它们通常是以独立的方式编写,可以被动态地添加到主应用程序中,从而提供额外的功能和特性。 —— ChatGPT

个人理解:插件是一个相对的名词,它必须有一个主体容器/应用,其他独立的组件以插入的形式扩展主体容器/应用。

在 Slate 中,插件是一等公民,连编辑器都是以插件的形式创建的,其中编辑器对象扮演着主体容器/应用的角色,提供核心功能,每个插件可以基于 Editor 提供的核心能力去拦截改写或扩展自己的功能/逻辑。

阅读全文...