Extract Params Into Class: Refactoring en PHP

Francisco Ugalde
Jun 17, 2020 · 2 min read

“Extract Params Into Class” como su nombre lo sugiere, es un patrón de refactoring muy común el cual sugiere extraer los parámetros de una función y añadirlos dentro de una clase mediante sus propiedades.

Veamos un simple ejemplo:

Lo habitual al crear una función

public function RegisterUser(
string $name,
string $lastName,
string $email,
string $streetAddress,
int $streetNumber,
string $state,
string $country,
int $zipCode
) {
// ...
// Here comes the implementation
}

Refactorizando usando Extract Params Into Class

public function RegisterUser(
User $user,
Address $address
) {
// ...
// Here comes the implementation
}
class User
{
private $name;
private $lastName;
private $email;
public function __constructor(
string $name,
string $lastName,
string $email
) {
$this->name = $name;
$this->lastName = $lastName;
$this->email = $email;
}
// ... semantic getters
}
class Address
{
private $streetAddress;
private $streetNumber;
private $state;
private $country;
private $zipCode;
public function __constructor(
string $streetAddress,
int $streetNumber,
string $state,
string $country,
int $zipCode
) {
$this->streetAddress = $streetAddress;
$this->streetNumber = $streetNumber;
$this->state = $state;
$this->country = $country;
$this->zipCode = $zipCode;
}
// ... semantic getters
}

Consideraciones Finales

Particularmente, es uno de los patrones que uso cuando de refactoring se trata siempre que me encuentro frente una aplicación que fue implementada por alguien más.

O porque en muchos casos, cuando estamos implementando un requerimiento, vamos dejando un esqueleto previo donde debe ir cada cosa, sobre todo cuando se trata de cosas complejas.

Pero que al final, al tener una vista general de donde debe ir cada cosa, siempre encontramos una mejor forma de refactorizar y aquí es donde entra este patrón el cual nos puede ser de muchísima ayuda.

Es por esto que con el uso del patrón de refactoring “Extract Params Into Class” estaremos ante una implementación más limpia, aprovechando siempre la programación orientada a objetos.

A su vez, estaríamos contribuyendo hacia el uso de los principios de un código limpio (Clean Code), legible, fácil de entender y por supuesto siguiendo una arquitectura limpia (Clean Architecture).

Así que no me queda más que recomendarte que lo pongas en práctica en cada uno de tus desarrollos y verás como poco a poco iras añadiendo mas skills a tu carrera profesional.

Recuerda que si tienes alguna sugerencia o pregunta, no dudes en dejar tus comentarios al final del post.

Si te gustó este post, ayúdame a que pueda servirle a muchas más personas, compartiendo mis contenidos en tus redes sociales.

Espero que este post haya sido de gran ayuda para ti, y como siempre, cualquier inquietud o duda que tengas, puedes contactarme por cualquiera de las vías disponibles, o dejando tus comentarios al final de este post. También puedes sugerir que temas o post te gustaría leer a futuro.

Francisco Ugalde

Written by

Senior Software Engineer | I love coding, software architectures and all new technologies. I’ll try to share, in an easy way, all the bits of my head.

Francisco Ugalde

Blog sobre tecnología, desarrollo de software y mobile

Francisco Ugalde

Written by

Senior Software Engineer | I love coding, software architectures and all new technologies. I’ll try to share, in an easy way, all the bits of my head.

Francisco Ugalde

Blog sobre tecnología, desarrollo de software y mobile

Medium is an open platform where 170 million readers come to find insightful and dynamic thinking. Here, expert and undiscovered voices alike dive into the heart of any topic and bring new ideas to the surface. Learn more

Follow the writers, publications, and topics that matter to you, and you’ll see them on your homepage and in your inbox. Explore

If you have a story to tell, knowledge to share, or a perspective to offer — welcome home. It’s easy and free to post your thinking on any topic. Write on Medium

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store