gpt4 book ai didi

c# - 简单场景,如何融入Tell Don't Ask?

转载 作者:太空狗 更新时间:2023-10-29 23:04:50 25 4
gpt4 key购买 nike

我正在尝试对涉及一个人和一个座位的基本场景进行建模。 Person 有一个 Status 属性:Sitting 或 Standing。一个座位有一个 Seated 属性,该属性指定当前坐在其中的 Person。此外,座位特殊因为它只“接受”某些人坐在里面。我知道席位“接受”某人听起来很奇怪,但想象一下它更喜欢某些人而不是其他人。

按照“Tell, Don't Ask”,我应该如何设计Person 和Seat 对象,以便只有当Seat“接受”他并将他的状态更改为Sitting 时,Person 才能在Seat 中坐下。我的第一个想法是 Person 应该有一个 SitDown 方法,如下所示:

Person.SitDown(Seat seat);

但这似乎需要 Person 类在坐在座位之前检查座位的状态,并且必须更新座位的 Seated 属性(而不是座位更新属性本身):

// inside the Person class
void SitDown(Seat seat) {
if (seat.AcceptsPlayer(this)) {
seat.Seated = this;
this.Status = Sitting;
}
}

让 Seat 类处理一个人的座位似乎更好:

Seat.SeatPerson(Person person);

// inside Seat class
void SeatPerson(Person person) {
if (IsAccepted(person)) {
this.Seated = person;
person.Status = Sitting;
}
}

不过这还是需要本座改变此人的身份。这是应该更新此人状态的方式吗?只有一个人才能改变他的状态吗?您将如何为这个简单场景建模?

最佳答案

引入第三个模型......同时引用座位和人的座位。然后你可以在每次有人坐下时创建该模型的一个实例,进行一些验证以防止两个人坐在同一个座位上,甚至可以进行一些超时(如果你坐在一个座位上太久,你就会失去它) .

关于c# - 简单场景,如何融入Tell Don't Ask?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/392668/

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