分离实施的最佳方法

时间:2020-03-04 10:44:40

标签: 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 validateFoo(Foo foo) {
    if (foo.isBanned) {
      throw new Exception("Banned...");
    }
  }
}

第二种方法是创建一个单独的类并将其命名为FooValidity。使用这种方法,我需要将validateFoo设置为静态。

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;
  }
}

第三种方法是将FooValidity设置为@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;
  }
}

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

1 个答案:

答案 0 :(得分:0)

它们都是正确的,让我仔细看看:

  1. 如果您不会在其他任何地方使用验证
  2. 如果“验证”是一项简单的操作,并将在多个地方使用
  3. 如果验证很复杂,则需要Spring功能(注入其他bean,具有多个实现...),并在多个地方使用
相关问题