L'utilità delle classi java util per chiamare un servizio (per creare un modello) anziché utilizzare l'impl di quel servizio

0

Esempio

Spiegherò il paradigma di seguito, ma sto specificatamente parlando del codice di Service Builder di Liferay per chiunque conosca tale piattaforma.

Fondamentalmente in Liferay puoi definire un modello e le sue proprietà in un file xml. Diciamo che abbiamo un'entità Student con le seguenti proprietà: studentId, nome, età, grado, genere. Da quel modello Liferay costruisce le seguenti classi

  • Studente (interfaccia per il modello)
  • StudentImpl
  • StudentService (interfaccia per il servizio)
  • StudentServiceImpl
  • StudentServiceUtil

Nella classe StudentSericeImpl puoi scrivere l'implementazione per tutti i metodi che vuoi nella tua classe StudentService. Supponiamo di avere la seguente interfaccia:

interface StudentService {
   public Student createStudent(String name, int age, double grade, boolean gender);
   public Student getStudent(long studentId);
}

Quindi lo StudentLocalServiceImpl implementerebbe tali metodi. Tuttavia nel tuo codice non avresti mai inizializzato il tuo servizio o creato un modello come questo.

StudentService studentService = new StudentServiceImpl() 
Student chris = studentService.createStudent("chris", 27, 36.23, false);

Invece dovresti usare la classe util.

Student chris = StudentServiceUtil.createStudent("chris", 27, 36.23, false);

Puoi quindi anche implementare la classe StudentService in pochi altri modi. Ad esempio, puoi creare un StudentServiceSoap per l'utilizzo remoto di un servizio SOAP.

Pensi che questa classe util sia utile, e se sì per quali ragioni?

    
posta Chris Maggiulli 24.09.2017 - 23:11
fonte

1 risposta

1

No, non penso che questo sia un buon design.

Gli oggetti che devono usare StudentService dovrebbero averne iniettato uno. Non dovrebbero usare essi stessi un'interfaccia in stile singleton come StudentServiceUtil . Ecco alcuni motivi per cui:

  • Se stai utilizzando questo StudentServiceUtil , come puoi configurare due oggetti per utilizzare diverse istanze di StudentService ?
  • Come puoi testare unitamente il codice che utilizza StudentServiceUtil ? È meglio iniettare l'interfaccia, StudentService che puoi prendere in giro direttamente.
  • La dipendenza su StudentService verrà nascosta se utilizzi StudentServiceUtil . Non sarà evidente che una classe può cambiare o recuperare da StudentService senza controllo dell'implementazione.
risposta data 25.09.2017 - 01:33
fonte

Leggi altre domande sui tag