ホームページ > バックエンド開発 > PHPチュートリアル > 小規模でクリーンなアプリケーション

小規模でクリーンなアプリケーション

WBOY
リリース: 2024-07-27 06:43:22
オリジナル
1057 人が閲覧しました

Small Clean Application

このプロジェクトは、クリーン アーキテクチャ アプリのアプリケーションの一部である
の依存関係注入を管理するためのクラスのセットです。 使用されるフレームワークとは独立しています。

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 つのインターフェイス:

  • SmallCleanApplicationContractUseCaseInterface : すべてのユースケースはこのインターフェースを実装する必要があります
  • SmallCleanApplicationContractRequest : すべてのユースケースリクエストはこのインターフェースを実装する必要があります
  • SmallCleanApplicationContractResponse : すべてのユースケース応答はこのインターフェイスを実装する必要があります

これが 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 サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート