2010-01-22 14 views
5

Recentemente ho trovato questo modello (?) Nel nostro codice e mi chiedevo come sarebbe utile, se non del tutto. Abbiamo un'applicazione Spring e un front-end Flex con BlazeDS. E 'stato deciso che usiamo sulle nostre interfacce DTOs, in questo modo:DTO e interfacce

Java


public interface ISomeDTO { 
     Integer setId(); 
     void getId(Integer i); 
} 

public class SomeDTO implements ISomeDTO 
{ 
.. 
} 

 

Actionscript


public interface ISomeDTO { 
     var id:Integer; 
} 

public class SomeDTO implements ISomeDTO 
{ 
.. 
} 

 

Cosa un'interfaccia su un DTO si guadagna? Questi sono oggetti leggeri con una logica assolutamente zero. Le DTO hanno senso, le interfacce hanno senso, ma non insieme.

risposta

3

Non vedo perché interfacce e DTO non funzionerebbero insieme.

Considera una fabbrica/assemblatore che crea oggetti di dominio da DTO. È possibile configurare la fabbrica con strategie in modo che sia in grado di creare implementazioni specifiche di un oggetto dominio in base al tipo di DTO fornito. Il DTO sarebbe idealmente digitato su un'interfaccia qui. (Funziona anche nella direzione opposta).

Non sto dicendo che dovresti mettere ogni DTO dietro un'interfaccia, ma proprio come con gli oggetti di dominio, ci saranno certamente casi in cui è utile farlo.

+2

Lo fanno nel tuo caso e posso capire perché sarebbe utile. Questo è standard nella nostra applicazione senza una ragione apparente (almeno per me). Il mio pensiero è di usare un'interfaccia quando ne hai bisogno, non solo perché. – unscene

3

In un ambiente basato sulle transazioni, gli DTO vengono utilizzati per suddividere le entità del database dalla sessione db sottostante.

Queste sessioni non sono normalmente disponibili e la maggior parte delle entità è costituita da proxy che caricano pigramente le raccolte dei membri. Quindi, se si dovesse accedere a una proprietà della raccolta su un'entità con proxy, il proxy carica la raccolta a questo punto nel tempo, se esiste una transazione di database o meno. Pertanto, un accesso di un membro di entità potrebbe generare un errore quando non vi è alcuna transazione attiva.

Esattamente ciò accade quando si inoltrano le entità alla vista, che tenta di accedere a un membro. Poiché la gestione delle transazioni è normalmente definita nel livello di servizio, non vi è alcuna transazione attiva nella vista/nel controller.

a circumnavigare questo problema ci sono diversi approcci:

  • mantenere la sessione aperta attraverso per esempio un meccanismo di filtro (OpenSessionInViewFilter di primavera), anche se a rigor di termini si tratta di un anti-modello
  • lasciate che i vostri DAO restituiscono un trasferimento di dati oggetti contenenti i membri necessari già inizializzato

speranza che questo ha aiutato.

+1

Certo, capisco quei punti. Ma perché un'interfaccia su un DTO non ha senso per me? L'uso di DTO non è poco familiare solo l'inclusione di un'interfaccia qui. – unscene

+0

oh sry ha completamente letto male le domande. tardi e tutto Non capisco perché uno usi un'interfaccia qui, non ha senso per me:/ – fasseg

+0

Almeno io non sono l'unico: P Grazie per questa risposta. Ben fatto. – unscene