Skip to content

15. Ejercicio de aplicación – version 7

Image

15.1. Implementación

Aquí retomaremos el version 6 externalizando en un archivo de configuración las constantes utilizadas en los scripts principales. El archivo de configuración será un archivo jSON cuyo contenido será el siguiente:


{
    "rootDirectory": "C:/Data/st-2019/dev/php7/poly/scripts-console/impots/version-07",
    "databaseFilename": "Data/database.json",
    "taxAdminDataFileName": "Data/taxadmindata.json",
    "taxPayersDataFileName": "Data/taxpayersdata.json",
    "resultsFileName": "Data/results.json",
    "errorsFileName": "Data/errors.json",
    "dependencies": {
        "BaseEntity": "/../version-05/Entities/BaseEntity.php",
        "TaxAdminData": "/../version-05/Entities/TaxAdminData.php",
        "TaxPayerData": "/../version-05/Entities/TaxPayerData.php",
        "Database": "/../version-05/Entities/Database.php",
        "ExceptionImpots": "/../version-05/Entities/ExceptionImpots.php",
        "Utilitaires": "/../version-05/Utilities/Utilitaires.php",
        "InterfaceDao": "/../version-05/Dao/InterfaceDao.php",
        "TraitDao": "/../version-05/Dao/TraitDao.php",
        "InterfaceDao4TransferAdminData2Database": "/../version-05/Dao/InterfaceDao4TransferAdminData2Database.php",
        "DaoTransferAdminDataFromJsonFile2Database": "/../version-05/Dao/DaoTransferAdminDataFromJsonFile2Database.php",        
        "DaoImpotsWithTaxAdminDataInDatabase": "/../version-05/Dao/DaoImpotsWithTaxAdminDataInDatabase.php",
        "InterfaceMetier": "/../version-05/Métier/InterfaceMetier.php",
        "Metier": "/../version-05/Métier/Metier.php"
    },
    "dependencies4calculate": [
        "BaseEntity",
        "TaxAdminData",
        "TaxPayerData",
        "Database",
        "ExceptionImpots",
        "Utilitaires",
        "InterfaceDao",
        "TraitDao",
        "DaoImpotsWithTaxAdminDataInDatabase",
        "InterfaceMetier",
        "Metier"],
    "dependencies4transfer": [
        "BaseEntity",
        "TaxAdminData",
        "Database",
        "ExceptionImpots",
        "Utilitaires",
        "InterfaceDao",
        "TraitDao",  
        "InterfaceDao4TransferAdminData2Database",
        "DaoTransferAdminDataFromJsonFile2Database"]
}

En esta configuración:

  • línea 2: la carpeta desde la que se miden todas las rutas de este archivo de configuración;
  • líneas 3-7: las rutas de todos los archivos jSON de la aplicación;
  • líneas 8-22: las rutas de todos los archivos de la aplicación, en el formato [clé=>chemin];
  • líneas 23-34: las dependencias para el cálculo del impuesto en forma de una lista de claves del diccionario [dependencies] (líneas 8-22);
  • líneas 35-44: las dependencias para la transferencia a la base de datos de los archivos jSON y [taxadmindata.json] en forma de una lista de claves del diccionario [dependencies] (líneas 8-22);

El script de transferencia a la base de datos de la administración tributaria [MainTransferAdminDataFromFile2PostgresSQLDatabase.php] queda así:


<?php

// Cumplimiento estricto de los tipos declarados de los parámetros de las funciones
declare (strict_types=1);

// espacio de nombres
namespace Application;

// gestión de errores mediante PHP
// ini_set("display_errors", "0");
//
// ruta del archivo de configuración
define("CONFIG_FILENAME", "../Data/config.json");

// se recupera la configuración
$config = \json_decode(\file_get_contents(CONFIG_FILENAME), true);

