Java dati di accoppiamento liberi che passano tra i componenti

1

Diciamo che ho due componenti che parlano tra loro. Il primo chiama una funzione "ottieni risultati" dalla seconda. Come dovrei restituire i risultati?

Ad esempio,

SomeObject getResults(String name);

funziona bene, ma non sono sicuro che sia il modo migliore per andare. In questo modo entrambi i componenti sembrano accoppiati al tipo SomeObject e voglio davvero evitarlo. Ma quale sarebbe un'alternativa?

Potrei restituire i risultati come List , ma questo trasferisce la responsabilità di interpretare i risultati sul primo componente.

Quindi, come dovrei farlo? Qual è il miglior approccio al design per questo tipo di problemi?

    
posta Cap Baracudas 10.12.2017 - 19:21
fonte

2 risposte

2

Non esiste il completo disaccoppiamento. Per dare un significato ai dati restituiti dalla funzione, devi interpretarlo in qualche modo, e questo significa avere una sorta di conoscenza preliminare dei dati.

Di conseguenza, dovrai valutare i compromessi:

Accoppiamento stretto usando DTO

  • Sicurezza del tipo
  • Facilità d'uso
  • Ad alte prestazioni
  • Proliferazione dei tipi di dati

Accoppiamento lento usando oggetti dinamici

  • Più facile da interscambiare, interoperare e modularizzare
  • Contratti di interfaccia più semplici
  • Prestazioni inferiori
  • Maggiore complessità

Se lo desideri, puoi fornire la massima quantità di disaccoppiamento passando tutto ciò che è codificato come testo (cioè serializzato) e decodificandolo all'estremità ricevente. Ma questo ha una grande complessità computazionale e costi, ed è quindi normalmente utilizzato solo ai confini della macchina, dove i benefici di un alto grado di disaccoppiamento superano i costi.

Ulteriori letture
Protocollo buffer

    
risposta data 11.12.2017 - 00:45
fonte
1

L'idea di un accoppiamento lento non è di rimuovere la conoscenza di altri oggetti, ma ha lo scopo di minimizzare quella conoscenza (quindi accoppiamento libero e alta coesione sono spesso discussi insieme) . Il disaccoppiamento completo di solito non viene applicato agli oggetti dominio (classi Java che contengono dati , ad esempio Studente, Automobile, Lavoro, Risultato). Il punto principale è disaccoppiare il comportamento , in modo che le diverse classi che elaborano un oggetto dominio siano indipendenti.

Un esempio: per l'oggetto dominio Student potresti implementare un software che controlla se lo studente è idoneo a laurearsi. Ciò potrebbe comportare il controllo se ha abbastanza punti di credito e se tutte le fatture per i punti di credito sono state pagate. Sebbene entrambe le condizioni si occupino di punti di credito, per quanto riguarda l'economia, controllano condizioni molto diverse. Quindi ti piacerebbe costruire questi controlli separatamente gli uni dagli altri.

Il modo per ridurre le dipendenze dagli oggetti di dominio è tramite ereditarietà . Se, ad esempio, desideri restituire tutti Student s che non hanno pagato le loro fatture, ma stai utilizzando un sistema generico che si applica anche a Professor s e Contractor s, allora li fai implementare una stessa interfaccia , per esempio %codice%. In questo modo puoi sempre restituire Student implements Payee invece di una specifica classe.

Nel tuo esempio, crea Payee implementa SomeObject e restituisci un'istanza di quello.

    
risposta data 12.12.2017 - 00:19
fonte

Leggi altre domande sui tag