Cześć,
Chciałem się wdrożyć w zastosowanie wzorca DTO w projekcie springowym, jednak poza suchymi definicjami co to DTO i kiedy używamy nie mogę znaleźć ani jednego kompletnego projektu do wglądu jak to jest ze sobą powiązane i zgrywa się w całość. Może ktoś kojarzy taki projekt na GitHubie albo coś?
Jedyne co udało mi się w miarę namierzyć, ale może ktoś macie coś bardziej rozbudowanego?
https://github.com/krams915/spring-neo4j-tutorial/tree/master/spring-neo4j-tutorial
- Rejestracja:ponad 9 lat
- Ostatnio:ponad 7 lat
- Postów:53

- Rejestracja:ponad 12 lat
- Ostatnio:około 9 lat
- Lokalizacja:Bieszczady
@Tancerd jemu chodzi o przykładowy mechanizm jak to zrobić - a nie o filozofię.
możesz np:
/*
* Convert database object to DTO or DTO to database object
* database object means entity(so class that are marked as @Entity)
*
* F-from
* T-to
*/
@FunctionalInterface
public interface BaseConverter<F,T> {
public T convert(F from);
default public Collection<T> convertAll(Collection<F> fElements){
Collection<T> convertedElement =
fElements.stream()
.map(element -> convert(element))
.collect(Collectors.toList());
return convertedElement;
}
}
Mieć interface czegoś co będzie konwertować Twoje obiekty (Model -> DTO)
i potem implementować i generować beany
@Component
public class DefaultUserConverter implements BaseConverter<User, UserDTO> {
@Override
public UserDTO convert(User from) {
UserDTO user = new UserDTO();
user.setUsername(from.getUsername());
user.setPassword(from.getPassword());
user.setEnabled(from.getEnabled());
return user;
}
}
a gdzieś w kodzie, np w serwisie:
@Autowired
private BaseConverter<User, UserDTO> userConverter;
- Rejestracja:ponad 10 lat
- Ostatnio:5 miesięcy
- Lokalizacja:Warszawa
- Postów:3573
To zależy od potrzeb
Zobacz kod źródłowy do tej ksiażki
https://www.apress.com/9781430226321
- ten główny projekt (nie na Grails czy Roo), jest tam m.in. mapowanie na/z DTO Dozerem. Ma to już z parę lat, sam tego nie odpalałem przy czytaniu, ale jakaś idea tam jest pokazana.
- Rejestracja:ponad 8 lat
- Ostatnio:ponad 8 lat
- Postów:2
Może mi ktoś wyjaśnić po co się robi konwersje DTO? Nie mogę znaleźć żadnego prostego w zrozumieniu artykułu na ten temat.
Patrząc na funkcję convert nasuwa mi się pytanie po co tworzyć obiekt User na podstawie obiektu User? Funkcji convertAll też nie rozumiem niestety.
Bardzo proszę o pomoc w zrozumieniu tematu.

- Rejestracja:około 21 lat
- Ostatnio:prawie 3 lata
- Lokalizacja:Space: the final frontier
- Postów:26433
@UserJava bo na przykład chcesz z tych obiektów wygenerować jsona i wysłać do klienta? I nie chcesz umieszczać tam wielu zbędnych informacji które miałeś w encji (typu ID) albo w obiekcie domenowym na którym operowałeś? Zwykle DTO to jest tylko prosta struktura danych, podczas gdy obiekty domenowe na których pracujesz w aplikacji zwykle są dużo bardziej złożone.
- Rejestracja:około 10 lat
- Ostatnio:ponad 7 lat
- Postów:12
Jak utworzyć klasę CustomerDTO na podstawie klas Customer oraz Phone?
Klasa Customer:
@Entity
@Table(name = "customers")
public class Customer {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "tax_number", nullable = false, columnDefinition = "BIGINT(10)")
private Long taxNumber;
@Column(name = "company_name", nullable = false, columnDefinition = "VARCHAR(300)")
private String companyName;
@Column(name = "street", nullable = false, columnDefinition = "VARCHAR(80)")
private String street;
@Column(name = "building_number", nullable = false, columnDefinition = "VARCHAR(10)")
private String buildingNumber;
@Column(name = "office_number", columnDefinition = "VARCHAR(10)")
private String officeNumber;
@OneToMany(mappedBy = "customer")
private List<Phone> phoneNumbers;
@Column(name = "email", columnDefinition = "VARCHAR(80)")
private String email;
@Column(name = "website", columnDefinition = "VARCHAR(80)")
private String website;
}
Klasa Phone:
@Entity
@Table(name = "phones")
public class Phone {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "phone_number", nullable = false, columnDefinition = "CHAR(10)")
private String phoneNumber;
@Column(name = "number_desc", columnDefinition = "VARCHAR(160)")
private String phoneNumberDescription;
@ManyToOne
@JoinColumn(name = "customer_id")
private Customer customer;
}
Chcę utworzyć z tych dwóch klas klasę CustomerDTO aby odpowiadając JSONem na żądanie GET zawierał on listę Customers wraz z telefonami.
Jak dokładnie powinna wyglądać taka klasa DTO?