国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

ホームページ バックエンド開発 PHPチュートリアル PHP での DDD ユースケースの実裝

PHP での DDD ユースケースの実裝

Nov 12, 2024 pm 10:18 PM

Implementing a DDD Use Case in PHP

PHP での DDD ユースケースの実裝

この記事では、PHP のドメイン駆動設(shè)計 (DDD) ユースケース モデルを検討し、インターフェイスとドメイン固有のクラスを利用してデータの永続性を管理する方法を示します。 TaxPersistUseCase クラスを調(diào)べます。このクラスは永続化マネージャー (TaxManagerInterface) を使用して、稅金を表す Tax 型のエンティティを保存します。

このモデルは DDD 原則を強調(diào)しています。依存関係の挿入とエラー処理のベスト プラクティスに従って、各コンポーネントがインターフェイス、具體的な実裝、例外に明確に分離されています。

TaxPersistUseCase の構(gòu)造

TaxPersistUseCase クラスは、稅の永続化に関連するビジネス ロジックを処理します。このアプローチのロジックと構(gòu)造を明確にするために、いくつかのセクションに分かれています。

依存関係の宣言

namespace Domain\Application\UseCase\Order;

use Domain\Application\Entity\Order\Tax;
use Domain\Application\Gateway\Manager\Order\TaxManagerInterface;
use Domain\Application\UseCase\Order\Exception\NotFoundException;
use Domain\Application\UseCase\Order\Interfaces\TaxPersistRequestInterface;
use Domain\Application\UseCase\Order\Interfaces\TaxPersistResponseInterface;
use Domain\Exception\BadRequestException;
use Domain\Exception\FormException;
use Small\CleanApplication\Contract\UseCaseInterface;
use Small\Collection\Collection\StringCollection;
use Small\SwooleEntityManager\EntityManager\Exception\EmptyResultException;

TaxPersistUseCase クラスは、稅金の永続性を処理するためにいくつかのインターフェイスと例外に依存します。彼らの役割の內(nèi)訳は次のとおりです:

TaxManagerInterface : 稅金永続性マネージャーのインターフェイス。

TaxPersistRequestInterface および TaxPersistResponseInterface : ユースケースのリクエストとレスポンスのインターフェース。
例外: BadRequestException、FormException、NotFoundException などのさまざまな例外は、コンテキスト固有のエラーの管理に役立ちます。

TaxPersistUseCase クラスの実裝

namespace Domain\Application\UseCase\Order;

use Domain\Application\Entity\Order\Tax;
use Domain\Application\Gateway\Manager\Order\TaxManagerInterface;
use Domain\Application\UseCase\Order\Exception\NotFoundException;
use Domain\Application\UseCase\Order\Interfaces\TaxPersistRequestInterface;
use Domain\Application\UseCase\Order\Interfaces\TaxPersistResponseInterface;
use Domain\Exception\BadRequestException;
use Domain\Exception\FormException;
use Small\CleanApplication\Contract\UseCaseInterface;
use Small\Collection\Collection\StringCollection;
use Small\SwooleEntityManager\EntityManager\Exception\EmptyResultException;
  • コンストラクターと依存関係の注入: コンストラクターは TaxManagerInterface のインスタンスを注入し、TaxPersistUseCase を特定の実裝に結(jié)合することなく、Tax オブジェクトの永続性をこのインスタンスに委任します。
  • リクエストタイプのチェック:execute メソッドは、$request オブジェクトが TaxPersistRequestInterface を?qū)g裝していることを検証します。これにより、受信したリクエストが期待されるコントラクトに準拠していることが保証され、インターフェイスレベルの検証が提供されます。
  • Tax オブジェクトの永続化: リクエストが有効な場合、ユースケースは getTax() を介して $request から Tax オブジェクトを抽出し、TaxManagerInterface の applicationPersist メソッドを呼び出します。この永続化プロセスは、潛在的な例外を処理するために try-catch ブロック內(nèi)にカプセル化されています
  • EmptyResultException: Tax エンティティが見つからない場合、この例外が捕捉され、エラーを通知するために NotFoundException がスローされます。
  • FormException: フォームの検証が失敗した場合、FormException がキャプチャされ、エラー メッセージが StringCollection に保存されます。
  • 匿名クラスによる動的応答: 匿名クラスは、TaxPersistResponseInterface を?qū)g裝して、ユースケースの応答を返します。これには getTax() メソッドと getMessages() メソッドが含まれており、それぞれ Tax エンティティとエラー メッセージにアクセスできます。

