Dovrei chiamare questo DTO o qualcos'altro?

0

In un'applicazione Java / Spring MVC / Hibernate ho oggetti modello che contengono riferimenti ad altri oggetti modello in cui il database ha chiavi esterne. Ad esempio, potrei avere:

@Entity
@Table(name="branches")
public class Branch {
    @Id
    @GeneratedValue
    @Column
    private int id;

    @Column
    private String name;

    // ...
}
@Entity
@Table(name="clients")
public class Client {
    @Id
    @GeneratedValue
    @Column
    private int id;

    @Column
    private String name;

    @ManyToOne
    @JoinColumn(name="branch_id")
    private Branch branch;
    // ...
}

Spring MVC non può gestire facilmente i parametri di richiesta di binding a un oggetto che ha riferimenti che devono essere estratti dal database, ad esempio se un modulo produce campi:

name=John Smith
branch=43

Spring MVC non ha un modo semplice per convertire quel 43 in un oggetto Branch pieno. Per aggirare questo, creo una nuova classe che contiene i dati richiesti dai moduli che gestiscono ogni tipo (in genere questo finisce con l'essere tutti i campi della classe originale, ma a volte uno o due campi che vengono utilizzati solo internamente o non sono vengono cancellati dai moduli) tranne che i riferimenti ad altri oggetti del modello sono tradotti in chiavi che possono essere consultate manualmente. Quindi aggiungo i metodi per convertire in o dalla classe del modello. Ad esempio:

public class ClientWithKeys {
    private int id;
    private String name;
    private int branch;
    // ...
    public Client toClient (IntFunction<Branch> branchSource) { ... }
    public static ClientWithKeys fromClient (Client c) { ... }
 }

Il codice del controller è quindi semplicemente:

 @RequestMethod("/whatever")
 public ModelAndView frobnicateClient (@Valid ClientWithKeys clientWithKeys) {
     Client client = clientWithKeys.toClient (clientRepository::getClientById);
     ...
 }

Ho chiamato questi oggetti Data Transfer Objects, ma la mia attenzione è stata recentemente richiamata sul fatto che il riferimento canonico per quel nome descrive uno scopo diverso per il modello rispetto allo scopo per il quale ho utilizzato questi oggetti. L'uso effettivo del nome è abbastanza ampio da coprire quello che sto facendo, o c'è un nome migliore che potrei usare per descrivere questo?

    
posta Jules 03.07.2017 - 17:21
fonte

1 risposta

2

Il termine che penso sarebbe più applicabile sarebbe visualizza modello . È un modello specifico per la vista separato dal modello di dominio.

    
risposta data 04.07.2017 - 01:12
fonte

Leggi altre domande sui tag