类结构应该与OOP中的表结构匹配吗?

时间:2018-02-08 13:18:16

标签: java database oop

我有一个问题。我想请你帮忙。

例如,我有两个表: users(id,first_name,last_name) 答案(id,user_id,content)

在创建我的类Answer时,它应该包含一个对象User还是一个userId字段?

在第一种情况下,我会准备好用户字段,但是当我从答案表中提取答案时,它将要求我浏览表用户。

在第二种情况下,每次我需要用户的信息时,我都必须从用户表中获取它们。

这只是一个简单的例子。我应该在具有交织表和大量外键的复杂项目中采用什么方法。

编辑:

我没有使用任何ORM。

2 个答案:

答案 0 :(得分:2)

不,通常,设计良好的面向对象程序中的类不会镜像您在关系数据库中找到的表。数据的结构和存储方式是一个"实现细节"一个对象通常应该隐藏其客户。

每个对象都应提供特定服务,并在内部与其他对象协作以履行其职责。对象的API应隐藏其组件部分的存在,并向其对等体公开更简单的抽象。

尝试找出您的系统提供的服务以及如何在对象之间分配这些责任。

答案 1 :(得分:-1)

如果不使用ORM,你可以做任何你觉得更实际的事情,但保留相似或相同的名字将有助于基本搜索和最小惊喜的原则:

firstname -> getFirstname ...

对于结构而言,这一切都取决于您打算如何处理数据,因此很难说清楚。 Java对象不需要镜像数据库,这就是使用对象关系映射的原因,因为它们是两个不同的世界。

恕我直言,携带数据的对象应该简单明了(在getter中没有业务逻辑),但是它们可能会在构造期间检查值的有效性,以便您可以在以后信任数据(断言notBlank,> = 0 ,. ..)

完成这项工作的第一个简单代码,然后尝试在性能和可维护性方面重写它。