【问题标题】:How should I implement items that are normalized in the database in object oriented design?我应该如何在面向对象设计中实现数据库中规范化的项目?
【发布时间】:2010-05-28 13:00:47
【问题描述】:

我应该如何在面向对象的类中实现在数据库中规范化的项目?在数据库中,我有一个项目表和Groups。每个项目属于一个组:

+----------------------------------------+
| Inventory                              |
+----+------+-------+----------+---------+
| Id | Name | Price | Quantity | GroupId |
+----+------+-------+----------+---------+
| 43 | Box  | 34.00 |     456  |     4   |
| 56 | Ball | 56.50 |       3  |     6   |
| 66 | Tin  | 23.00 |      14  |     4   |
+----+------+-------+----------+---------+
Totally 3000 lines

+----------------------+
| Groups               |
+---------+------+-----+
| GroupId | Name | VAT |
+---------+------+-----+
|     4   | Mini | 0.2 |
|     6   | Big  | 0.3 |
+---------+------+-----+
Totally 10 lines

我将在 GUI 中使用 OOP 类,用户可以在其中编辑库存中的项目和组。用一堆项目进行计算也应该很容易。计算需要增值税等集团信息。

我会写一个Item 类,但我需要一个Group 类吗?如果是这样,我应该将它们保存在全球位置,还是在需要进行项目计算时如何访问它们?这种情况有什么设计模式吗?

【问题讨论】:

    标签: oop design-patterns


    【解决方案1】:

    首先,最常见的实践是使用ORM(对象关系映射)工具。这些对大多数现代 OO 语言都可用,它们负责生成与数据库交互所需的类、管理检索和更新以及管理连接生命周期。

    除此之外,是的,您需要一个具有Items 集合的Group 类,以及(理想情况下)从Item 对其父Group 的引用。这是 ORM 可以提供帮助的领域之一,因为它可以确保这两个引用(子引用的集合和父引用的集合)保持同步。

    【讨论】:

    • 但是如果我将所有Item in 保留在Group 类中,那么我必须将所有Items 都保存在内存中吗?这听起来很棘手,因为我不需要同时使用所有 3000 个项目。或者这也许是最好的解决方案……必须考虑一下,谢谢。
    • 如果不将特定组的所有项目保存在内存中(或者,如果不是项目本身,至少是代表项目的东西),无法使用组对此进行建模。不要过早优化; 3000 个实例并非不合理。
    • 如果内存是一个真正的问题,您可以只保留列表中的 ID 并根据需要延迟加载它们。 ORM 工具比你想象的更能解决这个问题。
    【解决方案2】:

    是的,您需要一个 Group 课程。看起来它与 Inventory 有 1:many 的关系,其中 Group 是父级。组将引用一个集合或一组 Inventory。

    【讨论】:

    • GroupItem 是1:M 的关系,很多项目可以在同一个组中。
    猜你喜欢
    • 2017-10-04
    • 2013-07-26
    • 2014-02-19
    • 2011-11-20
    • 1970-01-01
    • 2013-01-18
    • 2011-01-12
    • 2018-07-08
    • 2013-05-23
    相关资源
    最近更新 更多