我正在编写一个网站的功能区/成就系统,我必须为我的系统中的每个功能区编写一些逻辑.例如,如果您是第一批注册到该网站的2,000人或者在论坛中发布了1,000个帖子后,您就可以获得一个功能区.这个想法非常类似于stackoverflow的徽章,真的.
因此,每个功能区显然都在数据库中,但它们还需要一些逻辑来确定用户何时获得功能区.
在我编写它的方式,Ribbon是一个简单的抽象类:
@Entity
@Table(name = "ribbon")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "ribbon_type")
public abstract class Ribbon
{
@Id
@Column(name = "id", nullable = false, length = 8)
private int id;
@Column(name = "title", nullable = false, length = 64)
private String title;
public Ribbon()
{
}
public abstract boolean isEarned(User user);
// ... getters/setters...
}
Run Code Online (Sandbox Code Playgroud)
您可以看到我将继承策略定义为SINGLE_TABLE(因为我必须像50条带一样编码,我不需要为其中任何一条添加额外的列).
现在,将实现一个特定的功能区,例如:
@Entity
public class First2000UsersRibbon extends Ribbon
{
@Autowired
@Transient
private UserHasRibbonDao userHasRibbonDao;
public First2000UsersRibbon()
{
super.setId(1);
super.setTitle("Between the …Run Code Online (Sandbox Code Playgroud)