L'uso (o abuso) di Java 8, funzione Mapper

6

Recentemente, abbiamo iniziato a migrare un'applicazione di primavera a java 8. L'applicazione è divisa in 3 livelli, controller di riposo, servizio e il livello del repository. Il nostro 'architetto' ha proposto che il nostro livello di servizio accetti sempre una funzione di mappatura, ad es.

public <T> Optional<T> getCompany(int companyId, Mapper<S,T> mapper) 

La sua ragione è la flessibilità: consentire alla classe chiamante di formattare il risultato in qualsiasi modo o desiderio.

Non sono d'accordo con la proposta, perché penso che sia solo un abuso della funzionalità. Allo stesso tempo, non voglio dare l'impressione che non sono disposto ad adattare le nuove funzionalità / concetti se realmente apportano benefici.

La mia domanda è, la proposta sopra è valida o solo un abuso di una funzionalità di java 8?

    
posta HelloWorld 27.03.2017 - 07:31
fonte

1 risposta

13

Se in realtà intendi qualcosa come

public <S super Company, T> Optional<T> getCompany(int companyId, Mapper<S,T> mapper)

e l'unica funzione del mappatore è di trasformare il risultato finale dell'implementazione getCompany, questo mi sembra molto inutile. Potresti anche avere

public Optional<Company> getCompany(int companyId)

e se davvero hai bisogno di trasformare il risultato, una chiamata sembrerebbe getCompany(someid).map(mapper) invece di getCompany(someid, mapper) nella tua progettazione API. Ciò trasferisce l'intenzione molto meglio e rimuove la confusione spesso inutile per passare Function.identity() come mappatore se non si desidera trasformare effettivamente il risultato.

    
risposta data 29.03.2017 - 11:25
fonte

Leggi altre domande sui tag