Skip to content

Instantly share code, notes, and snippets.

@alejandrofloresm
Created March 10, 2023 02:38
Show Gist options
  • Save alejandrofloresm/54fe0146bd219fa1cea41dc63d71de75 to your computer and use it in GitHub Desktop.
Save alejandrofloresm/54fe0146bd219fa1cea41dc63d71de75 to your computer and use it in GitHub Desktop.
Ejemplo SRD para Laravel

A continuación te mostraré un ejemplo de cómo aplicar el principio SOLID en Laravel utilizando bloques de código. En este ejemplo, utilizaremos el principio de responsabilidad única (SRP) para separar la lógica de negocio de los controladores.

Supongamos que tenemos un controlador que maneja la creación de un nuevo usuario en nuestra aplicación. En este controlador, se está manejando la validación de los datos, la creación del usuario y el envío de un correo electrónico de bienvenida. Esto viola el principio SRP ya que el controlador está asumiendo demasiadas responsabilidades.

Para solucionar este problema, podemos crear una clase separada para manejar la creación de usuarios y otra clase para manejar el envío de correos electrónicos de bienvenida. Aquí está el código para las nuevas clases:

// UserCreator.php
class UserCreator
{
    public function create(array $data)
    {
        // Aquí se maneja la creación del usuario
    }
}

// WelcomeEmailSender.php
class WelcomeEmailSender
{
    public function send(User $user)
    {
        // Aquí se maneja el envío del correo electrónico de bienvenida
    }
}

Luego, podemos actualizar nuestro controlador para utilizar estas nuevas clases y eliminar la lógica de negocio que estábamos manejando antes:

class UserController extends Controller
{
    public function store(Request $request, UserCreator $userCreator, WelcomeEmailSender $emailSender)
    {
        $data = $request->validate([
            'name' => 'required|string|max:255',
            'email' => 'required|string|email|unique:users,email|max:255',
            'password' => 'required|string|min:8|confirmed',
        ]);

        $user = $userCreator->create($data);

        $emailSender->send($user);

        return redirect()->route('home');
    }
}

Al separar la lógica de negocio en clases separadas, estamos cumpliendo con el principio SRP y estamos haciendo que nuestro código sea más modular y fácil de mantener. Además, estamos haciendo que nuestro controlador sea más sencillo y fácil de entender.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment