소규모 클린 애플리케이션

WBOY
풀어 주다: 2024-07-27 06:43:22
원래의
1018명이 탐색했습니다.

Small Clean Application

이 프로젝트는 클린 아키텍처 앱의 애플리케이션 부분에 대한 종속성 주입을 관리하는 클래스 집합입니다.
사용된 프레임워크와 독립적입니다.

Git : https://git.small-project.dev/lib/small-clean-application
패키지스트 : 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');

    }


}
로그인 후 복사

Facade를 사용하여 사용할 수 있습니다.

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']);
로그인 후 복사

인터페이스

코드의 세 가지 인터페이스 구조:

  • 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