我有一个巨大的(父)POJO,该POJO正在某些组件中使用。 POJO具有单独的字段以及嵌套的POJO。是否可以确定正在该组件中访问此POJO中的所有字段/嵌套字段?
我在考虑JUnits /方面,但不确定两者是否都能工作。我尝试浏览SF /和Google,但找不到与此相关的任何主题线程。
说下面是一个示例POJO:
public class Student {
private String name;
private Date date;
private Subject subject;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
public Subject getSubject() {
return subject;
}
public void setSubject(Subject subject) {
this.subject = subject;
}
}
它具有三个字段名称,日期和主题,但我的组件中不会使用所有这些字段。因此,我需要确定实际使用的是哪个。
编辑: 感谢Sharon指出,getter / setter受到了保护。我只是为了提问而即时生成了该类,却没有注意到问题。现在已更正。 类的初始化方式:就组件而言,将根据Json / XML数据创建对象,并且仅调用getter方法。 至于静态与运行时分析,如果可能的话,我宁愿通过静态代码分析来实现它,否则运行时对我来说就比较容易了。 至于使用Decorator模式,是否有什么需要不需要更改现有代码的东西?这就是为什么我在考虑JUnits是否可以做到这一点。
答案 0 :(得分:1)
首先,看到受保护的getter / setter方法很奇怪。在我看来,他们需要公开吗?
无论如何,我会使用Decorator design pattern。
从链接的文章中:
装饰器设计模式允许我们动态添加 对象的功能和行为,而不影响行为 同一类中其他现有对象的数量。
因此,我们装饰有色的Student应该从目标类继承。所有方法都可以记录其用法并调用super来调用目标操作。您没有说Student
如何
已初始化,但无论如何,您将需要对其进行修改以创建LogUsageStudent
public class LogUsageStudent extends Student {
protected String getName() {
// log usage of getName()
return super.getName();
}
// etc
}