|
| 1 | +--- |
| 2 | +title: 宣言 |
| 3 | +description: 管理 ObjectStack 生态系统的不可动摇的核心原则。后 SaaS 时代的宪法。 |
| 4 | +--- |
| 5 | + |
| 6 | +import { ScrollText, Scale, Database, Code2 } from 'lucide-react'; |
| 7 | + |
| 8 | +ObjectStack 的存在是为了将企业应用程序开发回归其本质:**数据**。 |
| 9 | + |
| 10 | +为了维护一个健康、解耦和经得起未来考验的生态系统,我们承诺坚守以下不可动摇的核心原则。这些不是建议;它们是使我们获得自由的约束。 |
| 11 | + |
| 12 | +<Cards> |
| 13 | + <Card |
| 14 | + icon={<Scale />} |
| 15 | + title="I. 协议中立性" |
| 16 | + description="协议即法律。实现仅仅是一种意见。" |
| 17 | + /> |
| 18 | + <Card |
| 19 | + icon={<Code2 />} |
| 20 | + title="II. 机制优于策略" |
| 21 | + description="提供构建规则的工具,而不是硬编码规则本身。" |
| 22 | + /> |
| 23 | + <Card |
| 24 | + icon={<Database />} |
| 25 | + title="III. 数据主权" |
| 26 | + description="数据属于用户,而不是 SaaS 提供商。" |
| 27 | + /> |
| 28 | +</Cards> |
| 29 | + |
| 30 | +--- |
| 31 | + |
| 32 | +## 原则 I:协议中立性 |
| 33 | + |
| 34 | +**"协议是中立的。引擎是可替换的。"** |
| 35 | + |
| 36 | +ObjectQL 不得包含任何特定于特定语言(例如 Node.js)、数据库(例如 PostgreSQL)或运行时(例如浏览器)的逻辑。 |
| 37 | + |
| 38 | +### 法则 |
| 39 | +* **先规范后引擎:** 在规范层(`packages/spec`)编写任何功能之前,必须首先在规范层定义该功能。我们拒绝"先实现,后标准化"的方法。 |
| 40 | +* **零泄漏:** 实现细节(如 React Hooks 使用或 SQL 特定语法)绝不能泄漏到协议定义中。 |
| 41 | + |
| 42 | +### 好处 |
| 43 | +这确保了今天定义的 ObjectStack 应用程序理论上可以在以下环境中运行: |
| 44 | +* 带 PostgreSQL 的 Node.js 服务器(今天的标准) |
| 45 | +* 带 SQLite 的 Python 服务器(AI/数据科学) |
| 46 | +* 浏览器中的 Rust WASM 模块(本地优先) |
| 47 | + |
| 48 | +--- |
| 49 | + |
| 50 | +## 原则 II:机制优于策略 |
| 51 | + |
| 52 | +**"给他们物理学,而不是模拟。"** |
| 53 | + |
| 54 | +ObjectStack 提供**机制**("如何"): |
| 55 | +* *"这是你如何定义验证规则。"* |
| 56 | +* *"这是你如何定义权限范围。"* |
| 57 | + |
| 58 | +ObjectStack 从不规定**策略**("什么"): |
| 59 | +* *它从不说"密码必须是 8 个字符"。* |
| 60 | +* *它从不说"用户必须属于一个部门"。* |
| 61 | + |
| 62 | +### 关注点分离 |
| 63 | +我们清晰地将**定义**与**执行**分离。 |
| 64 | + |
| 65 | +| 层 | 职责 | 示例 | |
| 66 | +| :--- | :--- | :--- | |
| 67 | +| **协议(机制)** | 定义能力。 | `allowRead: string`(公式的插槽) | |
| 68 | +| **应用(策略)** | 定义业务逻辑。 | `allowRead: "$user.role == 'admin'"` | |
| 69 | +| **引擎(执行)** | 执行逻辑。 | 将公式编译为 SQL `WHERE` 子句。 | |
| 70 | + |
| 71 | +--- |
| 72 | + |
| 73 | +## 原则 III:单一数据源 |
| 74 | + |
| 75 | +**"没有'代码'。只有 Schema。"** |
| 76 | + |
| 77 | +在传统应用程序中,"真相"是分散的: |
| 78 | +1. 数据库 Schema(`table.sql`) |
| 79 | +2. 后端模型(`User.ts`) |
| 80 | +3. 前端验证(`schema.zod.ts`) |
| 81 | +4. API 文档(`swagger.json`) |
| 82 | + |
| 83 | +在 ObjectStack 中,**对象协议是唯一的真相。** |
| 84 | +* 数据库是协议的*衍生物*。 |
| 85 | +* UI 是协议的*投影*。 |
| 86 | +* API 是协议的*结果*。 |
| 87 | + |
| 88 | +如果你改变了协议,整个系统(DB、API、UI)必须自动适应。 |
| 89 | + |
| 90 | +--- |
| 91 | + |
| 92 | +## 原则 IV:默认本地优先 |
| 93 | + |
| 94 | +**"云是同步对等方,而不是主控方。"** |
| 95 | + |
| 96 | +我们拒绝软件在互联网连接中断时必须停止工作的观念。 |
| 97 | +* **延迟是敌人:** 所有交互都应该是乐观的和即时的(0ms)。 |
| 98 | +* **所有权是目标:** 用户的数据实质上存储在他们的设备上。服务器只是备份和协作的中心。 |
| 99 | + |
| 100 | +--- |
| 101 | + |
| 102 | +> "我们塑造我们的工具,此后我们的工具塑造我们。" — 马歇尔·麦克卢汉 |
0 commit comments