为啥我觉得都没答到点子上…注册表作为一个数据库,数据库的常见优势都是有的,但这并不能说明注册表设计是成功的——因为它有很显著的缺点。
首先是数据类型设计失败。注册表最大的问题就是“只有软件本身才知道这些项怎么改”,而这和注册表极其失败的数据类型设计是分不开的。
在人类的逻辑里,设置项首先要支持的是enum,因为enum可以清晰的看到有哪些可选项,枚举的名字也可以表达它的含义,但是注册表不支持enum,大家都是要么用字符串要么用数字代替的,前者让用户不知道有什么可选,后者让用户不知道选项是什么意思。
除了没有enum,注册表也不支持布尔型、路径和日期,甚至不支持单独的guid类型,大家同样只能hack,最终造成注册表里遍地都是不明所以的配置项,出了问题改注册表像是某种魔法操作一样。
另一个重大的失误是缺少应用级的注册表数据隔离。这个仿佛脑子进水一般的决定充满着geek对应用程序会乖乖遵守节操的幻想。而其结果,就是无论怎样都卸载不完整的应用程序和如同散沙一般的配置项存储位置了。
在已经犯下这么多严重设计失误的情况下,注册表还有另一败笔——层级设计极度失败。CurrentVersion是什么?正常的正确的搞个revision管理很难吗?HKCR里那一堆又是什么?扩展名和文件类型名分开成两个目录很难吗?Software里到底应该放厂名还是软件名?Windows是Software还是System?WindowsNT这么多年了还和Windows分开?
以上,虽然这些都完全不能改了,但依然忍不住想吐槽。
注册表就是个除了数据库的优势以外全是屎的屎山。