Modello di oggetti del dominio: query per id vs oggetto

3

Supponiamo di avere due semplici classi di modelli: Product e Brand

È ovvio che ho un metodo di query in Product come questo

Product product = Product.findById(123);

Che cosa succede se voglio interrogare i prodotti per marchio?

ArrayList<Product> products = Product.findByBrand(234);
// or
ArrayList<Product> products = Product.findByBrand(new Brand("ABC", 234));

Supponiamo che 234 sia l'ID del marchio nel database.

Immagino che il 2 ° modo di scrivere renda il metodo più facile da testare, dato che posso prendere in giro la classe Brand nel mio test di unità, giusto?

    
posta Yoga 22.05.2015 - 08:59
fonte

2 risposte

4

Per il test di unità del metodo findByBrand , non vi è alcuna reale differenza tra il passaggio in un oggetto Brand o solo un ID.

La differenza è più rilevante per il codice che chiama findByBrand .
Nella maggior parte dei casi, quel codice dovrebbe già occuparsi di oggetti Brand , quindi passarlo come argomento a findByBrand ha più senso.

L'unica ragione per cui findByBrand accettare un ID semplice sarebbe se (quasi) tutti i chiamanti attuali e previsti stanno già lavorando naturalmente con gli ID Brand senza avere gli oggetti Brand corrispondenti.

    
risposta data 22.05.2015 - 13:32
fonte
0

È più che un semplice oggetto Brand o meno.

Innanzitutto, presumo che il tuo Product sia realmente un Oggetto di accesso ai dati , e non un semplice Java Bean / DTO / POJO .

La domanda reale da chiedere è, per quanto tempo sarà valida questa affermazione?

Assume 234 is the brand id of the brand in database.

I valori semplici int diventano long in futuro, per cui è necessario modificare tutti i metodi che interagiscono con un "brand ID" per accettare un int in long ? Diventerà un alfanumerico, che potrebbe essere possibile rimanere come int (plausibilmente - se stiamo parlando di esadecimali più piccoli di Integer.MAX_VALUE , e ora c'è un metodo / utilità di conversione da qualche parte per trasformare "AA" in 170 ) o l'intera parata cambiante tipo entrerà nella fase String ?

L'unico vantaggio sottile che posso vedere per l'accettazione di un int è che non devi prestare particolare attenzione a un input null . Bene, c'è ancora la strana possibilità che un null venga espressamente castato come Integer e poi viene inserito automaticamente, ma probabilmente hai altre preoccupazioni allora.

    
risposta data 23.05.2015 - 07:30
fonte

Leggi altre domande sui tag