// se incluyen las dependencias necesarias para el script
$rootDirectory = $config["rootDirectory"];
foreach ($config["dependencies4transfer"] as $dependency) {
  require $rootDirectory . $config["dependencies"][$dependency];
}

// definición de las constantes
define("DATABASE_CONFIG_FILENAME", "$rootDirectory/{$config["databaseFilename"]}");
define("TAXADMINDATA_FILENAME", "$rootDirectory/{$config["taxAdminDataFileName"]}");

//
try {
  // creación de la capa [dao]
  $dao = new DaoTransferAdminDataFromJsonFile2Database(DATABASE_CONFIG_FILENAME, TAXADMINDATA_FILENAME);
  // transferencia de datos a la base
  $dao->transferAdminData2Database();
} catch (ExceptionImpots $ex) {
  // se muestra el error
  print $ex->getMessage() . "\n";
}
// fin
print "Terminé\n";
exit;

Comentarios

El código sigue siendo el mismo que el del párrafo anterior. La única diferencia es el uso del archivo [config.json] en lugar de las constantes de las líneas 18-26;

  • línea 16: la función [file_get_contents] transfiere el archivo [config.json] a una cadena de caracteres. A continuación, la función [json_decode] utiliza esta cadena para construir el diccionario [$config]. El segundo parámetro [true] de la función [json_decode] indica que se desea crear un diccionario;
  • líneas 19-22: se incluyen las dependencias necesarias para el script de transferencia de datos del archivo [taxadmindata.json] a la base de datos;
    • [$config["dependencies4transfer"]] es la tabla de dependencias necesarias para el script de transferencia. Se trata de una lista de claves. Las rutas de los archivos que se deben incluir en el proyecto se encuentran en el diccionario [$config["dependencies"]];
    • $config["rootDirectory"] representa la ruta con la que deben prefijarse los archivos que se van a incluir;

Del mismo modo, el script de cálculo del impuesto queda así: [MainCalculateImpotsWithTaxAdminDataInPostgresDatabase]:


<?php

// Cumplimiento estricto de los tipos declarados de los parámetros de las funciones
declare (strict_types=1);

// espacio de nombres
namespace Application;

// gestión de errores por PHP
// ini_set("display_errors", "0");
//
// ruta del archivo de configuración
define("CONFIG_FILENAME", "../Data/config.json");

// se recupera la configuración
$config = \json_decode(\file_get_contents(CONFIG_FILENAME), true);

// se incluyen las dependencias necesarias para el script
$rootDirectory = $config["rootDirectory"];
foreach ($config["dependencies4calculate"] as $dependency) {
  require $rootDirectory . $config["dependencies"][$dependency];
}

// definición de las constantes
define("DATABASE_CONFIG_FILENAME", "$rootDirectory/{$config["databaseFilename"]}");
define("TAXPAYERSDATA_FILENAME", "$rootDirectory/{$config["taxPayersDataFileName"]}");
define("RESULTS_FILENAME", "$rootDirectory/{$config["resultsFileName"]}");
define("ERRORS_FILENAME", "$rootDirectory/{$config["errorsFileName"]}");

//
try {
  // creación de la capa [dao]
  $dao = new DaoImpotsWithTaxAdminDataInDatabase(DATABASE_CONFIG_FILENAME);
  // creación de la capa [métier]
  $métier = new Metier($dao);
  // cálculo de impuestos en modo batch
  $métier->executeBatchImpots(TAXPAYERSDATA_FILENAME, RESULTS_FILENAME, ERRORS_FILENAME);
} catch (ExceptionImpots $ex) {
  // se muestra el error
  print "Une erreur s'est produite : " . utf8_encode($ex->getMessage()) . "\n";
}
// fin
print "Terminé\n";
exit;

15.2. Pruebas [Codeception]

Este version, al igual que los anteriores, se valida mediante pruebas [Codeception].

Image

15.2.1. Prueba de la capa [dao]

La prueba [DaoTest.php] es la siguiente:


