2

假设我们有Car一个名为 MAIN 字段的类VIN(车辆识别号)。VIN给了我们很多信息,比如我们:

  • 所有者
  • 注册地
  • 生产国
  • 生产年份
  • 颜色
  • 引擎种类
  • 等等等等

我可以继续并添加更多信息:

  • 最后已知的 GPS 坐标
  • 精美清单
  • 是盗窃(布尔值)
  • 等等等等

在对象内部存储一些信息(例如生产年份和发动机类型)似乎是合理的Car。然而,将所有这些信息存储在Car对象内部会使其过于复杂、“过载”且难以管理。此外,随着应用程序的发展,我可以添加越来越多的信息。

那么边界在哪里呢?什么应该存储在Car对象内部,什么应该存储在外部,例如Dictionary<Car, GPSCoordinates>

我认为可能我应该将“静态”数据存储在Car对象内,以便制作它immutable。并将“动态”数据存储在特殊存储中。

4

2 回答 2

0

仅仅因为你的Car类提供了一个属性 GPSCoordinates并不意味着你需要在内部保存这些坐标。本质上,这就是封装的全部内容。

是的,然后您可以添加诸如“IsInGarageNow”、“WasEverDrivedByMadonna”或“RecommendedOil”之类的属性。

于 2012-08-18T21:54:06.577 回答
0

我会使用一个类来调用CarModel应用程序中所有可能的汽车共享的基本属性(发动机尺寸、颜色、注册号等)。然后,您可以使用任意数量的更具体的子类来扩展此类,例如 Car、RentalCar 或任何适合您的业务逻辑的子类。

这样,您就可以清楚地定义所有汽车共享的内容以及汽车可能处于的不同状态的附加定义(例如,具有独特参数的 RentalCar)。

更新:

我想你正在寻找的是这样的(虽然我会建议反对它):

public class Car
{
   // mandatory
   protected int engineSize;
   protected int color;

   // optional
   protected Map<String, Object> attributes = new HashMap<String, Object>();


   public void set(String name, Object value)
   {
     attributes.put(name, value);
   }

   public Object get(String name)
   {
     return attributes.get(name);
   }
}

为什么这不是一个好的解决方案:

  • 祝你好运,试图将这个类持久化到数据库或设计任何依赖于它的一组众所周知的属性的东西。
  • 调试潜在问题的噩梦。
  • 在类型定义方面不是很好地使用 OOP。这可以被滥用来将Car类变成它不是的东西。
于 2012-08-18T21:55:25.890 回答