Le mie interfacce "dal" e "fileHandler" si sovrappongono?

1

Voglio che il mio programma:

  1. legge alcune linee di input dal file CSV
  2. scrive le righe di output sul file di stringa semplice
  3. legge alcuni input dallo stesso file in (2) e confrontalo con alcuni dati calcolati

Voglio prendere in considerazione questi livelli di astrazione:

  • crea l'interfaccia Dal con le operazioni CRUD
  • implementa Dal<T1> , Dal<T2> , Dal<T3>
  • crea un'interfaccia FileHandler con read e save operazioni
  • implementa CsvFileHandler , StringFileHandler

E poi:

  • Dal<T1> implementerà read con un membro di CsvFileHandler
  • Dal<T2> implementerà read e write con un membro di StringFileHandler
  • Dal<T3> implementerà write con un membro di StringFileHandler

Va bene che Dal<T1> e Dal<T3> implementano davvero Dal solo parzialmente (non tutto CRUD). O dovrei scegliere altre astrazioni?

Sto usando guice DI e ho bisogno di differenziare Dal<T1> e Dal<T2> anche se entrambi read / write tipo String . Così ho creato una dummy di classi diverse per T1 , T2 .

Pensi che io usi troppa astrazione? FileHandler e Dal si sovrappongono?

Qualunque altro modo per differenziare l'iniezione di Guice anziché creare dummyTypes ?

    
posta user23621 17.02.2015 - 09:25
fonte

1 risposta

1

Se segui il Principio di sostituzione di Liskov non dovresti avere implementazioni che non implementano completamente un'interfaccia.

Preferisco avere due o tre interfacce diverse che indicano esattamente ciò che possono. Forse una classe alla fine implementerà più di un'interfaccia ...

L'altro vantaggio che si ottiene è che quando si dispone di interfacce specifiche non è necessario essere ulteriormente qualificati per consentire a Guice di sapere quale istanza è necessaria. Se hai ancora più di un'implementazione di un'interfaccia, puoi utilizzare l'annotazione per qualificarle. Vedi Annotazioni vincolanti

    
risposta data 28.06.2015 - 23:15
fonte

Leggi altre domande sui tag