在静态语言中分离与合并由数据库表组成的对象

时间:2014-09-27 16:34:08

标签: c++ sql go static-language

请注意,在数据库中,您有一个名为users的表和一个名为wallets的表。用户拥有0个,1个或更多个钱包。关系是一对多,意味着钱包有一个指向用户的外键。

现在问题如下:当为一个人构建结构或类时,我看到两种可能性:

1)用户没有钱包的迹象。有一个函数将用户作为参数,并将获取钱包的数组。

2)用户拥有一个包含钱包的数组成员,并在创建对象/结构时获取钱包。

我认为第一种方法可能更好,因为它更模块化 - 在第二种方法中,用户依赖钱包,即使用户没有钱包。 不过,我不确定哪种方法更好,所以我正在寻找两种方法的比较。

1 个答案:

答案 0 :(得分:1)

在应用程序级别,您可能拥有这样的用户类型(Go notation):

type User interface {
    Wallets() []Wallet
}

在下面,有一个数据库,在你的情况下是SQL。想想,通过查看你的应用程序,是显而易见的。

以接口合同的形式对依赖关系做出超出其保证的假设,不可逆转地将组件耦合在一起。

这意味着如果您按照数据库架构对应用程序进行建模,那么您做错了,因为您的整个应用程序现在与所述数据库紧密耦合,并且对其任何部分的任何更改都会有很大的影响,不可预测的影响。

一个常见的解决方案是使用所谓的ORM layer,它位于数据库驱动程序和实体模型之间。它将照顾像:

之类的东西
  • 如何以何时取出钱包?
  • 数据库中存储钱包的信息在哪里?
  • 删除用户时,钱包是否也应删除?

等等。

PS:这个答案适用于静态和动态类型的语言。