|
| 1 | +--- |
| 2 | +title: 核心价值 |
| 3 | +description: 深入了解 ObjectStack 的三大支柱:协议驱动架构、本地优先数据主权和数据库无关性。 |
| 4 | +--- |
| 5 | + |
| 6 | +import { Database, Link, Laptop } from 'lucide-react'; |
| 7 | + |
| 8 | +ObjectStack 建立在三个不可协商的架构价值之上。这些不仅仅是"功能";它们是指导我们做出的每一个设计决策的约束。 |
| 9 | + |
| 10 | +## 1. 协议驱动:意图优于实现 |
| 11 | + |
| 12 | +ObjectStack 的基本论点是**应用程序逻辑应该由声明性数据定义,而不是命令式代码。** |
| 13 | + |
| 14 | +### "代码优先"的问题 |
| 15 | +在现代开发中,"意图"(例如,*"此字段是必填的电子邮件地址"*)通常分散在三层: |
| 16 | +1. **数据库:** SQL 约束(`NOT NULL`)。 |
| 17 | +2. **后端:** ORM 验证(例如,TypeORM 装饰器)。 |
| 18 | +3. **前端:** UI 验证(例如,React Hook Form + Zod)。 |
| 19 | + |
| 20 | +当业务需求发生变化时,你必须在三个地方更新代码。这就是**实现耦合**。 |
| 21 | + |
| 22 | +### 协议驱动的解决方案 |
| 23 | +ObjectStack 将"意图"集中到单个协议定义(JSON/YAML)中。实现层(React、Node.js、SQL)仅充当解释此协议的**运行时引擎**。 |
| 24 | + |
| 25 | +<Callout type="info"> |
| 26 | +UI 是投影。API 是结果。 |
| 27 | +</Callout> |
| 28 | + |
| 29 | +* **UI 是投影:** ObjectUI 不"构建"表单;它*投影* ObjectQL schema 到视觉表示。 |
| 30 | +* **API 是结果:** 你不编写端点;ObjectOS *生成*基于访问控制协议的安全图。 |
| 31 | + |
| 32 | +> **类比:** 将 ObjectStack 想象成一个 Web 浏览器。你向它发送 HTML(协议),它渲染一个页面。你不必每次想要更改网站上的文本时都重写浏览器引擎(C++)。 |
| 33 | +
|
| 34 | +## 2. 本地优先:所有权和零延迟 |
| 35 | + |
| 36 | +在过去的十年中,"云原生"一直是黄金标准。虽然它解决了部署问题,但它引入了一个新问题:**用户租用他们对数据的访问。** |
| 37 | + |
| 38 | +如果服务器很慢,应用程序就很慢。如果互联网断开,应用程序就死了。 |
| 39 | + |
| 40 | +### "七跳"问题 |
| 41 | +在传统的云应用程序中,一个简单的按钮点击会经过: |
| 42 | +`点击 -> Wi-Fi -> ISP -> 云负载均衡器 -> Web 服务器 -> 数据库 -> 查询执行` ……然后一路返回。 |
| 43 | + |
| 44 | +### 本地优先解决方案 |
| 45 | +ObjectStack 应用程序设计为首先读写**本地数据库**(嵌入在客户端环境中)。 |
| 46 | +`点击 -> 本地 DB -> UI 更新`(0ms 延迟)。 |
| 47 | + |
| 48 | +与云的同步在后台异步发生。 |
| 49 | + |
| 50 | +1. **即时响应:** UI 立即反应(乐观 UI),使企业应用程序感觉像原生桌面软件一样快速。 |
| 51 | +2. **离线能力:** 现场工作人员、飞机或不稳定的连接不再是障碍。 |
| 52 | +3. **数据主权:** 数据实际存储在用户的设备上。云充当同步中心,而不是唯一的看门人。 |
| 53 | + |
| 54 | +## 3. 数据库无关性:通用编译器 |
| 55 | + |
| 56 | +行业分为 SQL(Postgres、MySQL)和 NoSQL(MongoDB、Redis)阵营。开发人员经常将自己锁定在一个供应商的方言中。 |
| 57 | + |
| 58 | +ObjectStack 引入 **ObjectQL**,这是一种统一的查询语言,可以编译到任何后端。 |
| 59 | + |
| 60 | +* **供应商锁定自由:** 从 SQLite 开始进行原型设计,迁移到 PostgreSQL 用于生产,并存档到 Snowflake 用于分析——无需重写一行业务逻辑。 |
| 61 | +* **一流的驱动程序:** 我们不实现数据库;我们实现*驱动程序*,将数据库视为愚蠢的存储引擎。我们在应用层(内核)处理复杂的逻辑(RBAC、验证)。 |
| 62 | + |
| 63 | +### 编译器方法 |
| 64 | +与运行时包装器(如 ORM)不同,ObjectQL 作为**编译器**运行。 |
| 65 | +1. **输入:** ObjectQL 抽象语法树(AST)。 |
| 66 | +2. **处理:** 将 AST 编译为特定方言的 SQL。 |
| 67 | +3. **输出:** 针对目标的高度优化查询。 |
| 68 | + |
| 69 | +这种架构允许激进的灵活性: |
| 70 | +* **开发:** 在 **SQLite** 上运行(零设置,单个文件)。 |
| 71 | +* **生产:** 在 **PostgreSQL** 上运行(稳健,可扩展)。 |
| 72 | +* **边缘:** 在 **Cloudflare D1** 上运行(分布式)。 |
| 73 | +* **遗留:** 连接到现有的 **Oracle/SQL Server**(集成)。 |
| 74 | + |
| 75 | +你更改*驱动程序*,而不是*代码*。 |
| 76 | + |
| 77 | +## 总结 |
| 78 | + |
| 79 | +| 价值 | 旧方式 | ObjectStack 方式 | |
| 80 | +| :--- | :--- | :--- | |
| 81 | +| **架构** | 代码驱动(命令式) | 协议驱动(声明式) | |
| 82 | +| **逻辑位置** | 分散(DB + API + UI) | 集中(JSON/YAML Schema) | |
| 83 | +| **数据访问** | 依赖云(仅在线) | 本地优先(离线 + 同步) | |
| 84 | +| **存储** | 锁定到供应商 | 数据库无关 | |
| 85 | + |
| 86 | +通过坚持这些价值观,我们构建的软件**对变化有弹性**,**尊重用户时间**,并且**技术自主**。 |
0 commit comments