ユースケースインターフェイス

インターフェイスは、各コンポーネントが遵守する必要がある規(guī)約を定義し、分離とテスト容易性を促進します。

稅務(wù)マネージャーインターフェイス

このインターフェースは、取得や永続化など、稅金を管理するためのメソッドを指定します:

class TaxPersistUseCase implements UseCaseInterface
{

    public function __construct(
        protected TaxManagerInterface $taxManager,
    ) {}

    public function execute(mixed $request): TaxPersistResponseInterface
    {

        if (!$request instanceof TaxPersistRequestInterface) {
            throw new BadRequestException(
                self::class . ' accepts only request instance of ' . TaxPersistRequestInterface::class
            );
        }

        $tax = $request->getTax();
        $messages = new StringCollection();

        try {
            $this->taxManager->applicationPersist($tax);
        } catch (EmptyResultException $e) {
            throw new NotFoundException($e->getMessage());
        } catch (FormException $e) {
            $messages = $e->getFormMessages();
        }

        return new class($tax, $messages) implements TaxPersistResponseInterface
        {
            public function __construct(
                protected readonly Tax $tax,
                protected readonly StringCollection $messages,
            ) {}

            public function getTax(): Tax
            {
                return $this->tax;
            }

            public function getMessages(): StringCollection
            {
                return $this->messages;
            }
        };

    }

}
  • findById() および findByName(): これらのメソッドを使用すると、ID または名前で稅を取得できます。
  • applicationPersist(): このメソッドは、Tax エンティティの永続性を保証します。

TaxPersistRequestInterface

このインターフェースは、TaxPersistUseCase によって予期されるリクエストの構(gòu)造を定義します:

interface TaxManagerInterface
{
    public function findById(int $id): Tax;
    public function findByName(string $name): Tax;
    public function applicationPersist(Tax $tax): self;
}
  • getTax() : このメソッドは永続化される Tax エンティティを返し、ユースケースが関連するドメイン オブジェクトに直接アクセスできるようにします。 TaxPersistResponseInterface
  • 応答インターフェイスにより、TaxPersistUseCase が準拠した応答を返すことが保証されます。
interface TaxPersistRequestInterface extends RequestInterface
{
    public function getTax(): Tax;
}
  • getTax(): 永続化された Tax エンティティを返すか、エラーが発生した場合は null を返します。
  • getMessages(): フォーム エラーが発生した場合は、エラー メッセージを含む StringCollection を返します。

エラーと例外の処理

例外は、ドメイン固有のエラーを捕捉することにより、DDD で重要な役割を果たします。

  • BadRequestException: ユースケースが間違ったタイプのリクエストを受信した場合にスローされます。
  • NotFoundException: 探した稅エンティティが見つからない場合にスローされます。
  • FormException: 検証エラーを処理するためにキャッチされ、エラー メッセージが StringCollection で返されます。

以上がPHP での DDD ユースケースの実裝の詳細內(nèi)容です。詳細については、PHP 中國語 Web サイトの他の関連記事を參照してください。

このウェブサイトの聲明
この記事の內(nèi)容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰屬します。このサイトは、それに相當する法的責(zé)任を負いません。盜作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡(luò)ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脫衣畫像を無料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード寫真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

寫真から衣服を削除するオンライン AI ツール。

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中國語版

SublimeText3 中國語版

中國語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統(tǒng)合開発環(huán)境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PHPベースのAPIをバージョン化するためのベストプラクティスは何ですか? PHPベースのAPIをバージョン化するためのベストプラクティスは何ですか? Jun 14, 2025 am 12:27 AM

Toversionaphp Basedificefectivivivity、useurl Basedversioning forclarity-andeaseaseasedease、depateversionedcodetoavoidconflicts、deprecateoldversions withclearcommunication、andconsider-customheadersally whendary.starttheversionionintheurl(e.g。、/api/v

PHPに認証と承認を?qū)g裝するにはどうすればよいですか? PHPに認証と承認を?qū)g裝するにはどうすればよいですか? Jun 20, 2025 am 01:03 AM

