Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 什么时候一对一关系应该将所有内容存储在对象中还是存储在专用存储中?_Oop - Fatal编程技术网

Oop 什么时候一对一关系应该将所有内容存储在对象中还是存储在专用存储中?

Oop 什么时候一对一关系应该将所有内容存储在对象中还是存储在专用存储中?,oop,Oop,假设我们有一类汽车,其主要字段称为VIN车辆识别号。VIN为我们提供了很多信息,例如: 物主 注册地 生产国 生产年份 颜色 发动机类型 等等等等 我可以继续并添加更多信息: 最后已知的GPS坐标 罚款单 盗窃是布尔型的吗 等等等等。 将一些信息(例如生产年份和发动机类型)存储在汽车对象中似乎是合理的。然而,将所有这些信息直接存储在Car对象中会使其过于复杂、过载和难以管理。此外,随着应用程序的发展,我可以添加越来越多的信息 那么边界在哪里?什么应该存储在汽车对象内部,什么应该存储在字典之类的东

假设我们有一类汽车,其主要字段称为VIN车辆识别号。VIN为我们提供了很多信息,例如:

物主 注册地 生产国 生产年份 颜色 发动机类型 等等等等 我可以继续并添加更多信息:

最后已知的GPS坐标 罚款单 盗窃是布尔型的吗 等等等等。 将一些信息(例如生产年份和发动机类型)存储在汽车对象中似乎是合理的。然而,将所有这些信息直接存储在Car对象中会使其过于复杂、过载和难以管理。此外,随着应用程序的发展,我可以添加越来越多的信息

那么边界在哪里?什么应该存储在汽车对象内部,什么应该存储在字典之类的东西外部

我想我应该把静态数据存储在Car对象中,这样它就不可变了。并将动态数据存储在特殊的存储器中。

仅仅因为您的汽车类提供了属性GPSCoordinates,并不意味着您需要在内部保存这些坐标。本质上,这就是封装的意义所在

是的,您可以添加属性,如IsInGarageNow、WaseverDrivedBymadona或RecommendedOil。

仅仅因为您的汽车类提供了属性GPSCoordinates,并不意味着您需要在内部保留这些坐标。本质上,这就是封装的意义所在


是的,然后您可以添加属性,如IsInGarageNow、WasEverDrivedByMadonna或RecommendedOil。

我将使用一个名为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的使用不是很好。这可能被滥用,使汽车类成为它不是的东西。
我将使用一个名为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类和一个派生的RunningCar类。将状态与“不在经销商处”和工作状态区分开来one@Steve我不喜欢这样,因为同一辆车需要改变它的运行情况,从一辆车到另一辆车,再回到非常不方便的地方。我希望成为一个真实的对象=一个实例。只是一个想法。一个Car类和一个派生的RunningCar类。将状态与“不在经销商处”和工作状态区分开来one@Steve我不喜欢这样,因为同一辆车需要改变它的运行情况,从一辆车到另一辆车,再回到非常不方便的地方。我希望成为一个真实的对象=一个实例。我只谈论适用于任何汽车的参数。我可以想象很多这样的参数。例如,IsInGarageNow、Waseverdrivedbymadona或RecommendedOil。所以应用程序通常需要存储大量的信息。但是,我应该在对象中存储什么信息,在对象之外存储什么信息……好吧,考虑到你们所说的是面向对象的,在Car类或其派生类中不应该没有任何东西没有封装。在本例中,您确实需要确定什么定义了一辆车的类型。有很多方法可以允许一个类在其强制参数之外保存任意数量的值,但我真的怀疑使用这种解决方案的有效性,除非你必须这样做。我只讨论适用于任何汽车的参数。我可以想象很多这样的参数。例如IsInGarageNow、EverdrivedBymadona或Recommende
多伊尔。所以应用程序通常需要存储大量的信息。但是,我应该在对象中存储什么信息,在对象之外存储什么信息……好吧,考虑到你们所说的是面向对象的,在Car类或其派生类中不应该没有任何东西没有封装。在本例中,您确实需要确定什么定义了一辆车的类型。有一些方法可以允许类在其强制参数之外保存任意数量的值,但我真的怀疑使用这种解决方案的有效性,除非您必须这样做。