首页 > 解决方案 > 有没有更好的方法来引用包含对象的对象?

问题描述

到目前为止,对于我所做的许多应用程序,总有一些类包含许多其他类。例如,我可能有一个拥有宠物的 Player 类。但是,有时我希望能够通过 Pet 引用 Player。以下代码将为此工作:

public class Player {
    Pet p;
    public Player() {
        p = new Pet(this);
    }
}

public class Pet {
    Player owner;
    public Pet(Player owner) {
        this.owner = owner;
    }
}

如果我想通过 Pet 引用 Player,那么当然可以使用owner变量。但是有没有更好的方法来做到这一点?我经常会有包含类等的类,所以我的玩家类将拥有一个宠物,它可能有一个玩具,然后玩具有一个对玩家的引用。见鬼,我什至可能有高于玩家的课程,例如世界城市中的建筑。因此,Pet's Toy 可能涉及整个世界。我觉得必须有更好的方法来做到这一点。

标签: java

解决方案


我觉得必须有更好的方法来做到这一点。

嗯,这真的取决于规模。当您的对象模型非常小,并且您(非常)确定在接下来的几个月或几年内没有重大改进时......那么这种简单的“双重簿记”可能是一个合理的答案。

但在更现实的情况下:是的,这种方法很快就会失效。

然后,它通常有助于研究领域驱动设计的想法。首先:看看你在建模什么。当然,我的宠物狗认识我,但它不知道“拥有”的概念,它不知道我是它的主人。

因此,第一个解决方案可能是:简单地owner从 Pet 类中删除该部分。相反,您可能想要创建某种索引。在最简单的形式中,这可能是一张地图。某个中央注册中心被告知X 拥有宠物 Y。现在您的代码可以询问 Y 是否知道 X 的所有者。

回到 DDD,你会谈到聚合。以某种方式属于一起的事物。但是你不能只找到任何一个成员,你总是必须通过一些元素。例如,请参见此处


推荐阅读