gpt4 book ai didi

perl - Perl 面向对象设计模式

转载 作者:行者123 更新时间:2023-12-04 22:32:28 25 4
gpt4 key购买 nike

我目前正在规划一个新系统的设计,我需要编写与后端 API 交互的代码。我正在考虑对象组合和继承,并决定在我的情况下最正确的程序是组合而不是继承,因为我的对象彼此之间具有“具有”关系而不是“是一个”。

我现在发现由于某些对象依赖于其他对象,因此可能存在“对象 A”具有“对象 B”属性和属性“对象 C”的情况——但是“对象 B”也具有属性“对象” C”。

希望这个比喻更有意义:

假设我有一家公司销售装有猫和放射性物质的盒子,这些盒子可能会或可能永远不会发生 react :

我将我的产品卖给组织。用户通过指定他们所属的组织向我注册。一个组织可能有很多用户,也可能没有。用户必须具有其所属的组织。我跟踪我的产品(盒子作为一个实体,猫作为一个实体)以及它们属于哪个组织。我还跟踪猫以及它们在哪个盒子里。一个组织可能有很多盒子,其中任何一个盒子里都有很多猫。箱子可能是空的。一些用户被允许购买新的盒子,而其他用户只被允许查看它们。

身份验证和授权都由我与之交互的 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

这里正确的设计决策是什么?有没有我没有考虑的其他方面可能使一个选择比另一个更可行?

我将使用 MVCPerl Catalyst 在这个系统中实现一个 Moose 设计模式。

提前感谢大家的贡献。

最佳答案

你得问自己一个问题。猫或盒子属于哪个组织对猫来说重要吗?

例如,当你有一个 cat 对象时,你甚至需要知道它的主人吗?是否有以猫开头的功能,并执行特定于所有者的操作 - 在您知道猫对象之前不知道所有者?

例如。典型的功能总是从用户开始:

my $org = $user->org();

继续寻找它的猫
my @cats = $org->listOwnedCats();

然后对其中一只猫做一些事情:
$cats[0]->CheckHealth();

请注意一个重要的事实:当您到达特定的猫时 - 您已经知道组织,因为那是您首先获得 cat 对象的方式。在 $org 对象中存储 $cat 零需要。

盒子里的猫也是如此。除了知道某些猫尚未装箱外,您是否还需要找到猫的物品的盒子?

如果该功能模式成立(几乎总是如此),那么您将拥有一个非常严格的对象模型:
  • 用户:属性是“org”和其他一些东西
  • Org:属性是“UnboxedCatList”和“BoxList”——一个是尚未分配给盒子的猫的数组;一个是盒子对象的数组
  • 方法之一是 PlaceUnboxedCatIntoBox()
  • 框:属性是“CatList”(猫对象数组)
  • Cat:属性是 cat 特定的 - cat 不拥有盒子或组织。
  • 关于perl - Perl 面向对象设计模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17419245/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com