java - 设计 - 在执行每个方法之前检查条件

标签 java oop design-patterns

我有一个名为 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/

相关文章:

java - 如何覆盖内部使用类的方法?

java - Comparator.nullsLast 不会避免 NullPointerException

c++ - 从另一个类 C++ 访问对象

PHP类设计问题

c# - C# 中的单例

html - 如何将 CSS 定位与 CSS 样式分开?

java - 使用 Collections.sort 对特定对象的 ArrayList 进行排序

java - 在 ROOT 下部署 webapp - index.html 不显示

oop - 得墨meter耳定律-数据对象

c# - 通过 C# 和 WinForms 开发自定义 GUI 设计器的架构和模式