我有一个名为 Document.java 的 POJO,它有 100 多个成员变量。有一个转换层,我在其中获取所需的数据,对其进行转换并将其存储在 Document 类中。
在转换层中,我想仅在满足特定条件(基于可用上下文)时才设置成员变量。
所以它看起来像这样:
if(shouldGetExecuted1(context.getXXX())){
document.setField1(tranformDataForField1(availableData1));
}
if(shouldGetExecuted2(context.getXXX())){
document.setField2(tranformDataForField2(availableData2));
}
我想对所有 100 多个字段执行此操作。有没有一种干净的方法可以做到这一点?
附加信息
我不想在这里使用策略,因为随着策略数量的增加,它会创建太多的类。
最佳答案
尝试使用AOP。 AspectJ允许您定义切入点(例如,一些过滤的方法集)并通过建议(在方法调用之前,控制它们的执行之后,周围):
@Aspect
class ClassName {
...
@PointCut("call(public void ClassName.*(..))") //includes all void methods of ClassName object
public void myPointCut(){}
@Around("myPointCut()")
public void myLogicMethod(ProceedingJoinPoint thisJoinPoint) {
if(shouldGetExecuted1(context.getXXX())){
thisJoinPoint.proceed()
}
}
}
这里 thisJoinPoint.proceed()
将执行拦截方法的主体。
阅读有关如何定义切入点的文档。在此示例中,相同的逻辑将应用于此类的所有 void 方法。您可以通过特殊表达式定义更准确的切入点,为每个切入点提供不同的逻辑。
关于java - 设计 - 在执行每个方法之前检查条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31930321/