Implementazione forzata di un'interfaccia per utilizzare una funzione, per abilitare funzionalità trasparenti per l'utente

1

Sono il progettista di un'interfaccia IModel , che verrà utilizzata dall'implementatore di un controller (MVC). L'interfaccia contiene funcA() . Un altro programmatore deve implementare una classe specifica per IModel .

Voglio dirigere l'implementazione di funcA() per utilizzare un'altra funzione, funcB() . Ciò impone che alcune funzionalità della classe del modello specifico siano trasparenti. Ad esempio, l'interfaccia contiene openFile() , ma la classe specifica deve contenere la funzionalità trasparente di crittografia del file.

Cosa c'è di meglio?

  1. Definizione di due interfacce: I1 per il lato controller e un'altra, I2, per coloro che implementano la classe del modello, dove I2 estende I1.
  2. La mia implementazione di una classe astratta come AbsModel che implementa Imodel e contiene funzioni astratte.
posta Ofek Israel 11.08.2016 - 18:02
fonte

1 risposta

1

In modo astratto: non puoi controllare come qualcuno implementa la tua interfaccia.
Tutto quello che puoi fare è costringerli ad avere un metodo che corrisponda alla tua interfaccia, in modo che tu possa usare la loro classe - qualunque cosa faccia - al posto di qualsiasi altra classe che implementa la tua interfaccia.

Se vuoi assicurarti che la classe abbia un metodo per decodificare il file, qualunque sia il file, devi aggiungerlo alla tua interfaccia, ma corri il rischio che mentre la funzione deve essere lì, non 't avere per fare effettivamente qualsiasi cosa (esempio classico: il serializzatore binario del DataSet che avvolge semplicemente l'output dal serializzatore di testo, non modificato , in un array Byte!) o potrebbe fare qualcosa di completamente diverso.

Ci sono molti, molti schemi di crittografia - quale dovrebbe essere il tuo Implementer?

Penso che dovresti aggiungere metodi all'interfaccia per crittografare / decifrare i tuoi file, ma anche una classe concreta aggiuntiva che implementa questa capacità; usando questo metodo di Iniezione delle Dipendenze, qualsiasi Implementatore della tua Interfaccia può istanziare la tua classe di decrittografia e passarla al loro proprio metodo.

    
risposta data 12.08.2016 - 13:28
fonte

Leggi altre domande sui tag