Heim  >  Artikel  >  Backend-Entwicklung  >  Kleine, saubere Anwendung

Kleine, saubere Anwendung

WBOY
WBOYOriginal
2024-07-27 06:43:221005Durchsuche

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

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
]);

Sie können sie auch durch die Fassade bekommen:

echo \Small\CleanApplication\Facade::getParameter('test.host');

Ausgabe:

http://clean.com

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

    }


}

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

Ausgabe:

a

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

    }

}

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

    }

}

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

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;

    }

}

Und seine Schnittstelle:

<?php

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

use Small\CleanApplication\Contract\RequestInterface;

interface TestDependencyRequestInterface extends RequestInterface
{

    public function getBefore(): string;

}

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

}

Und seine Schnittstelle:

<?php

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

use Small\CleanApplication\Contract\ResponseInterface;

interface TestDependencyResponseInterface extends ResponseInterface
{

    public function getStatus(): string;

}

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

Stellungnahme:
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