Dozer jedna klasa to konwersji - refactor

0

Witam,

Mamy w projekcie mapowanie pomiędzy encjami a obiektami dto. Do konwersji wykorzystujemy dozera. Zapewne dla wygody powstała klasa, która zawiera tylko metody do mapowania z encji na dto i odwrotnie. Wygląda mniej więcej tak:

public class DozerConverter {

	Mapper mapper = new DozerBeanMapper();

	public UserDTO convert(User user) {
		return mapper.map(user, UserDTO.class);
	}

	public User convert(UserDTO userDTO) {
		return mapper.map(userDTO, User.class);
	}
} 

Potencjalny problem polega na tym, że jeśli będziemy chcieli dodać kolejny zestaw encja/dto to będziemy zmuszeni zmodyfikować powyższą klasę. Kłóci się to z zasadą open-closed.
Pytanie czy ta klasa ma w ogóle sens? Została napisana chyba tylko po to, żeby nie trzeba było podawać w argumencie metody Mapper.map() klasy obiektu docelowego.

Co polecilibyście zrobić?

  1. Usunąć
  2. Refactor
  3. Niepotrzebnie się czepiam
0

Hej. A ile masz klas DTO/Encji w projekcie? Dla każdej innej masz po prostu mappera, a dla tej jednej masz tą klasę obudowującą?

0

Dla wszystkich par encja/dto wykorzystywana jest ta pomocnicza klasa.

0

Ale w zasadzie czemu te metody nie są po prostu generyczne? o_O

0

W jaki sposób zastosowałbyś tu generici?

0

Chodziło mi o jakieś public <T,E> T convert(E input, Class<T> outputType) ale na dobrą sprawę to będzie pewnie to samo co oferuje ten DozerBeanMapper ;]

Anyway, proponuje mimo wszystko dodać swój wrapper na zasadzie:

public class DozerConverter {
    Mapper mapper = new DozerBeanMapper();

    public <T,E> T convert(E input, Class<T> outputType) {
        return mapper.map(input, outputType);
    }

    public UserDTO convert(User user) {
        return convert(user, UserDTO.class);
    }

    public User convert(UserDTO userDTO) {
        return convert(userDTO, User.class);
    }
}

I teraz z jednej strony masz w tej swojej klasie metody ułatwiające korzystanie dla tych klas User i UserDTO, ale z drugiej strony masz też metodę "ogólną" która pozwala konwertować dowolne inne typy bez potrzeby modyfikowania kodu.

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