2010-02-19 61 views
0

这是理论上的问题,但任何的建议是更受欢迎..设计Condiderations应用程序开发

当根据许多书OO设计的应用程序,你应该有一个类与字段类变量数据库的每个表..

但是,当你想获得多个表的数据,并将其存储对象的集合中,你会发现,你需要一个对象,将有变量在多个表..

举例:需要获得ISBN /作者的名字/作者的姓氏/类别的书籍列表 实际数据在3个表格中:书籍/作者/类别和作者/类别的ID作为书籍表的外键..

什么是最佳设计方法?添加到书类更多的变量(作者的名字/作者的姓氏/类别)或不?

希望很清楚..

感谢您的任何回应。

回答

0

“每桌一班”是一条经验法则,很好的开始。但它不是刻在石头上的。您可以(也应该)评估应用程序的需求,数据的预测使用模式等。将多个表映射到单个类并不罕见,反之亦然:将单个表表示为多个类。

建议根据OO范例设计您的类(而不是试图将它们映射到您的表结构)。如果需要,您可以对课程设计进行微调以符合数据层的要求。

在具体情况下,取决于您是否预见需要单独获取书籍数据(没有作者&类别),还是更典型一次需要全部3个。这也是一个问题,作者和类别有多少属性。

如果您经常只抓取书籍数据和/或作者&类别有很多属性,将它们保存在不同的类中更有意义。如果你将它们放在一个班级中,你将会有很多重复的数据(因为很多书籍会有相同的类别或作者数据),并且你总是需要不必要地加载3行数据库中的连接,因此你需要付出一定的性能在大多数情况下,没有任何惩罚。

OTOH如果您通常一次从所有3个表中获取数据,那么将它们保留在一个类中可能有意义。即使如此,我仍然会选择单独的课程,以避免类别数据的重复。此外,如果这些作者是分开的实体而不是Book类的一部分,您甚至可以将作者的类别缓存起来。

很大程度上取决于您的开发语言和工具;例如在使用像Hibernate这样的ORM工具的Java中,设置这些映射要容易得多,在您了解应用程序的更多信息时使用延迟获取并优化获取计划,使用JDBC。

+0

非常感谢您的回复! 的确,我决定为作者和类别分别开设类,并且Book类有一本书的属性Writer和Category对象。 – Nikos 2010-02-21 19:29:32

0

该类别和作者的名字是书类的属性似乎是合理的。至于实现,您可以创建一个服务,从不同的表中获取所有信息以读取类Book的对象。

+0

非常感谢您的回复。 有没有其他的方法对吗? 从其他“实体”添加属性是唯一的方法? – Nikos 2010-02-19 09:28:45

0

您不必为每个数据库表都有其他方法的类。领域驱动设计(DDD)是一套指导方针,是设计您的应用程序的自顶向下方法。在DDD世界中,您编写代码来解决业务问题,而不是建模您的数据层。有很多情况下,您的数据库模式与您的域设计有很大不同。

Eric EvansJimmy Nilsson这两本书都写得很好,我强烈建议你看看。

+0

非常感谢, 我需要使用面向对象设计来实现这一点,但我会记住你的建议。 – Nikos 2010-02-19 09:51:08