Maison > développement back-end > tutoriel php > Petite application propre

Petite application propre

WBOY
Libérer: 2024-07-27 06:43:22
original
1061 Les gens l'ont consulté

Small Clean Application

Ce projet est un ensemble de classes permettant de gérer l'injection de dépendances d'une partie d'application d'une application à architecture propre,
indépendamment du framework utilisé.

Git : https://git.small-project.dev/lib/small-clean-application
Packagiste : https://packagist.org/packages/small/clean-application

Installer

composer require small/clean-application
Copier après la connexion

Paramètres

Les paramètres sont gérés pour les injecter automatiquement dans le constructeur UseCase.

Vous pouvez définir des paramètres via l'objet statique de façade :

\Small\CleanApplication\Facade::setParameter('test', [
    'host' => 'http://clean.com',
    'port' => 80
]);
Copier après la connexion

Vous pouvez également les faire passer par la façade :

echo \Small\CleanApplication\Facade::getParameter('test.host');
Copier après la connexion

Sortie :

http://clean.com
Copier après la connexion

Classe UseCase

Cas simple

Un cas d'utilisation est une matérialisation de classe d'un cas d'utilisation qui implémente SmallCleanApplicationContractUseCaseInterface.

Par exemple, voici simplement un cas d'utilisation qui renvoie une chaîne :

<?php

namespace Small\CleanApplication\Test\Feature\Fixture\UseCase;

use Small\CleanApplication\Test\Feature\Fixture\Interface\TestResponseInterface;

class TestUseCase implements \Small\CleanApplication\Contract\UseCaseInterface
{
    public function execute($request): TestResponseInterface
    {

        return new TestResponse('a');

    }


}
Copier après la connexion

Vous pouvez l'utiliser en utilisant la façade :

use Small\CleanApplication\Test\Feature\Fixture\UseCase\TestUseCase;
use \Small\CleanApplication\Test\Feature\Fixture\UseCase\TestRequest;

echo \Small\CleanApplication\Facade::execute(TestUseCase::class, new TestRequest());
Copier après la connexion

Sortie :

a
Copier après la connexion

Injecter un autre cas d'utilisation dans votre cas d'utilisation

Vous pouvez injecter un autre cas d'utilisation dans le constructeur de cas d'utilisation :

<?php

namespace Small\CleanApplication\Test\Feature\Fixture\UseCase;

use Small\CleanApplication\Contract\UseCaseInterface;
use Small\CleanApplication\Test\Feature\Fixture\Interface\TestDependencyRequestInterface;
use Small\CleanApplication\Test\Feature\Fixture\Interface\TestDependencyResponseInterface;

class TestDependencyUseCase implements UseCaseInterface
{

    public function __construct(
        protected TestUseCase $testUseCase,
    ) {}

    public function execute($request): TestDependencyResponseInterface
    {

        return new TestDependencyResponse(
            $request->getBefore() . $this->testUseCase->execute($request)->getStatus()
        );

    }

}
Copier après la connexion

La propriété testUseCase sera automatiquement créée en tant qu'objet TestUseCase.

Injection de paramètres dans votre cas d'utilisation

Vous pouvez injecter des paramètres dans votre cas d'utilisation en tapant et en nommant la propriété dans le constructeur de votre cas d'utilisation :

<?php

namespace Small\CleanApplication\Test\Feature\Fixture\UseCase;

use Small\CleanApplication\Contract\UseCaseInterface;
use Small\CleanApplication\Test\Feature\Fixture\Interface\TestDependencyRequestInterface;
use Small\CleanApplication\Test\Feature\Fixture\Interface\TestDependencyResponseInterface;

class TestDependencyParamUseCase implements UseCaseInterface
{

    public function __construct(
        protected string $testUseCase_param,
        protected TestUseCase $testUseCase,
    ) {}

    public function execute($request): TestDependencyResponseInterface
    {

        if (!$request instanceof TestDependencyRequestInterface) {
            throw new \Exception('Bad request');
        }

        return new TestDependencyResponse(
            $this->testUseCase_param . $request->getBefore() . $this->testUseCase->execute($request)->getStatus()
        );

    }

}
Copier après la connexion

Le trait de soulignement (« _ ») sépare les clés du tableau de la structure des paramètres. Voici un exemple correspondant au
$testUseCase_param :

\Small\CleanApplication\Facade::setParameter('testUseCase', ['param' => 'p']);
Copier après la connexion

Interfaces

Trois interfaces structurent votre code :

  • SmallCleanApplicationContractUseCaseInterface : Tous vos cas d'utilisation doivent implémenter cette interface
  • SmallCleanApplicationContractRequest : Toutes vos demandes de cas d'utilisation doivent implémenter cette interface
  • SmallCleanApplicationContractResponse : Toutes vos réponses de cas d'utilisation doivent implémenter cette interface

Voici notre exemple de classe de requête TestDependency :

<?php

namespace Small\CleanApplication\Test\Feature\Fixture\UseCase;

use Small\CleanApplication\Test\Feature\Fixture\Interface\TestDependencyRequestInterface;

readonly class TestDependencyRequest implements TestDependencyRequestInterface
{

    public function __construct(
        protected string $before,
    ) {}

    public function getBefore(): string
    {

        return $this->before;

    }

}
Copier après la connexion

Et son interface :

<?php

namespace Small\CleanApplication\Test\Feature\Fixture\Interface;

use Small\CleanApplication\Contract\RequestInterface;

interface TestDependencyRequestInterface extends RequestInterface
{

    public function getBefore(): string;

}
Copier après la connexion

Et voici la mise en œuvre de la réponse :

<?php

namespace Small\CleanApplication\Test\Feature\Fixture\UseCase;

use Small\CleanApplication\Test\Feature\Fixture\Interface\TestDependencyResponseInterface;

readonly class TestDependencyResponse implements TestDependencyResponseInterface
{

    public function __construct(
        protected string $status,
    ) {}

    public function getStatus(): string
    {
        return $this->status;
    }

}
Copier après la connexion

Et son interface :

<?php

namespace Small\CleanApplication\Test\Feature\Fixture\Interface;

use Small\CleanApplication\Contract\ResponseInterface;

interface TestDependencyResponseInterface extends ResponseInterface
{

    public function getStatus(): string;

}
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:dev.to
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal