【问题标题】:Data modeling, how to model such a structure into classes?数据建模,如何将这样的结构建模成类?
【发布时间】:2015-08-09 02:16:53
【问题描述】:

我有一本书课

Class Book
{
    String name;
    String id;
}

它具有一些通用属性和一些其他库特定属性,因此库“xyz”中的图书 id '111' 具有标题属性,而库“abc”中具有 numberOfPages 和尺寸 所以,它看起来像:

Class Book
{
    String name;
    String id;
    String xyzTitle;
    int abcNumberOfPages;
    float abcHeight;
    float abcWidth;
}

但这看起来不太好。为什么不为书籍信息创建一个单独的类

Class XYZBookInfo
{
   String title;
}

Class ABCBookInfo
{
   int numberOfPages;
   float height;
   float width;
}

Class Book
{
   String name;
   String id;
   XYZBookInfo xyzInfo;
   ABCBookInfo abcInfo;
}

到目前为止还不错,但是;如果几个库共享一些属性怎么办! 如果 XYZ 和 ABC 图书馆对 书的重量 感兴趣,但另一个图书馆 ZZZ 不感兴趣?

在哪里添加权重属性? 即使我们创建了一个 WeightedBookInfo 类,然后从中创建子类 XYZBookInfo 和 ABCBookInfo,那么我们将不得不在两个类的实例中复制权重值??!!

我正在尝试创建一个 xcode 核心数据模型来表示这种结构,但这没关系,这是一个与概念相关的问题,而不是特定于技术的问题。

【问题讨论】:

  • 如果我们从概念上讲,我不使用 OOP 类进行数据建模。在我的数据库中,我会将数据库的所有用户所需的所有属性都包含在一个规范化的模式中。在我的应用程序中,处理书籍数据的对象会查询它需要的属性。 ABC、XYZ 和 ZZZ 可能是不同类的实例,如果不知道它们和相关组件应该做什么,就很难说。
  • 我不关心存储,我只是在我的应用程序中将模型构建到实体类中。 ABC、XYZ 和 ZZZ 是出售书籍的图书馆,但它们不共享书籍属性,其中一些关心其他图书馆不关心的属性,一些属性在其中一些之间共享,但在其他图书馆之间不共享!所以我建议创建新的 ABCInfo、XYZInfo 和 ZZZInfo 类,这样每个库特定的属性都将位于一个单独的库特定的信息类中。将图书馆信息与图书馆信息分开!
  • 如果 ABC、XYZ 和 ZZZ 是不同类的实例,它们可以有不同的嵌套 Book 类并具有适当的属性。
  • 不是这样,我的一本书只有一个书本实例,而这本书 '111' 有 XYZInfo 和 ABCInfo,可能没有 ZZZInfo。
  • 我试图在类之间分离关注点。例如,如果 XYZ 在任何时候突然提供一个 API 来为不同的属性提供不同的值,比如每天都在变化的折扣。所以我会在XYZInfo中写几个函数来调用API并获取新值,而ABC值每天都在变化,用户需要在应用程序中手动更改某种UI表单或其他东西,ZZZ正在用不同的方法改变!如果所有道具都在一个类中,我需要检查这本书是否由哪个库出售并应用不同的更改功能!

标签: javascript java entity data-modeling


【解决方案1】:

您需要将知识内容从表示中分离出来,否则您将严重限制有用性。此外,利用物理特性的概括。所以也许:

具有标题和作者等属性的书籍类)。 (这个类可能继承自发布之类的东西。)

具有 ISBN、日期、出版商、格式(平装本、精装本、移动版、pdf 等)的 bookEdition 界面

具有 numberOfPages 的physicalPublication 接口

具有尺寸和重量的物理事物的某种接口。

【讨论】:

    猜你喜欢
    • 2020-03-07
    • 2016-04-28
    • 1970-01-01
    • 1970-01-01
    • 2012-04-13
    • 1970-01-01
    • 2013-09-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多