Kiedy static a kiedy Bean?

0

Proszę bardzo, zrobiłem sobie walidatory do Nipu, peselu, VIN, kodu pocztowego. Żeby było sprytnie odziałem je w 1 klasie w metodach statycznych:

final class PeselValidator implements Predicate<String> {

	@Override
	public boolean test(String value) {
		return true; //TODO
	}

}

.

final class NipValidator implements Predicate<String> {
	
	@Override
	public final boolean test(String nip) {
		//TODO
		return nip.length() > 0  ;
	}
}

.

public class ValidatorHolder {

	public final static Predicate<String> POSTAL_CODE = postalCode -> {
		return postalCode.length() == 6 && postalCode.matches("\\d+{2}-\\d+{3}");
	};
	
	public final static Predicate<String> NIP = new NipValidator();
	
	public final static Predicate<String> VIN = new VinValidator();
	
	public final static Predicate<String> PESEL = new PeselValidator();
}

.
użycie:

ValidatorHolder.NIP.test(myValueToValidate);

i proszę bardzo zwalidowaliśmy se nip. A jak chcemy pesel to proszę bardzo:

ValidatorHolder.PESEL.test(myValueToValidate);

czy to jest dobrze zrobione? Czy nie powinno być to zrobione jako Springowe beany?
Kiedy stosować beany zamiast metod statycznych?

1

Polecam zapoznanie się ze specyfikacją walidacji beanów JSR380 javax.validation.
Tu jest przykładowy tutorial: https://www.baeldung.com/javax-validation, https://www.baeldung.com/spring-mvc-custom-validator

1

Jak dla mnie, jeśli nie używasz Springa, to zaprzęganie go tylko do walidacji jest średnim pomysłem i pakowanie się w sytuacje 'jak rozwiązać problemy springowe, których bym nie miał, jeśli bym nie dodał springa' ;) Jak używasz Springa na bogato, to czemu iść w poprzek i nie robić walidacji w sposób springowy, tj. walidatory jako beany i wstrzykiwane tam gdzie są potrzebne?

Nie podoba mi się pakowanie wszystkiego do jednej klasy ValidatorHolder, bo na oko, to taki worek bez dna na różnego typu walidatory i wydaje mi się, że z czasem będzie puchnąć.

Przeważnie walidację masz w więcej niż jednym miejscu (np. proste walidacje typu format dla wprowadzanych danych - tu JSR380 wydaje mi się dobrym kandydatem - główny argument - element standardu) oraz walidacje "blisko" obiektu biznesowego (np. regułka typu "nie możesz jednocześnie założyć miecza oburęcznego i tarczy"). Jak masz różne moduły i każda sięga do jednego ValidatorHoldera, to od razu masz jakąś wspólną zależność.

Tyle ode mnie, chętnie poznam opinie innych :-)

1 użytkowników online, w tym zalogowanych: 0, gości: 1