Los value objects (VO) o objetos de valor son uno de los bloques de construcción en los principios de “Domain Driven Design”. Representan un valor y no tienen identidad. Dicho esto, dos objetos de valor son iguales si sus valores son iguales.

Otra característica importante es que los objetos de valor son inmutables, es decir, no se pueden modificar después de la creación.

La única forma válida de crear Value Objects es pasar toda la información requerida al constructor y validando dicha información en algún método interno.

Martin Fowler define los value objects (VO) o objetos de valor de la…


Constructores semánticos ó named constructors es un pequeño patrón de refactoring que nos permite eliminar complejidad de los constructores cuando estos implican conocer detalles a fondo de la implementación del mismo.

Tenemos el siguiente ejemplo:

class Price
{
private $amount;
private $currency;
public function __construct(float $amount, string $currency)
{
$this->checkAmount($amount);
$this->checkCurrency($currency);
$this->amount = $amount;
$this->currency = $currency;
}
private function checkAmount(float $amount)
{
if (0 >= $amount) {
throw new RuntimeException();
}
}
private function checkCurrency(string $currency)
{
$allowedCurrencies = ['EUR', 'USD', 'GBP'];
if (!in_array($currency, $allowedCurrencies)) {
throw new RuntimeException();
}
}
public function amount() : float
{
return $this->amount…


PHP es lenguaje que recientemente ha cumplido 25 años y no se puede negar lo mucho que ha madurado con el tiempo. En este artículo quiero mostrarte todo lo nuevo de PHP 8.

Ya falta muy poco para conocer todo lo nuevo de PHP 8, se espera que sea liberada en Diciembre de 2020, es por ello que he querido preparar este artículo en el que resumiré cuales son las mejoras y nuevas características que traerá consigo muy pronto.

Vale la pena destacar, que toda esta información ha sido obtenida durante sus fases de desarrollo por lo que si llega…


“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…


El patrón Comando ó Command Pattern es un patrón de comportamiento muy común a tener en cuenta en nuestros desarrollos.

El principio de este patrón es convertir operaciones o requests en objetos.

Encapsular una petición como un objeto, de modo que puedan parametrizarse otros objetos con distintas peticiones o colas de peticiones.

Command Pattern

La idea se basa en la necesidad de ejecutar una acción, para la cual creamos un objeto el cual es denominado Command con la información requerida (Propiedades) para ser luego procesada por un handler.

Cada comando al ser despachado, tendrá su propio handler el cual sabra…


En este post quiero mostrarte como desplegar contenedores de Docker en Clouding.io. Para esto, quiero mostrarte como llevar a producción una aplicación de ejemplo con Symfony 4 y Redis.

La aplicación es solo de ejemplo y se trata de un API Rest sencillo el cual nos permitirá mostrar cómo desplegar nuestra aplicación en dos instancias de .

¿Qué es Clouding.io?

Clouding.io es una empresa española que nos provee de una excelente plataforma de servicios de infraestructura para nuestras aplicaciones, lo que se traduce en: un proveedor de servicios en la nube que nos permite disponer de Cloud Servers ó los comúnmente llamados: VPS


Importante: No confundir el Factory Pattern con el patrón Abstract Factory, aunque del mismo tipo, resuelven distintos problemas de distinta forma.

A considerar…

El patrón de diseño Factory viene a solucionar los inconvenientes con la creación o instanciación de nuestros objetos. La idea es encapsular u ocultar al cliente los detalles internos para la creación de ciertos objetos, o dicho de una mejor manera:

Desacoplar la lógica de creación de la lógica de negocio, evitando al cliente conocer detalles de la instanciación de los objetos de los que depende.

Propósito del patrón

Implementación del Factory Pattern

Caso de ejemplo

Supongamos que necesitamos desarrollar un sistema para una…


Tell Don’t ask es un principio de la programación orientada a objetos ( POO) que nos recuerda que no tenemos que usar los objetos para pedirles cosas o datos primero y según la información que nos devuelven tomar decisiones

Por el contrario, el principio nos sugiere es decirles a los objetos que hagan cosas y estos objetos internamente tomaran sus propias decisiones según de su estado actual.

Este principio encaja perfectamente con la idea de que un objeto se define por su comportamiento; y además es fundamental para sacar provecho al polimorfismo y la inversión de control.

Es decir si…


Componente Mailer de Symfony

El componente de Symfony fue introducido en la versión 4.3 y aún esta considerado un feature experimental

Nota a considerar antes de comenzar a usarlo en producción.

Otra de las necesidades más comunes en cada aplicación que desarrollamos, es el uso de una librería que nos provea un cliente de correo.

Symfony, como era de esperarse, nos provee siempre de herramientas y componente muy útiles que nos permiten desarrollar nuestras aplicaciones con una garantía de calidad impecable.

Es por esto, que quiero mostrarte como funciona este nuevo componente que se introduce en el framework desde la versión de Symfony 4.3


Patrón de diseño DECORATOR en PHP

En este post quiero enseñarte otro patrón de diseño que utilizo comúnmente en los proyectos que he tenido la oportunidad de trabajar y es el patrón de diseño DECORATOR o Decorador.

Este patrón nos permite resolver el problema de agregar comportamiento o funcionalidad específica a los objetos de una clase. La POO nos permite recurrir a la herencia cuando se trata de añadir funcionalidad extra a nuestra clase.

Pero, el problema radica en que no podemos heredar de más de una clase, es decir, dada una clase C, no podrá heredar a la vez de una clase A y B.

Francisco Ugalde

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.

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