使用Perl的OO设计模式
我目前正计划设计一个新系统,我需要编写与后端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 这里的正确设计决定是什么?还有其他方面我不考虑哪一个可能使一个选项比另一个更可行? 我将使用Perl Catalyst和Moose在该系统中实现MVC设计模式. 谢谢大家为您的贡献. 解决方法
你要问自己一个问题.一只猫或一个盒子所属的猫是否重要?
例如,当你有猫对象时,你甚至需要了解它的主人吗?是否有一个以猫为开头的功能,并且具有特定于所有者的功能 – 在您知道猫对象之前不知道所有者? 例如.一个典型的功能总是从用户开始: my $org = $user->org(); 继续寻找它的猫 my @cats = $org->listOwnedCats(); 然后对其中一只猫做点什么: $cats[0]->CheckHealth(); 请注意一个重要的事实:当你到达特定的猫时 – 你已经知道了组织,因为这就是你如何获得猫对象的方式.没有必要在$cat对象中存储$org. 盒子里的猫也是如此.除了知道有些猫没有盒装之外,你是否需要找到猫的物品盒? 如果该功能模式成立(几乎总是如此),那么您将拥有一个非常直接的对象模型: >用户:属性是“org”和其他一些东西 >其中一个方法是PlaceUnboxedCatIntoBox() > Box:属性是“CatList”(cat对象的数组)>猫:属性是特定于猫的 – 猫不拥有盒子或组织. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |