这是一个相当冗长(并不过于复杂)的设计问题,所以请耐心等待.我正在尝试使用POJO和JPA实现人员/角色管理系统.我是ORM的新手,这主要是一个映射问题.
我已经将它作为POJO工作,并且对调用者级API感到满意,但现在想在Seam环境中使用JPA或Hibernate将其映射到数据库.
我的实现基于Decorator(GoF)和Person Role Object模式(Baumer/Riehle等人).所有角色都是硬编码的,并且不支持运行时添加新角色,因为它需要更改代码以扩展行为.我将使用用户组来实现安全性和权限.
有一个Person接口,其中包含角色管理方法,如addRole(),removeRole(),hasRole(),getRole(),getRoles()等.具体实现由PersonImpl类提供.
有一个抽象类Role,它还实现了Person接口(用于装饰器替换等价),以及一个扩展它的RoleImpl类.Role类包含对person实例的引用,使用它来为person接口上的任何方法/属性调用提供服务,这意味着Role的所有子类都可以处理Person接口.角色构造函数将person对象作为参数.
这些是接口/类:
public interface Person {
public String getFirstName();
public void setFirstName(String firstName);
.
.
.
public boolean isEnabled();
public void setEnabled(boolean enabled);
public Set<Role> getRoles();
public Role addRole(Class<? extends Role> roleType);
public void removeRole(Class<? extends Role> roleType);
public boolean hasRole(Class<? extends Role> roleType);
public Role getRole(Class<? extends Role> roleType);
public enum Gender {MALE, FEMALE, UNKNOWN};
}
public class PersonImpl implements Person {
.
.
.
}
public abstract class Role implements Person { …
Run Code Online (Sandbox Code Playgroud)