在静态语言中分离和合并由数据库表组成的对象
Separating vs merging objects made from database tables in static languages
考虑一下,在数据库中有一个名为users
的表和一个称为wallets
的表。用户拥有0个、1个或多个钱包。这种关系是一对多的,这意味着钱包有一个指向用户的外键。
现在的问题是:当为一个人构建结构或类时,我看到了两种可能性:
1) 用户没有钱包的迹象。有一个函数将用户作为参数,并获取一个钱包数组。
2) 用户有一个成员,它是一个包含钱包的数组,在创建对象/结构时会提取钱包。
我认为第一种方法可能更好,因为它更模块化——在第二种方法中,用户依赖钱包,即使用户没有钱包。尽管如此,我不确定哪种方法更好,所以我正在寻找两种方法的比较。
在应用程序级别上,您可能有这样的用户类型(Go表示法):
type User interface {
Wallets() []Wallet
}
在下面,有一个数据库,在您的例子中是SQL。通过查看您的应用程序,这应该是显而易见的。
以接口契约的形式对依赖关系做出超出其保证范围的假设,会不可逆转地耦合组件。
这意味着,如果你根据数据库的模式对应用程序进行建模,你就错了,因为你的整个应用程序现在都与所述数据库紧密耦合,对其中任何部分的任何更改都将产生巨大的、不可预测的影响。
一个常见的解决方案是使用一个所谓的ORM层,它位于数据库驱动程序和实体模型之间。它将处理以下内容:
- 钱包应该如何提取以及何时提取
- 钱包的信息存储在数据库的哪个位置
- 删除用户时,钱包是否也应该删除
除其他外。
PS:这个答案既适用于静态类型语言,也适用于动态类型语言。
相关文章:
- 什么时候调用组成单元对象的析构函数
- 对RValue对象调用的LValue ref限定成员函数
- CMake-按正确顺序将项目与C运行时对象文件链接
- 空基优化子对象的地址
- 将对象数组的引用传递给函数
- 当我不需要数据库中的所有值时,如何部分初始化 c++ 对象?
- 如何缓存从MySQL数据库创建的对象
- 几个使用相同原型的共享对象导致错误:数据库中已经存在文件
- 从数据库中以 blob 数据类型形式存储的原始图像数据中检索 CImage 对象
- 数据库访问对象设计模式
- 数据库连接对象的名称游标的历史记录是什么
- 如何从数据库中读取CLongBinary字段并将其写入CFile对象
- 在静态语言中分离和合并由数据库表组成的对象
- 通过在Sqlite3数据库C++中获取表来创建对象
- 从数据库创建自定义对象
- 是否有一种方法可以从sqlite3对象获得数据库位置
- c++对象数据库
- 我应该在哪里声明数据库对象
- 使用数据库模型(键)来引用运行时对象,是好是坏
- 如何使用数据访问对象进行序列化和关系数据库数据访问