Skip to content

15. Uygulama alıştırması – sürüm 7

Image

15.1. Implémentation

Burada, ana komut dosyalarında kullanılan sabitleri bir yapılandırma dosyasına taşıyarak sürüm 6'yı yeniden ele alacağız. Yapılandırma dosyası, içeriği aşağıdaki gibi olan jSON dosyası olacaktır:


{
    "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"]
}

Bu yapılandırmada:

  • 2. satır: Bu yapılandırma dosyasındaki tüm yolların hesaplanacağı başlangıç klasörü;
  • 3-7. satırlar: uygulamanın tüm jSON dosyalarının yolları;
  • 8-22. satırlar: uygulamanın tüm dosyalarının yolları, [clé=>chemin] biçiminde;
  • satır 23-34: vergi hesaplaması için gerekli bağımlılıklar, [dependencies] sözlüğündeki anahtarların listesi biçiminde (satır 8-22);
  • satır 35-44: jSON ve [taxadmindata.json] dosyalarının veritabanına aktarılması için gerekli bağımlılıklar, [dependencies] sözlüğündeki anahtarların listesi biçiminde (satır 8-22);

Vergi idaresi veritabanına aktarım komut dosyası [MainTransferAdminDataFromFile2PostgresSQLDatabase.php] şu şekilde olur:


<?php

// fonksiyon parametrelerinin beyan edilen türlerine sıkı bir şekilde uyulması
declare (strict_types=1);

// ad alanı
namespace Application;

// PHP ile hata yönetimi
// ini_set("display_errors", "0");
//
// yapılandırma dosyasının yolu
define("CONFIG_FILENAME", "../Data/config.json");

// yapılandırma alınır
$config = \json_decode(\file_get_contents(CONFIG_FILENAME), true);

// komut dosyası için gerekli bağımlılıkları dahil ediyoruz
$rootDirectory = $config["rootDirectory"];
foreach ($config["dependencies4transfer"] as $dependency) {
  require $rootDirectory . $config["dependencies"][$dependency];
}

// sabitlerin tanımlanması
define("DATABASE_CONFIG_FILENAME", "$rootDirectory/{$config["databaseFilename"]}");
define("TAXADMINDATA_FILENAME", "$rootDirectory/{$config["taxAdminDataFileName"]}");

//
try {
  // [dao] katmanının oluşturulması
  $dao = new DaoTransferAdminDataFromJsonFile2Database(DATABASE_CONFIG_FILENAME, TAXADMINDATA_FILENAME);
  // verilerin veritabanına aktarılması
  $dao->transferAdminData2Database();
} catch (ExceptionImpots $ex) {
  // hatanın görüntülenmesi
  print $ex->getMessage() . "\n";
}
// son
print "Terminé\n";
exit;

Açıklamalar

Kod, bağlantı paragrafında olduğu gibi kalır. Tek fark, 18-26. satırlardaki sabitlerin yerine [config.json] dosyasının kullanılmasıdır;

  • 16. satır: [file_get_contents] işlevi, [config.json] dosyasını bir karakter dizisine dönüştürür. Ardından [json_decode] işlevi, bu karakter dizisini kullanarak [$config] sözlüğünü oluşturur. [json_decode] işlevinin ikinci parametresi olan [true], bir sözlük oluşturulmak istendiğini belirtir;
  • 19-22. satırlar: [taxadmindata.json] dosyasındaki verilerin veritabanına aktarılması için gerekli bağımlılıklar eklenir;
    • [$config["dependencies4transfer"]], aktarım komut dosyası için gerekli bağımlılıkların bulunduğu tablodur. Bu, bir anahtar listesidir. Projeye eklenecek dosyaların yolları [$config["dependencies"]] sözlüğünde bulunur;
    • $config["rootDirectory"], eklenecek dosyaların önüne eklenmesi gereken önek yolunu temsil eder;

Aynı şekilde, vergi hesaplama komut dosyası şu şekilde olur: [MainCalculateImpotsWithTaxAdminDataInPostgresDatabase]:


<?php

// fonksiyon parametrelerinin beyan edilen türlerine sıkı sıkıya uyulması
declare (strict_types=1);

// ad alanı
namespace Application;

// PHP ile hata yönetimi
// ini_set("display_errors", "0");
//
// yapılandırma dosyasının yolu
define("CONFIG_FILENAME", "../Data/config.json");

// yapılandırma alınır
$config = \json_decode(\file_get_contents(CONFIG_FILENAME), true);

// komut dosyası için gerekli bağımlılıkları dahil ediyoruz
$rootDirectory = $config["rootDirectory"];
foreach ($config["dependencies4calculate"] as $dependency) {
  require $rootDirectory . $config["dependencies"][$dependency];
}

