2017-09-04 8 views
0

私はこれらのメソッドを呼び出すたびにクラスプロパティが変更されていない、2つのメソッドを持つクラスがある場合、そのクラスはシングルトンになる良い候補ですか?例えばシングルトンとオブジェクトのライフサイクルを理解するための助けが必要

class Foo { 

    public function doFirst($params); 

    public function doSecond(); 

} 

私は私の見解で私のコントローラ内の()メソッド、およびdoSecond()doFirstを呼び出した場合。このクラスがシングルトンであることは理にかなっていますか?私が考えているのは、クラスのプロパティ(クラスの状態)を変更しないと、2つのインスタンスは必要ありません。これは正しい考え方ですか?また、シングルトンクラスは1回のみ設定できます。したがって、クラスを一度構成してからメソッドのうち2つを呼び出すと、シングルトンになる可能性があります。しかし、2番目のメソッドを呼び出す前にクラスを再構成する必要がある場合、シングルトンにすることはできません。

私はとても混乱しており、それをよりよく尋ねる方法を知らないので、私の質問を理解してくれることを願っています。

+0

私はちょうどコントローラからのビューにオブジェクトを渡したいと思います。 –

+0

これは単なる例であり、私はそれを解決していません。私の質問は、シングルトンとオブジェクトのライフサイクルについてです。私が呼び出しているビューは、必ずしも私がdoFirstというコントローラーに属しているとは限りません。 – Anita

答えて

1

メソッドが状態を変更していないか、または1つの状態だけが必要な場合は、クラスをシングルトンにすることができます。

しかし、シングルトンパターンの目的は、グローバルに変更可能な状態which is already quite "code-smelly" on its ownを作成するために使用されます。状態が不変の場合、static(またはVBではShared)のメンバーがうまくいくでしょう。

Fooクラスにこれら2つのメソッドしかない場合は、static(またはVBではShared)とマークします。なぜなら、彼らは機能するために「状態」を必要としない「ヘルパー」の方法のように思えるからです。

2番目のメソッドを呼び出す前に状態を変更する場合は、シングルトンの代わりにdependency injectionのような別のパターンを使用することをお勧めします。

+0

ありがとう、私はあなたの言うことを理解しています。私は可変ではないオブジェクトを作成したいが、私はDIコンテナを使いたいので、コード全体でインターフェイスを「インスタンス化」できるので、実装を簡単に変更できる。それは意味をなさないでしょうか? – Anita

+0

@Anitaこれは大丈夫です。 DIを使用してください。 – Sweeper

関連する問題