2

我问你们所有没有为此使用库但正在构建自己的对象来管理流入和流出数据库表的数据的人。我有记录集对象吗?每行数据一个对象?两个都?两者都不?欢迎任何建议或经验。请不要告诉我使用 ORM 或其他此类工具包。这对我的项目来说太过分了,此外,这不是现在的问题,是吗?

4

5 回答 5

2

我强烈建议学习martin fowler企业应用程序架构模式,它描述了许多有助于了解的数据库模式,并让您了解模式的演变以完全使用 ORM 库。

您可能感兴趣的特定模式:

这些基本模式将让您了解如何构建对象,而更高级的模式(如活动记录/数据映射器)您将看到这些模式如何与您目前需要的问题域相关联。

于 2008-10-06T22:56:43.040 回答
2

您的数据模型由领域实体(现实世界的事物)主导。现实世界的事物有时可以映射到数据库中的单行。一个实体是一个对象是一个关系行——主要是。

有时,现实世界的实体非常复杂并且跨越多个数据库行。这就是“聚合”问题。对象可以是聚合。在不破坏所有正常形式规则的情况下,关系行不能轻易地聚合。

有时,由于类继承,您会不知道如何将对象映射到数据库行。继承层次结构的每一层是一行吗?还是所有的层都扁平化为每个子类表中的列?

此外,您需要拥有事物的集合(数据库是事物集合的集合)。

这些“集合”或“记录集”或“管理器”或“数据访问对象”在持久性(SQL?)和您的域实体之间进行调解。记录集从它有权访问的任何 SQL 内容构建您的域对象。同样,记录集将您的域对象展开为 SQL 内容。

ORM 是处理这个问题的一种方法;ORM 框架提供了这些类定义。如果 ORM “矫枉过正”,请借用设计模式。阅读 iBatis API。[当您使用它时,您可能会发现对于 ORM 来说没有什么太小了。]

简而言之,两者都是:“记录集对象”加上“每行数据一个对象”——大约。

如果您觉得需要滚动您自己的记录集集合,您可以尝试使用简单的序列化来持久化您的对象。您将在尝试序列化聚合和子类关系的复杂性之上堆积复杂性。为什么?对象之间有直接的引用。SQL 数据库必须使用主键和外键来模拟这一点。

于 2008-10-07T01:09:23.677 回答
1

无论您的项目有多大,我都会说使用 ORM :-P

但.....

回到没有 ORM 库的时代,我们使用手动将所有字段从 Java 记录集对象中提取出来并将它们插入到真正的 Java 类中。

反向应用于插入和删除(带有一个标志来指示要发生的事情)

多行通常填充到一个列表中。

于 2008-10-06T22:47:59.063 回答
1

这将取决于您是希望数据库设计驱动对象设计,还是您的域模型驱动数据库设计。

在第一个场景中,您为每个表创建一个类。您很快就会发现,有时您需要一个连接两个表的对象,因此您必须有一个场景来处理该异常。

在第二种情况下,您需要创建对象的标识映射,并以某种方式将类的关系映射回表。在这种情况下,将存在您没有对象与表的一对一关系的情况。

我知道您不想要一个工具的处方,但SubSonic是一个非常简单、稳定的工具包,可以帮助您从数据库结构生成代码,并且非常适合每个表有一个类的场景。您可以在半小时内安装并开始生成代码。值得一看。

于 2008-10-07T00:02:36.260 回答
0

要管理流入和流出数据库的实际数据(没有 ORM),您应该查看 Jakarta Commons DbUtils。

它提供了非常轻量级的帮助程序来运行查询和更新,例如自动将 ResultSets 转换为 bean 列表等。

于 2008-10-06T23:46:39.193 回答