Java - 我应该使用字段或类来解决问题,如下所示:

时间:2010-06-23 08:39:12

标签: java design-patterns orm design-principles

我在DB中有两个表

  • FuelStation (fuel_station_id:int(PK),fuel_station_name:varchar,fuel_brand_id:int(FK))
  • FuelBrand (fuel_brand_id:int(PK),fuel_brand_name:varchar)

正如我们所看到的,两个表都通过链接。外键(fuel_brand_id)

现在,我想设计一个与上述数据模型相对应的对象模型,但我很困惑使用以下两种方法的方法:

  • 是否只生成一个 FuelStation 类并将 String 中的燃料品牌存储在 FuelStation 上课。

OR

  • 制作两个课程: FuelStation FuelBrand 。然后将它们与多对一关系联系起来,因为一个加油站将只有一个燃料品牌但只有一个燃料品牌可以有很多加油站

Q1。哪种方法更好?

Q2。每种方法的优缺点是什么?


  

Upto My Knowledge:

     

方法2的优点

     
      
  • 它使我们的对象模型更加细化。

  •   
  • 度Acc。对于良好的设计原则,我们的对象模型必须至少与关系模型一样精细。方法2遵循该原则

  •   
     

方法1的优点

     
      
  • 无需为每个 FuelStation
  • FuelBrand 创建单独的对象   

3 个答案:

答案 0 :(得分:2)

  
      
  1. 只制作一类FuelStation并将燃料品牌存储为FuelStation类中的String。
  2.   
  3. 制作两个类:FuelStation和FuelBrand。然后将它们与多对一关系联系起来,因为一个燃料站只有一个燃料品牌,但一个燃料品牌可以有许多加油站。
  4.   

这两种方法之间没有明确的通用选择,因为很多方面取决于背景。一些决定因素:

  • 你有多少站和品牌?如果您使用相同的燃料品牌的巨大数量的站点,使用第二种方法避免重复可能会更好。 OTOH如果在实践中每个燃料品牌仅由一个站使用(并且它不会改变),使用第一种方法是有意义的。
  • 是否可能/期望FuelBrand属性发生变化,或引入新属性?如果是这样,那么再次使用第二种方法会更好 - 否则FuelBrand中的任何更改都需要更改FuelStation类。
  • 未来燃油站可能有多个燃料品牌吗?这将再次需要第二种方法。

作为一个底线,第二种方法更灵活,所以我更愿意,即使现​​在没有可预见的变化明确要求这种设计 - 在SW开发中,永远不要说永远: - )

答案 1 :(得分:1)

哪一个更好取决于您想要对信息做什么。

a)如果列出所有提供某个品牌的电台很有意思,您可能还想选择从FuelBrand名称到FuelStations集合的某种地图。

b)如果燃料品牌已经或将要拥有您想要使用的任何属性(价格等),最好从中选择一个类。

答案 2 :(得分:0)

  

无需为每个FuelStation为FuelBrand创建单独的对象

任何一种方法都有相同数量的对象 - 您要么有N个FuelBrand对象,要么有N个字符串对象,N可以是品牌数量,也可以是站点数量,具体取决于您是否重复使用这些对象。所以这个论点似是而非。

我倾向于用一个类代表每个表,因为它确实表明品牌是品牌而不是另一个品牌。它也适用于关系模式允许的具有相同名称的不同品牌,即使它不太可能。