Saltar al contenido

¿Debería o no debería usar los métodos getter y setter?

Nuestro equipo de trabajo ha pasado mucho tiempo investigando para dar solución a tus interrogantes, te dejamos la resolución por eso nuestro objetivo es resultarte de mucha ayuda.

Solución:

La publicación de blog a la que se vinculó comienza con una oración crucial (énfasis agregado):

Cada getter y setter en su código representa un falla al encapsular y crea un acoplamiento innecesario.

Encapsulación es la idea más importante de la Programación Orientada a Objetos. Básicamente se reduce a ocultando la complejidad envolviéndolo cuidadosamente dentro de las clases. En un mundo ideal, cuando usas una clase, no deberías saber cualquier cosa sobre su funcionamiento interno o su estado. Algunas personas (como el autor de este blog) argumentarán que tener getters y setters ya es demasiada información sobre el interior de la clase. En su opinión, una clase solo debería tener métodos que nos permitan decirle a un objeto que hacer algono importa cómo lo hace o en qué estado se encuentra. Usar un setter no es “decirle al objeto que haga algo”, es jugar con el estado del objeto desde afuera.

En lugar de hacer esto:

$a = myObject();

// Querying object state, making a decision outside the object, and changing its state
if ($a->getWarbleFizz() < 42) 
    $a->setYourWarbleFizzTo(42);


// Gee, I hope I made the right decision...
$a->nowDoSomethingUseful();

Deberías estar escribiendo un código como este:

$a = myObject(42);
$a->doStuff();

O esto :

$a = myObject();
$a->doStuff(42);

Lectura relacionada: Di, no preguntes.

Porque si la implementación de cómo se establece el valor cambia (a un db), no tiene que cambiar las personas que llaman. Otro ejemplo es que es posible que deba verificar el valor antes de configurarlo.

Tener un método le permite interceptar la configuración/obtención de esa variable, hacerlo cuando no parece que lo necesite hace que su código sea más fácil de cambiar.

captadores de propiedades

Los lenguajes como C# y las versiones recientes de JavaScript le permiten interceptar la lectura y escritura de propiedades, por lo que solo puede usar propiedades en lenguajes que lo admitan.

Observadores de objetos

Algunos lenguajes le permiten interceptar la lectura/configuración de todos los Object.watch de JavaScript, o propiedades inaccesibles con __get de PHP. Esto le permite implementar getters y setters, pero obtiene un impacto en el rendimiento debido a la sobrecarga que crean para cada acceso a la propiedad. Esta respuesta habla de otros problemas con getters y setters. Práctica recomendada: métodos mágicos de PHP __set y __get

Getters y Setters están bien, pero…

Hacer getters y setters repetitivos es mejor, pero es casi tan malo como las propiedades públicas. Si alguien puede cambiar el estado de su objeto (especialmente con múltiples propiedades), no estará bien encapsulado. http://cspray.github.io/2012/05/13/stop-calling-them-getters-setters.html

Una gran ventaja de usar getter y setter es que siempre que necesite realizar cambios, solo tiene que modificar getter y setter.

Intentaré explicarlo con un ejemplo:

protected $date;
public function getDate()
    return $this->date;

public function setDate($date)
    $this->date = $date;

Imagine que hay una razón por la cual la fecha siempre debe incrementarse con un día. Tendrá que buscar en todo su proyecto donde accedió a su miembro de clase.

Pero al usar getters y setters, puede cambiar el código a:

protected $date;
public function getDate()
    return $this->date;

public function setDate($date)
    $date = new DateTime($date);
    $date->modify('+1 day');
    $this->date = $date;

Sección de Reseñas y Valoraciones

Recuerda algo, que puedes añadir una estimación correcta si te fue de ayuda.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *