Лучший способ отделить реализацию - PullRequest
0 голосов
/ 04 марта 2020

Я работал над разделением кода для своих реализаций, и в итоге у меня было 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 как stati c.

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 голосов
/ 04 марта 2020

Они все верны, позвольте мне go над ними:

  1. Если вы не будете использовать проверку в любом другом месте
  2. Если проверка является простой операцией и будет использоваться в нескольких местах
  3. Если проверка является сложной, требуются возможности Spring (внедрение других bean-компонентов, имеет несколько реализаций, ...) и используется в нескольких местах
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...