Java 分离实现的最佳方法

Java 分离实现的最佳方法,java,spring-boot,Java,Spring Boot,我一直在为我的实现进行代码拆分,最终我有3种不同的方法来完成。我不确定Java中是否需要代码拆分,但我打算这样做 第一种方法是将函数放在服务类中 @Component("fooService") public final class FooService { public Foo getFoo(UUID id) { Foo foo = findById(id); validateFoo(f); return foo; } private void val

我一直在为我的实现进行代码拆分,最终我有3种不同的方法来完成。我不确定Java中是否需要代码拆分,但我打算这样做

第一种方法是将函数放在服务类中

@Component("fooService")
public final class FooService {
  public Foo getFoo(UUID id) {
    Foo foo = findById(id);

    validateFoo(f);

    return foo;
  }

  private void validateFoo(Foo foo) {
    if (foo.isBanned) {
      throw new Exception("Banned...");
    }
  }
}
第二种方法是创建一个单独的类并将其命名为
foovality
。使用这种方法,我需要将
validatefo
设置为静态

public final class FooValidity {
  public static void validateFoo(Foo foo) {
    if (foo.isBanned) {
      throw new Exception("Banned...");
    }
  }
}

@Component("fooService")
public final class FooService {
  public Foo getFoo(UUID id) {
    Foo foo = findById(id);

    FooValidity.validateFoo(f);

    return foo;
  }
}
第三种方法是将
foovality
设置为
@Service()
,并惰性地调用它

@Service("fooValidity")
public final class FooValidity {
  public void validateFoo(Foo foo) {
    if (foo.isBanned) {
      throw new Exception("Banned...");
    }
  }
}

@Component("fooService")
public final class FooService {
  private final FooValidity fooValidity;

  public FooService(org.springframework.context.annotation.@Lazy FooValidity fooValidity) {
    this.fooValidity = fooValidity;
  }

  public Foo getFoo(UUID id) {
    Foo foo = findById(id);

    fooValidity.validateFoo(f);

    return foo;
  }
}

哪种方法是最好的,或者我真的需要像这样进行代码拆分?

它们都是正确的,让我看一下:

  • 如果您不在任何其他地方使用验证
  • 如果验证是一个简单的操作,将在多个位置使用
  • 如果验证很复杂,are需要Spring功能(注入其他bean,有多个实现,…),并在多个地方使用

  • “我不确定Java中是否需要代码拆分”required是一个强有力的词。如果它不会导致编译器错误,那么它就不是“必需的”@FedericoklezCulloca我也曾是一名前端开发人员,并为一个网页包项目进行了代码拆分。代码拆分可以创建多个捆绑包,这些捆绑包可以在运行时动态加载。然后我做了一些关于Java代码拆分的研究,没有找到一个好的结果。因此,我想自己做,并提出了3种不同的方法。但我真的不确定这是否有必要…谢谢。这些都是好的观点。在提出此类案例之前,我可以问自己这些问题。