tosecurelyhandLeauthenticationAndauthorizationInizationInization、followTheSteps:1.LwayShashPasswordswithPassword_hash()andverifyusingpassword_verify()、usepreparedStatementStatementStatementStatementStatementStain、andstoreUserdatain $ _SessionAfterlogin.2.implementRementRementRementRementRementRementRementRole

PHPの弱い參照(WeakMap)とは何ですか? PHPの弱い參照(WeakMap)とは何ですか? Jun 14, 2025 am 12:25 AM

phpdoesnothaveabuiltinweakmapbutofferswutreferenceforsimilarfunctionality.1.weakreferenceallowsholdingReferences withoutpreventinggarbagecollectrection.2.itisusfulfurcaching、eventlisteners、およびmetadatawithectingovecting objectinimulatea

PHPにおける手続き型とオブジェクト指向のプログラミングパラダイムの違いは何ですか? PHPにおける手続き型とオブジェクト指向のプログラミングパラダイムの違いは何ですか? Jun 14, 2025 am 12:25 AM

ProceduralAndObject-OrientedProgramming(OOP)InphpdifferSifically-datability、andDatahandling.1.proceduralprogramsessusessuseSideSized funized、surtableforsmallscript.2.ooporganizescodeIntoclassesandobjects、ModelingReal-worden

PHPでファイルアップロードを安全に処理するにはどうすればよいですか? PHPでファイルアップロードを安全に処理するにはどうすればよいですか? Jun 19, 2025 am 01:05 AM

PHPでファイルアップロードを安全に処理するために、コアはファイルタイプを確認し、ファイルの名前を変更し、権限を制限することです。 1。Finfo_File()を使用して実際のMIMEタイプを確認し、Image/JPEGなどの特定のタイプのみが許可されます。 2。uniqid()を使用してランダムファイル名を生成し、非webルートディレクトリに保存します。 3. PHP.iniおよびHTMLフォームを介してファイルサイズを制限し、ディレクトリ権限を0755に設(shè)定します。 4. Clamavを使用してマルウェアをスキャンしてセキュリティを強化します。これらの手順は、セキュリティの脆弱性を効果的に防止し、ファイルのアップロードプロセスが安全で信頼性が高いことを確認します。

PHPのNOSQLデータベース(Mongodb、Redisなど)とどのように対話できますか? PHPのNOSQLデータベース(Mongodb、Redisなど)とどのように対話できますか? Jun 19, 2025 am 01:07 AM

はい、PHPは、特定の拡張機能またはライブラリを使用して、MongoDBやRedisなどのNOSQLデータベースと対話できます。まず、MongoDBPHPドライバー(PECLまたはComposerを介してインストール)を使用して、クライアントインスタンスを作成し、データベースとコレクションを操作し、挿入、クエリ、集約、その他の操作をサポートします。第二に、PredisライブラリまたはPhpredis拡張機能を使用してRedisに接続し、キー価値設(shè)定と取得を?qū)g行し、高性能シナリオにPhpredisを推奨しますが、Predisは迅速な展開に便利です。どちらも生産環(huán)境に適しており、十分に文書化されています。

PHPの==(ゆるい比較)と===(厳密な比較)の違いは何ですか? PHPの==(ゆるい比較)と===(厳密な比較)の違いは何ですか? Jun 19, 2025 am 01:07 AM

PHPでは、==と==の主な違いは、タイプチェックの厳格さです。 ==タイプ変換は比較の前に実行されます。たとえば、5 == "5"はtrueを返します。===リクエストは、trueが返される前に値とタイプが同じであることを要求します。たとえば、5 === "5"はfalseを返します。使用シナリオでは、===はより安全で、最初に使用する必要があります。==は、タイプ変換が必要な場合にのみ使用されます。

最新のPHP開発とベストプラクティスを最新の狀態(tài)に保つにはどうすればよいですか? 最新のPHP開発とベストプラクティスを最新の狀態(tài)に保つにはどうすればよいですか? Jun 23, 2025 am 12:56 AM

postaycurrentwithpdevellyments andbest practices、follow keynewsourceslikephp.netandphpweekly、egagewithcommunitiessonforums andconferences、keeptooling and gradivallyadoptnewfeatures、andreadorcontributeTopensourceprijeprijeprijeptrijeprijeprests.

See all articles