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

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

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

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

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

オブジェクト指向

オブジェクト指向プログラミング(Object-oriented programming;OOP)は「オブジェクト」を使用するプログラミングの概念です。オブジェクト指向プログラムは、カプセル化(情報隠蔽)とポリモーフィズム(多態性)で構成されています。

Q&A

解決済

1回答

812閲覧

これはFactoryパターンなのか?

takuyaKK

総合スコア37

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

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

オブジェクト指向

オブジェクト指向プログラミング(Object-oriented programming;OOP)は「オブジェクト」を使用するプログラミングの概念です。オブジェクト指向プログラムは、カプセル化(情報隠蔽)とポリモーフィズム(多態性)で構成されています。

0グッド

0クリップ

投稿2021/05/30 14:57

編集2021/05/31 06:25

「java言語で学ぶデザインパターン入門」を今読んでいて、そこで出てきたFactroyパターンは実際の業務でどのように使われるのだろうかと調べていたらこんな記事が出てきました。

LaravelでFactoryパターンとFacadeパターンを実践

ですがここで使われているコードがFactoryメソッドパターンなのかAbstract Factoryなのかよく分かりません。
個人的にはただインスタンス生成処理をPaymentFactoryに閉じ込めて、いわゆるオブジェクト指向のカプセル化に当たることをしているだけで、別にFactoryメソッドパターンでもAbstract Factoryでもないように思ってしまったのですが...

*リンク上の記事でも投稿者に確認中です

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

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

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

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

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

m.ts10806

2021/05/30 18:43

Qiitaですし投稿主に色々確認してみては。 読者からのフィードバックは嬉しいものと思います(基本的には)
takuyaKK

2021/05/30 23:55

なるほど、キータでも聞いてみます! テラテイルでも回答の募集は引き続き継続しようと思います。
m.ts10806

2021/05/31 00:34

個人的な意見ですが確かにデザインパターンは提唱されたものではあるものの確固たる言語仕様として提供されるものではないので、派生も多く、実装者が「こうだ」と主張すればそうなるということもあるのではと思います。あくまで個人の解釈です。 中身の作りがどうかというより、使いやすいかどうかで判断しても良いかもしれません。 それにPHPのオブジェクト指向は後付ですしね。Javaとは経緯も歴史も違います。
takuyaKK

2021/05/31 00:50

確かにそういう考え方もありかもしれませんね。ありがとうございます。
m.ts10806

2021/05/31 01:04

引き続きこちらでも募集されるならマルチポストにもなるので、当該記事で投稿者に確認中である旨は質問にも明記されたほうが良いかと思います。 で、投稿者とのやり取りで解決したのでしたら、こちらにもきちんとフィードバック(特に自身の理解内容を残すこと)はしてくださいね
guest

回答1

0

ベストアンサー

Factoryだと思いますよ
デザインパターンは形だけ見ても同じものに違う名前が付いていることもあり、
解決したい課題の違いを気にすると良いですよ。

投稿2021/05/31 06:06

rysh

総合スコア874

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

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

takuyaKK

2021/05/31 06:26

すいません、個人的にはただインスタンス生成処理をPaymentFactoryに閉じ込めて、いわゆるオブジェクト指向のカプセル化に当たることをしているだけのように思えたのですが、なにを持ってFactroyパターンだと思われたのでしょうか?
rysh

2021/05/31 08:13

クラスは通常はコンストラクタを経由してオブジェクトを生成します。オブジェクトを生成する際に何らかの処理が必要な場合にはコンストラクタ内に処理を書くことができます。 生成処理が複雑になった時、生成処理だけ記述したクラスを用意しておくと、可読性やテスト容易性が高まります。 カプセル化とは違うと思いましたが、takuyKKさんの考えるカプセル化とはどういうものでしょうか? 参考:https://en.wikipedia.org/wiki/Encapsulation_(computer_programming)
takuyaKK

2021/05/31 09:45

僕の中でのカプセル化は、関連する操作やデータをがひとつのクラスとして分離して提供してあげることです。カプセル化でいう アクセス修飾子による情報の秘匿みたいなものは僕の定義には含まれていないですがが、他に適切な言葉が思いつかなかったのでカプセル化という単語を使わせてもらいました????‍♂️ 今回の場合でいうと生成処理をコントローラに書くと、コントローラの持つ役割が増えすぎるんでその部分を別のクラスに切り出してあげただけのような気がします。これだけだと別にFactoryパターンといえない気がするので、支払い方法のインスタンス(CollectOnDelivery、creditCard、Bill)ごとに共通するメソッドを定めておいて、コントローラ側ではインスタンスの種類によって条件分岐したりせずに処理を描けるようにしておくべきなのではと思うのですがどうでしょうか?
rysh

2021/05/31 10:22

interfaceを切ってインスタンスで切り替えるのはFactoryMethod、メソッドで区別するならCreationMethodかAbstractFactoryになります。 FactoryMethodやAbstractFactoryは自分がFW作ってるか、FWがそういうインターフェースを提供してるから使わざるおえない時しか使わない気がします。
takuyaKK

2021/05/31 11:23 編集

すいません、なんか認識がズレている気がするのですが、この記事で使われている「Factory パターン」はAbstract FactoryともFactory methodとは別のデザインパターンということでしょうか? この記事で用いられている「java言語で学ぶデザインパターン」にはAbstract FactoryともFactory methodしか乗っていないのですが。
rysh

2021/05/31 13:11

細かい違いは気にせずクラスの定義と生成の処理を切り離したらFactoryくらいに思ってても何も問題ないと思います。
takuyaKK

2021/05/31 13:51

そういう使われ方なんですね。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問