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

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

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

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

Q&A

2回答

3727閲覧

シングルトンパターンをファサードパターンで使う場合

imamoto_browser

総合スコア1161

PHP

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

0グッド

0クリップ

投稿2015/05/29 23:53

シングルトンパターンをファサードパターンで使う場合,シングルトンパターンシングルトンパターンを適用するクラスはTableクラスなどDBアクセスするクラスのみでいいのでしょうか。(DBアクセスするインスタンスが複数乱立するのを防ぐため)

Mypageなどのviewを表示するクラスもLogicクラスを経由してデータベースアクセスをしているといえば、していると言えなくもないと思うのですが。

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

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

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

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

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

guest

回答2

0

つまり、ファザードパターンで

- Facade - Foo - Bar - Baz

のような包含関係になっているとき、どれをシングルトンにするか、ということでしょうか?

Facade のみであるべきだと思います。

シングルトンは実質グローバル変数なので、なるべく少なくなるように務める方が良いですし、↑の例で FooBarBaz をシングルトンにするメリットはなにもないように思います。

もし、Foo のインスタンスが複数作成されることを防止するためにシングルトンを適用したい、ということであれば、それだけのためにシングルトンパターンを適用するのはやめて、開発者全員の合意というかガイドラインというか、コードレビューとか、そういう手段で防止する方が健全だろうと思います。

要するに、シングルトンパターンはどうしてもグローバル変数が欲しい時に妥協して使うものであって、本来の「インスタンスが1つしか存在しないことを保証する」目的では使わないほうが良いです。

シングルトンなクラスが一切のステートを持たないのであればいいですが(それならユーティリティクラスで十分だと思いますが)、グローバルなステートはテストが困難になりやすいです。

投稿2015/05/30 02:21

ngyuki

総合スコア4514

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

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

0

お邪魔します。

javaですがSpringのようなDIコンテナの場合、一般的にはDBアクセサ(DAO: Data Access Object)はシングルトンで使用されることが多いと思います。設定ファイルなどを含む共有リソースの類は、結局のところ相手が一つであるため、シングルトンで提供されることが多いのではないかと思います。
勿論、リソースの排他制御やスレッドセーフな実装を考慮する必要はありますが。

逆に、Facade層は複数のイベントから平行して呼ばれる、同イベントが非同期で平行して動作する、といったことが多いため、シングルトンとするとプリミティブのクラス変数ひとつとっても単純にはスレッドセーフに実装できないですよね。そのためスレッドセーフになるよう慎重に実装するか、シングルトンとしないか、といった選択を実装毎にすることが多いです。
スレッドセーフに実装することが容易か、ということはシングルトンパターンを考慮する上では重要なポイントだと思います。

メモリ効率の問題ではあると思いますが、Facadeをシングルトン化する必然性は、個人的には無いと思っています。rassbery pi やarduinoのような非力なコントローラ上で実装するものであれば、考慮に値する問題だとは思いますが。

そもそもオブジェクト指向というものはグローバル変数を無くしすべての変数にスコープをもたらすべく生み出されたものです。シングルトンパターンはその思想に穴を開けたというか、必要悪というか、例外的にグローバル変数を持つために考案されたものです。
他の回答者さんもおっしゃっていますが、シングルトンパターンの使用には十分な考慮をしたうえで、必要最小限を心がけるということは重要なことでしょうね。

参考になりましたら幸いです。

投稿2015/05/30 04:25

編集2015/05/30 04:29
ShinpeiYamamoto

総合スコア540

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問