PHP: cómo implementar el patrón de diseño Module o Modulo

2022-02-18 - Categorías: General / PHP / Principios y patrones

Recopilando más apuntes sobre patrones del diseño del software, llegamos a este patrón de diseño Module/Módulo que se puede implementar de muchas formas. Este codekata en PHP hace una implementación, pero se puede hacer de varias formas, y simplemente consiste en aplicar la técnica de divide y vencerás.

Es decir, los programas los podemos dividir por módulos. A su vez, estos módulos se pueden volver a dividir de nuevo en sub-módulos. Además de que independientemente a si se usa en programación procedural o con objetos, podemos establecer módulos.

Estos módulos se pueden establecer mediante ficheros, clases, espacios de trabajo, directorios, capas, etc..

Al grano, cómo implementar unos módulos en PHP usando objetos y Singletones

Por ejemplo, una clase Client.php que usa dos módulos:

<?php

require 'Module1.php';
require 'Module2.php';

(new Client())->main();

class Client
{
    public function main()
    {
        $module1 = Module1::getInstance();
        $module2 = Module2::getInstance();

        $module1->doSomething();
        $module1->doSomethingElse();
        $module2->doAnything();
        $module2->doAnythingElse();
    }
}

Una posible implementación de los dos módulos usando Singletones:

<?php

class Module1
{
    private static $instance;

    private function __construct()
    {
    }

    public static function getInstance()
    {
        if (!self::$instance) {
            self::$instance = new Module1();
        }

        return self::$instance;
    }

    public function doSomething()
    {
        echo 'Doing something..'.PHP_EOL;
    }

    public function doSomethingElse()
    {
        echo 'Doing something else..'.PHP_EOL;
    }
}
<?php

class Module2
{
    private static $instance;

    private function __construct()
    {
    }

    public static function getInstance()
    {
        if (!self::$instance) {
            self::$instance = new Module2();
        }

        return self::$instance;
    }

    public function doAnything()
    {
        echo 'Doing anything..'.PHP_EOL;
    }

    public function doAnythingElse()
    {
        echo 'Doing anything else..'.PHP_EOL;
    }
}

Deja una respuesta

Tu dirección de correo electrónico no será publicada.

 

© 2022 JnjSite.com - MIT license

Sitio hecho con WordPress, diseño y programación del tema por Jnj.