Heim > Backend-Entwicklung > PHP-Tutorial > Kleine, saubere Anwendung

Kleine, saubere Anwendung

WBOY
Freigeben: 2024-07-27 06:43:22
Original
1057 Leute haben es durchsucht

Small Clean Application

Dieses Projekt ist eine Reihe von Klassen zur Verwaltung der Abhängigkeitsinjektion des Anwendungsteils einer App mit sauberer Architektur,
unabhängig vom verwendeten Framework.

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

Installieren

composer require small/clean-application
Nach dem Login kopieren

Parameter

Parameter werden so verwaltet, dass sie automatisch in den UseCase-Konstruktor eingefügt werden.

Sie können Parameter über das statische Fassadenobjekt einstellen:

\Small\CleanApplication\Facade::setParameter('test', [
    'host' => 'http://clean.com',
    'port' => 80
]);
Nach dem Login kopieren

Sie können sie auch durch die Fassade bekommen:

echo \Small\CleanApplication\Facade::getParameter('test.host');
Nach dem Login kopieren

Ausgabe:

http://clean.com
Nach dem Login kopieren

UseCase-Klasse

Einfacher Fall

Ein Anwendungsfall ist eine Klassenmaterialisierung eines Anwendungsfalls, der SmallCleanApplicationContractUseCaseInterface implementiert.

Hier ist zum Beispiel ein einfacher Anwendungsfall, der eine Zeichenfolge zurückgibt:

<?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');

    }


}
Nach dem Login kopieren

Sie können es mit der Fassade verwenden:

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());
Nach dem Login kopieren

Ausgabe:

a
Nach dem Login kopieren

Fügen Sie einen weiteren Anwendungsfall in Ihren Anwendungsfall ein

Sie können einen weiteren Anwendungsfall in den Anwendungsfallkonstruktor einfügen:

<?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()
        );

    }

}
Nach dem Login kopieren

Die Eigenschaft testUseCase wird automatisch als TestUseCase-Objekt erstellt.

Einfügen von Parametern in Ihren Anwendungsfall

Sie können Parameter in Ihren Anwendungsfall einfügen, indem Sie Eigenschaften in Ihren Anwendungsfallkonstruktor eingeben und benennen:

<?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()
        );

    }

}
Nach dem Login kopieren

Der Unterstrich ('_') trennt Array-Schlüssel der Parameterstruktur. Hier ist ein Beispiel, das mit dem
übereinstimmt $testUseCase_param :

\Small\CleanApplication\Facade::setParameter('testUseCase', ['param' => 'p']);
Nach dem Login kopieren

Schnittstellen

Drei Schnittstellen strukturieren Ihren Code:

  • SmallCleanApplicationContractUseCaseInterface: Alle Ihre Anwendungsfälle müssen diese Schnittstelle implementieren
  • SmallCleanApplicationContractRequest: Alle Ihre Anwendungsfallanfragen müssen diese Schnittstelle implementieren
  • SmallCleanApplicationContractResponse: Alle Ihre Anwendungsfallantworten müssen diese Schnittstelle implementieren

Hier ist unsere TestDependency Beispielanforderungsklasse:

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

    }

}
Nach dem Login kopieren

Und seine Schnittstelle:

<?php

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

use Small\CleanApplication\Contract\RequestInterface;

interface TestDependencyRequestInterface extends RequestInterface
{

    public function getBefore(): string;

}
Nach dem Login kopieren

Und hier ist die Antwortimplementierung:

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

}
Nach dem Login kopieren

Und seine Schnittstelle:

<?php

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

use Small\CleanApplication\Contract\ResponseInterface;

interface TestDependencyResponseInterface extends ResponseInterface
{

    public function getStatus(): string;

}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonKleine, saubere Anwendung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage