Esiste un nome standard e formale per un oggetto o una classe che si comporta come se fosse un determinato oggetto?

7

Ho un'app in Django che si aspetta di ottenere un record con i campi email, first_name e last_name.

Tuttavia, a volte voglio essere in grado di inviarlo qualcosa che in realtà non è un record ma si comporta come uno (nel senso che ha i campi necessari come attributi), in questo modo:

class FakeRecord(object):
    def __init__(self, email, first_name=None, last_name=None):
        self.email = email
        self.first_name = first_name
        self.last_name = last_name

Mi chiedo se esiste un nome standard per questo tipo di oggetto o se FakeRecord funziona come nome per questa classe.

Più in generale, esiste un nome per una classe che si difende o si comporta in modo simile a un'altra classe? Esiste un modello standard di implementazione / design?

Ulteriori chiarimenti

Ai fini della mia app, in pratica ho una funzione di utilità che invia un'email a un destinatario. Il destinatario può essere qualsiasi record Django purché abbia un indirizzo email, un nome e un cognome.

Tuttavia, a volte l'app invia un invio una tantum a un determinato indirizzo e-mail che non ha un record. In questi casi, creo semplicemente un FakeRecord con l'indirizzo e-mail (e il nome / cognome se disponibile), e lo mando invece.

Poiché la funzione di utilità stessa non fa nulla con il record diverso dal recupero degli attributi, nessuna delle altre funzionalità di db di un oggetto record di Django è necessaria.

    
posta Jordan Reiter 19.10.2011 - 21:13
fonte

2 risposte

12

Sembra sicuramente un Mock.

Anche se spesso usato per i test, è anche ragionevole in un linguaggio tipizzato da Duck per deridere le altre definizioni di classe.

Hai due classi che sono entrambe implementazioni di un'interfaccia comune. Questo è il polimorfismo in azione. Non c'è molto del nome "standard formale" perché è solo programmazione OO.

In Python, poiché non esiste un requisito formale per una classe di interfaccia separata, queste sono solo classi polimorfiche.

Potresti chiamarli "Polymorphs" o "Implementazioni alternative".

    
risposta data 19.10.2011 - 21:18
fonte
2

Secondo Martin Fowler, il falso è abbastanza preciso:

Fake objects actually have working implementations, but usually take some shortcut which makes them not suitable for production (an in memory database is a good example).

link

    
risposta data 19.10.2011 - 21:45
fonte

Leggi altre domande sui tag