Я работал над разделением кода для своих реализаций, и в итоге у меня было 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;
}
}
Какой подход является лучшим или мне действительно нужно выполнить разбиение кода следующим образом?