Crea una singola classe per mappare oggetti diversi su un oggetto di destinazione?

4

Ho un servizio (S) che riceve un oggetto di tipo 's', questo servizio sarà chiamato da più classi (forse 6) e ogni classe ha il proprio oggetto a, b, c, ecc. con le informazioni necessario per riempire gli oggetti ". Non c'è una grande logica quando si impostano i valori di "s", solo alcune chiamate s.setPhone(a.getPhone()) .

Sarebbe una buona pratica creare una singola classe con un metodo per ogni oggetto a, b, c e tutti restituiscono un oggetto di tipo 's'? In questo modo tutto sarebbe in un singolo file che verrebbe chiamato dalle classi che useranno il nuovo servizio per creare l'oggetto ".

    
posta joe 06.08.2018 - 10:11
fonte

3 risposte

4

Questa non sembra una buona idea:

  • la tua singola "classe di conversione" dipenderebbe da tutte le classi A, B, C, che potrebbero potenzialmente aver bisogno di essere convertite in s .
  • ovunque invochi il tuo servizio, avresti quindi bisogno della tua classe di conversione, e quindi hai una dipendenza da molte altre classi di cui potresti non aver bisogno.
  • quindi alla fine avresti un accoppiamento molto stretto, che non è desiderato: ogni volta che cambierai una delle classi A, B, C, potrebbe essere necessario un cambiamento nella tua classe di conversione. Lo stesso, ogni volta che crei una nuova classe da convertire in s.

Conserva la segregazione dell'interfaccia e responsabilità singola in mente.

Preferirei proporre di creare un'interfaccia astratta con un singolo metodo di conversione e fare in modo che le classi A, B, C implementino questa interfaccia.

    
risposta data 06.08.2018 - 10:34
fonte
1

Crea semplicemente un'istanza di s in ciascuna classe ( a , b , c , ...) di conseguenza. Non aggiungere un nuovo livello di astrazione che è inutile.

Esempio (pseudo codice):

class A
{
    S.someService(new s(a.getPhone(), a.getAddress(), "m"));
}
class B
{
    S.someService(new s(b.getPhone(), "no-address", b.getSex()));
}
class C
{
    S.someService(new s("000-000-000", c.getAddress(), c.getSex()));
}
    
risposta data 06.08.2018 - 10:42
fonte
0

Ha senso avere un unico luogo in cui è costruito l'oggetto della tua classe. Rende molto più facile ragionare sul tuo codice e seguire un flusso di un oggetto attraverso il tuo codice.

Per semplici strutture di dati, questo può essere semplicemente il suo costruttore, ma nel tuo caso, ci sono un sacco di logica e altri oggetti coinvolti. Prendi in considerazione la possibilità di esaminare modelli di costruzione come modello Builder .

    
risposta data 06.08.2018 - 10:27
fonte

Leggi altre domande sui tag