<?php

// Cumplimiento estricto de los tipos declarados de los parámetros de las funciones
declare (strict_types=1);

// espacio de nombres
namespace Application;

// definición de constantes
define("ROOT", "C:/Data/st-2019/dev/php7/poly/scripts-console/impots/version-07");
// ruta del archivo de configuración
define("CONFIG_FILENAME", ROOT."/Data/config.json");
// se recupera la configuración
$config = \json_decode(\file_get_contents(CONFIG_FILENAME), true);
// se incluyen las dependencias necesarias para el script
$rootDirectory = $config["rootDirectory"];
foreach ($config["dependencies4calculate"] as $dependency) {
  require $rootDirectory . $config["dependencies"][$dependency];
}
// otras constantes
define("DATABASE_CONFIG_FILENAME", "$rootDirectory/{$config["databaseFilename"]}");

// prueba -----------------------------------------------------

class DaoTest extends \Codeception\Test\Unit {
  // TaxAdminData
  private $taxAdminData;

  public function __construct() {
    parent::__construct();
    // creación de la capa [dao]
    $dao = new DaoImpotsWithTaxAdminDataInDatabase(DATABASE_CONFIG_FILENAME);
    $this->taxAdminData = $dao->getTaxAdminData();
  }

  // pruebas
  public function testTaxAdminData() {

  }

}

Comentarios

  • líneas 9-21: definición del entorno de la prueba. Utilizamos el mismo, sin la capa [métier], que el utilizado por el script principal [MainCalculateImpotsWithTaxAdminDataInPostgresDatabase] descrito en el párrafo enlace;
  • líneas 29-34: construcción de la capa [dao];
  • línea 33: el atributo [$this→taxAdminData] contiene los datos que se van a probar;
  • líneas 37-39: el método [testTaxAdminData] es el descrito en el apartado enlace;

Los resultados de la prueba son los siguientes:

Image

15.2.2. Prueba de la capa [métier]

La prueba [MetierTest.php] es la siguiente:


<?php

// Cumplimiento estricto de los tipos declarados de los parámetros de las funciones
declare (strict_types=1);

// espacio de nombres
namespace Application;

// definición de constantes
define("ROOT", "C:/Data/st-2019/dev/php7/poly/scripts-console/impots/version-07");
// ruta del archivo de configuración
define("CONFIG_FILENAME", ROOT . "/Data/config.json");
// se recupera la configuración
$config = \json_decode(\file_get_contents(CONFIG_FILENAME), true);
// se incluyen las dependencias necesarias para el script
$rootDirectory = $config["rootDirectory"];
foreach ($config["dependencies4calculate"] as $dependency) {
  require $rootDirectory . $config["dependencies"][$dependency];
}
// otras constantes
define("DATABASE_CONFIG_FILENAME", "$rootDirectory/{$config["databaseFilename"]}");

// clase de prueba
class MetierTest extends \Codeception\Test\Unit {
  // capa de negocio
  private $métier;

  public function __construct() {
    parent::__construct();
    // creación de la capa [dao]
    $dao = new DaoImpotsWithTaxAdminDataInDatabase(DATABASE_CONFIG_FILENAME);
    // creación de la capa [métier]
    $this->métier = new Metier($dao);
  }

  // pruebas
  public function test1() {

  }

  -----------------------------------

  public function test11() {

  }

}

Comentarios

  • líneas 9-21: definición del entorno de la prueba. Utilizamos el mismo que el utilizado por el script principal [MainCalculateImpotsWithTaxAdminDataInPostgresDatabase] descrito en el párrafo enlace;
  • líneas 28-34: construcción de la capa [dao];
  • línea 33: el atributo [$this→métier] es una referencia a la capa [métier] que se va a probar;
  • líneas 37-45: los métodos [test1, test2…, test11] son los descritos en el apartado enlace;

Los resultados de la prueba son los siguientes:

Image