¿Existe un nombre formal estándar para un objeto o clase que se comporte como si fuera un objeto dado?

7

Tengo una aplicación en Django que espera obtener un registro con los campos email, first_name y last_name.

Sin embargo, a veces quiero poder enviar algo que no sea realmente un registro pero se comporte como uno (en el sentido de que tiene los campos necesarios como atributos), como por ejemplo:

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

Me pregunto si hay un nombre estándar para este tipo de objeto o si FakeRecord funciona como el nombre para esta clase.

Más generalmente, ¿existe un nombre para una clase que represente o se comporte de manera similar a otra clase? ¿Hay un patrón de implementación / diseño estándar?

Más aclaraciones

Para los fines de mi aplicación, básicamente tengo una función de utilidad que envía un correo electrónico a un destinatario. El destinatario puede ser cualquier registro de Django siempre que tenga una dirección de correo electrónico, un nombre y un apellido.

Sin embargo, a veces la aplicación envía un correo único a una dirección de correo electrónico determinada que no tiene un registro. En esos casos, simplemente creo un FakeRecord con la dirección de correo electrónico (y el nombre / apellido si está disponible), y lo envío en su lugar.

Como la función de utilidad en sí misma no hace nada con el registro que no sea recuperar los atributos, no se necesita ninguna otra funcionalidad de db de un objeto de registro de Django.

    
pregunta Jordan Reiter 19.10.2011 - 21:13

2 respuestas

12

Seguro que parece un simulacro.

Aunque a menudo se usa para pruebas, también es sensato en un lenguaje de tipo pato para burlarse de otras definiciones de clase.

Tienes dos clases que son ambas implementaciones de una interfaz común. Esto es polimorfismo en acción. No hay mucho de un nombre "formal formal" porque es solo programación OO.

En Python, debido a que no hay un requisito formal para una clase de interfaz separada, estas son solo clases polimórficas.

Puedes llamarlos "Polimorfos" o "Implementaciones alternativas".

    
respondido por el S.Lott 19.10.2011 - 21:18
2

Según Martin Fowler, la falsificación es bastante precisa:

  Los objetos

falsos en realidad tienen implementaciones que funcionan, pero usualmente toman algún atajo que los hace no adecuados para la producción (un buen ejemplo es una base de datos en memoria).

enlace

    
respondido por el Gary Buyn 19.10.2011 - 21:45

Lea otras preguntas en las etiquetas