Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/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_Design Patterns - Fatal编程技术网

Oop 设计一个集合,其中一项是主项

Oop 设计一个集合,其中一项是主项,oop,design-patterns,Oop,Design Patterns,假设一个用户有很多车。这些车只属于他 您可以用两种方式表示这一点: 具有cars集合和main_car属性的用户实体,指向集合中的一个。业务规则是:用户只能拥有属于他的主车 或 用户实体,具有cars集合。其中一辆车可能有一个布尔值is_main属性。业务规则是:只能将属于用户的1辆车定义为主车 业务规则将在制定者中强制执行 我想听听你的建议以及这两种方法的优缺点。谢谢 我更喜欢第一种选择 优点: 性能-如果我需要定位用户的主车,我可以只参考主车属性,而不必通过列表搜索-o1 vs.on。 班级

假设一个用户有很多车。这些车只属于他

您可以用两种方式表示这一点:

具有cars集合和main_car属性的用户实体,指向集合中的一个。业务规则是:用户只能拥有属于他的主车

用户实体,具有cars集合。其中一辆车可能有一个布尔值is_main属性。业务规则是:只能将属于用户的1辆车定义为主车

业务规则将在制定者中强制执行


我想听听你的建议以及这两种方法的优缺点。谢谢

我更喜欢第一种选择

优点:

性能-如果我需要定位用户的主车,我可以只参考主车属性,而不必通过列表搜索-o1 vs.on。 班级责任-一辆车-它真的需要知道它是某人的主要车吗?。我认为,如果一个用户有很多车,他就有责任存储他使用这些车的信息。 记忆-我相信这是一个相当小的问题,至少对我来说是一个无关紧要的原因,但是为什么要为所有的收集保存另一段数据,而不是仅仅多保存一个引用。 缺点:

如果现在您需要存储多个主汽车,那么突然之间,您必须保存一组引用,而不是一个简单的属性,而在另一个解决方案中,您只需将其他汽车的属性设置为true。
我希望我正确地理解了你的问题,并且我的回答能帮助你

我更喜欢第一种选择

优点:

性能-如果我需要定位用户的主车,我可以只参考主车属性,而不必通过列表搜索-o1 vs.on。 班级责任-一辆车-它真的需要知道它是某人的主要车吗?。我认为,如果一个用户有很多车,他就有责任存储他使用这些车的信息。 记忆-我相信这是一个相当小的问题,至少对我来说是一个无关紧要的原因,但是为什么要为所有的收集保存另一段数据,而不是仅仅多保存一个引用。 缺点:

如果现在您需要存储多个主汽车,那么突然之间,您必须保存一组引用,而不是一个简单的属性,而在另一个解决方案中,您只需将其他汽车的属性设置为true。
我希望我正确理解了你的问题,并且我的回答能帮助你

第二种选择的一个大问题是,假设你有两个人,p1和p2,他们驾驶同一辆车。汽车可能是p1的主汽车,但不是p2,因此不能简单地为汽车设置is_主字段。这很有希望能进一步解释班级责任方面的问题


出于这个原因,我会选择第一种

第二种选择的一个大问题是,假设你有两个人,p1和p2,他们驾驶同一辆车。汽车可能是p1的主汽车,但不是p2,因此不能简单地为汽车设置is_主字段。这很有希望能进一步解释班级责任方面的问题


出于这个原因,我会选择第一种

方案一将是最常用的方法

在汽车实体上创建is_main字段的问题是,如果为一个用户选择is_main,则拥有该汽车的任何其他用户也会将该汽车设置为is_main。此外,对于任何给定的用户来说,几辆车都有可能成为主车,因为所有的车都可以将其is_main属性设置为true,因此很难限制这一点

如果您的用户有一个main_car字段,那么他们在任何给定的时间都只能有一辆main_car


第二种方法也存在数据完整性问题—您可能无意中取消了数据库的规范化。您可以删除汽车类型,从而删除用户的主汽车,而不会引发任何类型的警告或异常,从而导致有用信息的丢失。如果您试图在方法1中删除一辆作为用户主要车辆的车辆,您将得到一个错误,因为用户会突然拥有一辆不存在的主要车辆。

选项1将是最常用的方法

在汽车实体上创建is_main字段的问题是,如果为一个用户选择is_main,则拥有该汽车的任何其他用户也会将该汽车设置为is_main。此外,对于任何给定的用户来说,几辆车都有可能成为主车,因为所有的车都可以将其is_main属性设置为true,因此很难限制这一点

如果您的用户有一个main_car字段,那么他们在任何给定的时间都只能有一辆main_car

第二种方法也存在数据完整性问题—您可能无意中取消了数据库的规范化。您可以删除汽车类型,从而删除用户的主汽车,而无需抛出任何警告或exc
造成有用信息丢失的错误。如果您试图删除进近1中用户的主车,您将得到一个错误,因为用户突然拥有一辆不存在的主车。

感谢您的见解!在选择选项之前,我将等待其他人的回答。请阅读您的见解!在选择选项之前,我会等待其他人的回答