Wiele osób nie lubi tworzyć własnych specyficznych dla domeny typów, które nie niosą ze sobą wartości biznesowej. Przykładowo po co tworzyć własny typ reprezentujący wiek skoro można oprzeć się o starego dobrego inta?

Z moich obserwacji wynika, że przyczyna tego zachowania leży w niechęci do pisania jakiegokolwiek dodatkowego kodu, czyli zazwyczaj testów. Zamiast tego dzielnie napieramy na dodatkowy kod przy okazji różnorodnych funkcjonalności biznesowych. Wiek to jest zresztą piękny przykład, bo za każdym razem nasze testy będą jakoś zahaczać o wartości ujemne, nulle itp. Czy nie lepiej jest napisać to raz, a porządnie?

Listing 1. Przykładowa klasa Age

class Age {

	@Min(0)
	@Max(Integer.MAX_VALUE)
	@NotNull
	private Integer value;

	public Age() {
	}

	public Age(Integer value) {
		this.value = value;
	}

	public int getValue() {
		return value;
	}

	public void setValue(int value) {
		this.value = value;
	}
// hash, equals, toString co tam trzeba
}

Do tego dopisac konwertery na potrzeby Hibernate-a i gotowe. czy to tak dużo roboty?

Dziwi mnie ta niechęć do wzorca Value Object i jednej z Ekstremalna obiektowość w praktyce – część 3 – Opakowuj wszystkie prymitywy i Stringi. Nie dużo z tym roboty, a życie łatwiejsze.