gpt4 book ai didi

java - 处理模型中条件字段的最佳方法

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:31:22 25 4
gpt4 key购买 nike

我有 3 个模型 PersonRolePosition 代表足球俱乐部中的人

public class Person {
private Long id;
private String name;
private Role role;
}

public class Role {
private Long id;
private String name; //like manager, goalkeeping_coach, player
}

public class Position {
private Long id;
private String name; //striker, midfielder, defender, goalkeeper
}

问题是 position 只有当角色是 player 时才有意义。所以如果我这样做

public class Person {
private Long id;
private String name;
private Role role;
private Position position;
}

然后对于所有不具有player角色的person实例,position字段将存储空值。同样,可能还有其他属性仅对 manager 和/或 goalkeeping_coach 实例有意义。

我尝试将 Person 类抽象化

@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class Person {
private Long id;
private String name;
private Role role;
}

public class Player extends Person {
private Position position;
}

public class Manager extends Person {

}

这将导致 playermanager 实例保存在不同的表中。但是,如果 角色 发生变化(比如一名球员退役并成为俱乐部的经理),问题就会出现。然后我必须将行从一个表移动到另一个表(比如删除 player 实例并使用除 position 之外的相同数据创建一个新的 manager 实例 数据),这似乎不是一个好方法。

那么处理这种情况的最佳方法是什么?是否可以像第一种情况那样使用空值?

最佳答案

需求是PersonRole之间的连接可以改变。
模型可以反射(reflect)如果你为这个连接做一个表,还有PersonPosition

之间的连接
// Person table has only Person details 
public class Person {
private Long id;
private String name;
}

// Role table has only Role details
public class Role {
private Long id;
private String name; //like manager, goalkeeping_coach, player
}

// Position table has only ...
public class Position {
private Long id;
private String name; //striker, midfielder, defender, goalkeeper
}

// connection of Person and Role
public class PersonRole {
private Long person_id;
private Long role_id;
}

// connection of Person and Position
public class PersonPosition {
private Long person_id;
private Long position_id;
}

这个设计解决了人员转换角色的需求,也解决了职位的条件相关性。它还可以满足 future 的需求,比如一个人拥有多个角色和职位

编辑:我想我所描述的实际上是数据库模型。在 Java 中,您可以将连接表建模为多对多关系(如果您使用某些 ORM)

关于java - 处理模型中条件字段的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54614411/

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