MVCアーキテクチャでは、モデルはアプリケーションで使用されるデータを格納するために使用されます。クラスを作成し、いくつかの静的プロパティを使用してデータを保存し、アプリケーション全体で使用できるようにします。たとえば、データグリッドがある場合、モデルクラスで静的配列コレクションを使用します。サービスが呼び出されるたびに更新し、データバインディングを使用して、データグリッドのデータプロバイダーを更新します。シングルトンクラスもこのタスクを実行するために使用できることを読みました。モデルクラスに使用する方法は優れていますか、それとも他の方法もありますか?
2 に答える
Tianshenが言及した議論が指摘しているように、静的変数の束とシングルトンの間にほとんど違いはありません。どちらもグローバル変数の形式と見なすことができ、それに伴うすべての欠点があります。ここでは、シングルトンがどのように悪であるかについて議論するつもりはありません。あなたがウェブ上で簡単に見つけることができる主題についてすでにたくさん書かれています。
ただし、代替案を提示したいと思います。制御の反転(IoC)、依存性注入(DI)とも呼ばれます。このパターンについて簡単に説明しますが、自分でたくさんの情報を見つけることもできます。あなたの例からArrayCollectionを取ります。静的変数またはシングルトンパターンを避けたい場合は、1つのインスタンスを作成し、そのインスタンスをアプリケーション全体でオブジェクトからオブジェクトに渡す必要があります。おそらく、インスタンスを渡さないオブジェクトを通過する必要があります。本当に必要ですが、これもあまりきれいではありません。
IoCコンテナが付属しています(Flexアプリの場合、プロジェクトに追加するライブラリの形式を取ります)。このようなライブラリを使用すると、そのArrayCollectionを1つの場所で作成/構成し、IoCにその単一のインスタンスを「注入」させることができます。それを必要とするクラスは何でも。
具体的な例:このような構成ファイルがあるかもしれません
<fx:Object>
<s:ArrayCollection id="myLetters">
<fx:String>A</String>
<fx:String>B</String>
</s:ArrayCollection>
</fx:Object>
そしてこのようなクラス
public class MyClass {
[Inject(id="myLetters")]
public var letters:IList;
}
IoCコンテナは、インスタンス化さmyLetters
れるたびにArrayCollectionインスタンスを挿入しMyClass
ます。他にも多くの注入テクニックがありますが、この例はあなたにアイデアを与えるためのものです。
この記事を書いている時点で、私はParsleyがFlexで最も広く使用されているIoCコンテナであると信じています。
シングルトンとスタティックを比較するこのディスカッションを読むことができます。C#ですが、同様のオブジェクト指向の哲学が適用されます。
つまり、シングルトンはより優れた柔軟性を提供します。Flexアプリケーションにデータバインディングを使用する場合、シングルトンを使用すると、カスタム変更イベントをディスパッチできるEventDispatcherを継承できます。カスタム変更イベントを使用すると、アプリケーションのパフォーマンスが向上します。