Gettatori con conversione dei dati in VO Java [chiuso]

-1

Sto lavorando su un'applicazione Spring standard in cui il livello DAO restituisce entità al livello di servizio e il livello di servizio restituisce VO ad altri servizi e controller.

In un certo scenario, abbiamo un VO che assomiglia a questo:

public class MyContainerVO{
    private Integer containerId;
    private String containerName;
    private List<ContainerChild> childList;

    //usual setters and setters

    public Map<String,String> getChildMap(){
        //creates a K,V map from the child list
        //with the key being child.getName() and value being child.getId()
    }
}

Sono confuso se questo metodo getChildMap() debba essere in MyContainerVO o debba essere spostato in una classe di utilità. So che non ci dovrebbe essere alcuna logica di business nel VO, ma a mio parere il metodo getChildMap() restituisce solo i dati contenuti in MyContainerVO in un formato diverso e quindi non si qualifica come logica aziendale.

Non sono riuscito a trovare alcuna risposta in SO o ai programmatori che si occupano di tale scenario; la maggior parte riguarda la logica di business in VO che colpiscono altre classi creando un accoppiamento ravvicinato che è una cattiva pratica.

Suggerire cortesemente quale sia l'approccio migliore in questo scenario, o per favore indicare alcuni link che spiegano questo in dettaglio.

    
posta Jit B 22.05.2015 - 12:44
fonte

2 risposte

0

A prima vista penso che dovrebbe rimanere nell'oggetto valore a causa dei principi di coesione e incapsulamento - l'implementazione del metodo getChildMap () è intimamente connessa all'implementazione dell'oggetto MyContainerVO, quindi dovrebbe rimanere all'interno dell'oggetto senza necessariamente esporre i dettagli dell'implementazione (childList).

Il problema qui è che non è molto chiaro cosa sia MyContainerVO e come viene utilizzato. Ad esempio, se List childList è comunemente usato al di fuori di MyContainerVO e spesso abbiamo bisogno di ottenere la sua childmap, potremmo creare un caso per creare un metodo Utility per la conversione da mappare e usarlo ovunque per essere coerente ... (o forse creare Value Object solo per questo childList che conterrebbe questo metodo).

    
risposta data 24.05.2015 - 14:16
fonte
0

Poiché il campo childList è privato , un metodo deve essere in MyContainerVO da qualche parte.

Tuttavia, se la funzionalità per convertire una raccolta di ContainerChilds in una mappa, basata su varie chiavi, è un'utilità utile per scopi generici, vorrei renderla un metodo statico di ContainerChild . per es.

public static Map<String,String> nameIdMap(Collection<ContainerChild> c);
public static Map<String,String> nameFooMap(Collection<ContainerChild> c);

Poiché questa utility è un metodo di ContainerChild , conosce i campi di ContainerChild . Ovviamente, se questo elenco di funzioni diventasse estremamente grande, potresti passare le chiavi come parametri, usare nuove chiusure Java 8 con le corde, qualche schema, ecc ...

Quindi, il tuo codice effettivo in MyContainerVO delega tutta la logica all'utilità.

 public Map<String,String> getChildMap(){
   return ContainerChild.nameIdMap(this.childList);
 }
    
risposta data 23.07.2015 - 17:21
fonte

Leggi altre domande sui tag