我目前正在规划一个新系统的设计,我需要编写与后端 API 交互的代码。我正在考虑对象组合和继承,并决定在我的情况下最正确的过程是组合而不是继承,因为我的对象彼此之间具有“具有”关系,而不是“是”。
我现在发现,由于某些对象依赖于其他对象,因此可能存在“对象 A”具有“对象 B”属性和“对象 C”属性的情况 - 但是“对象 B”也具有“对象”属性C”。
希望这个类比更有意义:
假设我有一家公司出售装有猫和放射性物质的盒子,这些盒子可能会或可能永远不会做出反应:
我把我的产品卖给组织。用户通过指定他们所属的组织向我注册。一个组织可能有很多用户,也可能没有。用户必须拥有其所属的组织。我跟踪我的产品(盒子作为一个实体,猫作为一个实体)以及它们属于哪个组织。我还跟踪猫以及它们在哪些盒子中。一个组织可能有很多盒子,其中任何一个都有很多猫。盒子可能是空的。一些用户被允许购买新盒子,而其他用户只被允许查看它们。
身份验证和授权都由我与之交互的 API 管理。
就对象关系而言:
$user has a => $organization that it belongs to
$user has a => $role that dictates what it may or may not do.
$box has a => $organization that it belongs to
现在:
$cat has a => $box that it belongs to
和
$cat has a => $organization that it belongs to ?
或者
$cat has a => $box that it belongs to WHICH has a => $organization that it belongs to
这里正确的设计决策是什么?有没有我没有考虑的其他方面可能使一种选择比另一种更可行?
我将在这个系统中使用和实现一个MVC
设计模式。Perl Catalyst
Moose
提前感谢大家的贡献。