このプロジェクトは、クリーン アーキテクチャ アプリのアプリケーションの一部である
の依存関係注入を管理するためのクラスのセットです。
使用されるフレームワークとは独立しています。
Git : https://git.small-project.dev/lib/small-clean-application
Packagist : https://packagist.org/packages/small/clean-application
composer require small/clean-application
パラメータは、UseCase コンストラクターに自動的に挿入されるように管理されます。
ファサード静的オブジェクトを通じてパラメータを設定できます:
\Small\CleanApplication\Facade::setParameter('test', [ 'host' => 'http://clean.com', 'port' => 80 ]);
ファサードからも入手できます:
echo \Small\CleanApplication\Facade::getParameter('test.host');
出力:
http://clean.com
ユースケースは、SmallCleanApplicationContractUseCaseInterface を実装するユースケースのクラス具体化です。
たとえば、以下は文字列を返す単純なユースケースです:
<?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'); } }
ファサードを使用して使用できます:
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());
出力:
a
ユースケースコンストラクターで別のユースケースを挿入できます:
<?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() ); } }
プロパティ testUseCase は TestUseCase オブジェクトとして自動的に作成されます。
ユースケースのコンストラクターにプロパティを入力して名前を付けることで、ユースケースにパラメーターを挿入できます:
<?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() ); } }
アンダースコア ('_') はパラメータ構造体の配列キーを区切ります。
と一致する例を次に示します。
$testUseCase_param :
\Small\CleanApplication\Facade::setParameter('testUseCase', ['param' => 'p']);
コードを構成する 3 つのインターフェイス:
これが 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; } }
そして彼のインターフェース:
<?php namespace Small\CleanApplication\Test\Feature\Fixture\Interface; use Small\CleanApplication\Contract\RequestInterface; interface TestDependencyRequestInterface extends RequestInterface { public function getBefore(): string; }
そして、これが応答の実装です:
<?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; } }
そして彼のインターフェース:
<?php namespace Small\CleanApplication\Test\Feature\Fixture\Interface; use Small\CleanApplication\Contract\ResponseInterface; interface TestDependencyResponseInterface extends ResponseInterface { public function getStatus(): string; }
以上が小規模でクリーンなアプリケーションの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。