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;
}
}