// sabitlerin tanımlanması
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 {
  // [dao] katmanının oluşturulması
  $dao = new DaoImpotsWithTaxAdminDataInDatabase(DATABASE_CONFIG_FILENAME);
  // [métier] katmanının oluşturulması
  $métier = new Metier($dao);
  // toplu iş modunda vergi hesaplama
  $métier->executeBatchImpots(TAXPAYERSDATA_FILENAME, RESULTS_FILENAME, ERRORS_FILENAME);
} catch (ExceptionImpots $ex) {
  // hatanın görüntülenmesi
  print "Une erreur s'est produite : " . utf8_encode($ex->getMessage()) . "\n";
}
// son
print "Terminé\n";
exit;

15.2. Testler [Codeception]

Bu sürüm, önceki sürümler gibi [Codeception] testleriyle doğrulanmıştır.

Image

15.2.1. [dao] katman testi

[DaoTest.php] testi şu şekildedir:


<?php

// fonksiyon parametrelerinin beyan edilen türlerine sıkı bir şekilde uyulur
declare (strict_types=1);

// ad alanı
namespace Application;

// sabitlerin tanımlanması
define("ROOT", "C:/Data/st-2019/dev/php7/poly/scripts-console/impots/version-07");
// yapılandırma dosyasının yolu
define("CONFIG_FILENAME", ROOT."/Data/config.json");
// yapılandırma alınır
$config = \json_decode(\file_get_contents(CONFIG_FILENAME), true);
// komut dosyası için gerekli bağımlılıkları dahil etme
$rootDirectory = $config["rootDirectory"];
foreach ($config["dependencies4calculate"] as $dependency) {
  require $rootDirectory . $config["dependencies"][$dependency];
}
// diğer sabitler
define("DATABASE_CONFIG_FILENAME", "$rootDirectory/{$config["databaseFilename"]}");

// test -----------------------------------------------------

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

  public function __construct() {
    parent::__construct();
    // katman oluşturma [dao]
    $dao = new DaoImpotsWithTaxAdminDataInDatabase(DATABASE_CONFIG_FILENAME);
    $this->taxAdminData = $dao->getTaxAdminData();
  }

  // testler
  public function testTaxAdminData() {

  }

}

Açıklamalar

  • 9-21. satırlar: test ortamının tanımlanması. Bağlantı paragrafında açıklanan ana komut dosyası [MainCalculateImpotsWithTaxAdminDataInPostgresDatabase] tarafından kullanılan ortamın aynısını, [métier] katmanı hariç, kullanıyoruz;
  • 29-34. satırlar: [dao] katmanının oluşturulması;
  • satır 33: [$this→taxAdminData] özniteliği, test edilecek verileri içerir;
  • satır 37-39: [testTaxAdminData] yöntemi, bağlantı paragrafında açıklanan yöntemdir;

Test sonuçları şöyledir:

Image

15.2.2. [métier] katmanının testi

[MetierTest.php] testi şu şekildedir:


<?php

// fonksiyon parametrelerinin beyan edilen türlerine sıkı sıkıya uyulması
declare (strict_types=1);

// ad alanı
namespace Application;

// sabitlerin tanımlanması
define("ROOT", "C:/Data/st-2019/dev/php7/poly/scripts-console/impots/version-07");
// yapılandırma dosyasının yolu
define("CONFIG_FILENAME", ROOT . "/Data/config.json");
// yapılandırmayı alıyoruz
$config = \json_decode(\file_get_contents(CONFIG_FILENAME), true);
// komut dosyası için gerekli bağımlılıkları dahil etme
$rootDirectory = $config["rootDirectory"];
foreach ($config["dependencies4calculate"] as $dependency) {
  require $rootDirectory . $config["dependencies"][$dependency];
}
// diğer sabitler
define("DATABASE_CONFIG_FILENAME", "$rootDirectory/{$config["databaseFilename"]}");

// test sınıfı
class MetierTest extends \Codeception\Test\Unit {
  // iş mantığı katmanı
  private $métier;

  public function __construct() {
    parent::__construct();
    // katmanın oluşturulması [dao]
    $dao = new DaoImpotsWithTaxAdminDataInDatabase(DATABASE_CONFIG_FILENAME);
    // katman oluşturma [métier]
    $this->métier = new Metier($dao);
  }

  // testler
  public function test1() {

  }

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

  public function test11() {

  }

}

Açıklamalar

  • 9-21. satırlar: test ortamının tanımlanması. Bağlantı paragrafında açıklanan ana komut dosyası [MainCalculateImpotsWithTaxAdminDataInPostgresDatabase] ile aynı ortamı kullanıyoruz;
  • 28-34. satırlar: [dao] katmanının oluşturulması;
  • 33. satır: [$this→métier] özniteliği, test edilecek [métier] katmanına bir referanstır;
  • satır 37-45: [test1, test2…, test11] yöntemleri, bağlantı paragrafında açıklanan yöntemlerdir;

Test sonuçları şöyledir:

Image