gpt4 book ai didi

java - 当子对象状态影响父状态时处理它

转载 作者:行者123 更新时间:2023-12-01 15:52:39 24 4
gpt4 key购买 nike

示例:

class Person
{
@OneToMany
List<Action> actionHistory;

@ManyToOne
Employer employer;

private StateEnum myCurrentState = StateEnum.INITIAL_STATE;
}

想象一下这样的情况,其中有两件事是正确的:

  1. Person.myCurrentState 需要根据 actionHistory、雇主等的变化进行更改。有一组业务规则,例如“如果类型 X 的操作出现在操作流中并且当前状态为 Y,则设置新的状态为 Z”

  2. 人员需要能够根据其当前状态阻止和允许对子级的某些操作。例如,在某些情况下可能无法更新雇主的职位,或者可能无法添加满足特定条件的操作。

最初,我以为我会尝试通过包含验证/ react 逻辑的 Person 例程将所有访问权限集中到子级。结果是 Person 对象变得太大而且到处都是,因为它需要监视多少个子对象的操作。 (也就是说,不仅仅是 getAEmployer()、setNewEmployer() 之类的东西,还有 updateJobTitleAtEmployer() 等东西)

不过,将逻辑传播给 children 似乎同样困惑。在这种情况下,雇主(例如)必须包含大量对其父级的引用。而且与这些东西相关的业务规则也分散在各处。

这个问题有什么干净的通用解决方案吗?我想要一些通用的方法,让我可以拥有一个父级 vert ,并在某些情况下对其许多子级的某些状态变化使用react。

更新:我认为我在这个问题中错误地使用了“ parent ”和“ child ”这两个术语。我这样使用它们:父级“有一个”子级/父级“由子级组成”。在示例中,Person 是父类,属性类是子类。

更好的例子:

class Employee
{
private Contract contract;
private List<Action> actions;

private EmployeeState currentState = EmployeeState.INITIAL;
}

想象一下,在这种情况下,如果合约中的某些内容发生变化(例如,如果利率上升),则 currentState 可能会发生变化。如果员工处于某些州,也可能无法在契约(Contract)中设置某些内容。在 currentState 发生变化的情况下,Contract 属性只是更大计算中的一个因素(即状态可能由诸如“如果 Contract.hourlyRate > 30 并且操作包含具有这些属性的操作而不是状态...”之类的规则确定。

此外,在这种情况下,添加操作可能会更改 Employee 的状态,或者根据当前状态被阻止。

如果我遇到这些问题,我的模型是否可能有问题?

最佳答案

据我了解,您可以使用Observer pattern对于这种情况。在这种情况下,Contract 会订阅 Employer,这样当 Employer 的状态发生变化时,Contract 就会收到通知,并根据当前状态做自己的事情。

关于java - 当子对象状态影响父状态时处理它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5706137/

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