Heim > Artikel > Backend-Entwicklung > Kleine, saubere Anwendung
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
composer require small/clean-application
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
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
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.
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']);
Drei Schnittstellen strukturieren Ihren Code:
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!