我有一种情况,我需要扩展某些行为,但我不知道如何正确设计它。用户可以查看所有报告的列表。报告现在是简单的 POJO
class Report {
...
}
有一组可以在给定报告上调用的操作。现在有一个要求,对于某些报告,他们应该定义允许的操作。例如,您可以在 ReportOne 上运行“ActionA”和“ActionB”,在 ReportTwo 上只运行“ActionB”,在 ReportThree 上运行所有动作(如现在一样)。报告的可见性也受到限制,因此如果没有足够的权限,某些用户将无法查看给定的报告。
我正在考虑创建报告的子类,如下所示:
class ReportWithCustomActionsAllowed extends Report {
private Set<Action> allowedActions;
public Set<Actions> getAllowedActions() {
return actions;
}
....
}
class ReportWithPermission extends Report {
...
private String permissionName = "ReportA.VIEW";
public boolean canShowTo(User user) {
return user.hasPermission(permissionName);
}
}
我在这里看错了两件事:
1) 如果不创建另一个类,就不可能创建允许自定义操作的受限报告
2)让Set<Report>
我不能在不破解它的情况下限制行动/报告,instanceof
这显然是错误的。
我怎样才能在正确完成 OOP 的情况下实现这一要求?并非每个报告都应该关心权限,并且报告可以包含允许的空操作列表(这意味着任何人都无法访问操作。这并不意味着允许所有操作)。