ORM 采用构造函数+原型链分三层:模型层定义字段与业务逻辑,行为层提供链式 CRUD,适配层注入数据库驱动;各层职责分离,支持灵活扩展与多库适配。

直接用构造函数 + 原型链实现 ORM,核心不是堆功能,而是把“数据模型”“查询逻辑”“关系映射”三层职责清晰拆到原型链不同层级,让每层只管一件事,后续加字段、加关联、换数据库驱动都只需改对应一层。
模型层:构造函数定义业务实体结构
每个业务模型(如 User、Post)是一个构造函数,只负责声明字段、默认值、校验规则。不碰数据库操作,也不处理关联。
- 字段定义用静态属性 schema,描述字段名、类型、是否必填、默认值
- 实例方法只做业务逻辑,比如 fullName()、isValidEmail()
- 避免在构造函数里初始化数据库连接或执行 SQL
行为层:共用原型提供基础 CRUD 和链式查询
所有模型共享一个基类原型(比如 Model.prototype),封装通用能力:insert/update/select/delete、where/orderBy/limit 等链式方法,返回 this 实现流式调用。
- 所有查询方法返回 this,不立即执行,最后用 exec() 或 first() 触发
- where() 接收对象或函数,内部统一转成条件数组,为后续适配不同数据库留接口
- exec() 不写死 SQL,而是调用 this._buildQuery() + this._runQuery(),两步解耦
适配层:原型链末端注入具体数据库逻辑
通过 Object.setPrototypeOf() 或构造函数继承,在模型创建后动态挂载数据库驱动实现。比如 MySQLModel 继承 Model,重写 _runQuery() 调用 mysql2;MongoModel 重写它去调用 mongodb driver。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
立即学习“Java免费学习笔记(深入)”;
- 驱动只需实现 _runQuery(sqlOrCmd, params) 和 _buildQuery() 两个方法
- 关联查询(如 hasMany、belongsTo)不硬编码 JOIN,而是由驱动按需生成嵌套查询或分步查
- 事务控制放在驱动层,Model 层只暴露 beginTransaction() / commit() / rollback() 方法
扩展点:用 Symbol 或约定属性预留钩子
在原型上预留可被子类覆盖的钩子方法,比如 beforeSave()、afterFind(),不强制执行,只在基类方法中检查是否存在并调用。
- 字段级钩子用 schema 中的 transform 函数,存前格式化、取后解析
- 关联加载用 relations 静态属性声明,由基类自动识别并在 find 时触发加载逻辑
- 支持装饰器语法(如 @column、@hasMany)需额外编译,原生 JS 中建议用纯对象配置代替
不复杂但容易忽略:原型链越深,性能越敏感。避免在原型上放闭包或大对象;所有缓存(如 SQL 模板)存在构造函数自身而非实例;字段校验和类型转换尽量用简单函数,别引入正则或复杂库。

















