質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

アーキテクチャ

アーキテクチャとは、情報システム(ハードウェア、OS、アプリケーション、ネットワーク等)の設計方法、設計思想、設計思想に基づいて構築されたシステム構造をアーキテクチャと呼びます

ドメイン駆動設計

ドメイン駆動設計(Domain-driven design, DDD)とは、ソフトウェアの設計手法、および設計思想や哲学のことです。ドメインモデル構築の際に、設計上の判断を決定する枠組みとドメイン設計に関して議論するボキャブラリを提供するものです。

Q&A

2回答

829閲覧

ドメイン駆動設計のコントローラーとユースケースのマッピングについて

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

アーキテクチャ

アーキテクチャとは、情報システム(ハードウェア、OS、アプリケーション、ネットワーク等)の設計方法、設計思想、設計思想に基づいて構築されたシステム構造をアーキテクチャと呼びます

ドメイン駆動設計

ドメイン駆動設計(Domain-driven design, DDD)とは、ソフトウェアの設計手法、および設計思想や哲学のことです。ドメインモデル構築の際に、設計上の判断を決定する枠組みとドメイン設計に関して議論するボキャブラリを提供するものです。

0グッド

0クリップ

投稿2021/03/14 18:27

編集2022/11/04 10:21

ドメイン駆動設計でコントローラークラスとユースケースクラスのマッピングについて検討しています。
以下のようなコントローラーに2つのメソッドがあったとします。

actionBの処理は、UseCaseAクラスの実行結果を、UseCaseBクラスのメソッド引数として使っています。
UseCaseAクラスは、本来はコントローラーのactionAの処理の為に作成したものですが、
簡素で汎用的な処理しか記述していないので、コントローラーの複数の箇所から呼び出せるようにしています。

ドメイン駆動において、UseCaseクラスあるいはServiceクラスを、複数のメソッドから呼び出せるようにする形式はありなのでしょうか。

php

1public function actionA(Request $request){ 2 $useCaseA = new UseCaseA(); 3 $dataA = $useCaseA->execute(); 4 5 return ['dataA' => $dataA] 6} 7public function actionB(Request $request){ 8 $useCaseA = new UseCaseA(); 9 $dataA = $useCaseA->execute(); 10 11 $useCaseB = new UseCaseB(); 12 $dataB = $useCaseB->execute($dataA); 13 14 return ['dataB' => $dataB] 15}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ありだとは思いますが、複雑度は上がっちゃうと思います。
usecaseBはusecaseAの処理結果が無いと実行できないのであれば、
usecaseAの内部からusecaseBに必要な部分を切りだして、usecaseAとusecaseBでは切り出した処理を呼び出すとした方がレイヤーを飛び越えなくなってコントローラーから見た複雑度は、ある程度下がるのかなと思います。

松岡さんという方のブログ内で同じような解決方法を取っているので参考になるかもしれません。
下記にリンクを記載しておきます。
https://little-hands.hatenablog.com/entry/2020/12/22/ddd-in-first-3month

投稿2022/11/04 01:21

kaisyano-inu

総合スコア23

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

共通の並列処理用メソッドを作りたい場合はtraitで対応できそうな気はしますが、
こういうことでしょうか?

traitを使って設計してみる

PHP

1trait Usecase 2{ 3 private function execute($value = NULL){ 4 5 } 6} 7 8class Hoge 9{ 10 use Usecase; 11 12 public function actionA(){ 13 $this -> execute(NULL); 14 } 15 16 public function actionB(){ 17 $this -> execute($dataA); 18 } 19 20}

投稿2021/03/26 22:03

FKM

総合スコア3608

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問