2009-06-15 6 views
6

私は最近ActionScript/Flexプログラミングをやり始めています。私は...驚いています...私が見るシングルトンの数によって。彼らはどこにでもいる!標準的なライブラリ、フレームワーク...ちょっと、私は今朝、ブログの記事を読んで、著者が、彼のクラスのいくつかをシングルトンにリファクタリングしたと言いました!シングルトンがActionScriptの文化に浸透するのはなぜですか?

ASコミュニティがシングルトンをそんなに好きな理由について、合理的な説明がありますか?

答えて

5

ASコミュニティだけでなく、ソフトウェア設計の一般的な傾向です。コンポーネント指向プログラミングはサービスオブジェクトの初期設定と配線を促し、一時的なメッセージを使用して連携します。シングルトンはこのアイデアの自然な部分です。

また、シングルトンは、作成に費用がかかるオブジェクトの実行時の影響を軽減します。

+1

私はシングルトンを広範囲に使用しているので、関数型プログラミング言語を使用するように感じるので、この皮肉なことがあります。 – Kai

+0

これらのテクニックの間には、カットアンドドライの境界はありません。良い練習は、それらからすべてのベストビットを借りるように進化しています。 – skaffman

+5

@カイ:本当ですか?それはなぜですか?関数型言語は純粋な関数(グローバルな状態を強く妨げ、冪等を奨励する)を奨励しているのに対して、シングルトンはグローバルな状態を促進する(つまり、冪等を阻止する)。 –

3

どこから来ているのか分かりませんが、Flexはそれらでいっぱいです。あなたが言及しているように、私たちは他の場所でそれらを見ています。彼らは最初は魅力的に見えますが、ほとんどの場合、道路の途中で頭痛が発生します。

誰もがMiškoHeveryのブログ(start with this one)を読む必要があります。

シングルトンのものには、例えばLoggerがありますが、それは使い道があります。

@skaffmanパフォーマンス上の利点に関しては、シングルトンパターンを実装せずに、アプリケーション内にオブジェクトの単一インスタンスを配置することは完全に合理的です。

+0

シングルトンは必要ありません実際には、パターン(GoFの本で指定されている)はむしろ不愉快で原油です。アプリケーションフレームワークを使用してシングルトンを強化する方がよいでしょう。 – skaffman

+0

素晴らしい記事、リンクありがとう! – Soviut

5

私はそれが古くから働いていたと思います...それらの昔は、フラッシュをやっている重いプログラマーはほとんどいませんでした。彼らは天才だと思っていました。人々の大半は印刷業界から移籍した人々でした...彼らはFlashがwebzの新しいイラストレーターだと思っていました。

昔、フラッシュ開発者は使いやすい 'TellTarget'を使用して、特定のMovieClipにアクセスしました。このMovieClipは、MovieClip内のMovieClip内にネストすることができます。 (私を含む)人々は決してソフトウェアの背景を持っていなかったので、私たちはこの視覚の世界に住んでいて、Flashはデザイナーの考え方を考えていました。 AS2では、たくさんの人(コーディングにうまくいかなかった人たち)も、クラス内でスコープを失うことで多くの問題を抱えていました...クラスでスコープを緩めないように助けたProxyクラスを覚えています。最近はたくさんの頭痛があります。徐々に彼らの知恵をアップグレードした人々は、OOPのコーディングの新しい方法を完全に包囲することはありませんでした。シングルトンを「 global」のように使うことができると思う人もいます。彼らはいつでもアプリケーション内のどこからでもこの ' global'と話すことができます。

私はそれが単純だと思います...

-1

私は以来この点について自分の立場を変更しました。

actionscript3のオブジェクトを使用すると、モジュラを増やすことができました。

私のように、OOPのメリットは、大抵の初心者のフラッシュ開発者にとっては納得がいくものではありません。

私は本当にこれには2つの理由があると思います。

1。)基本について話すのは退屈なので、ほとんどの情報は非常に複雑すぎる。 OOPは実際にシステムを分かりやすく再利用可能な部分に分割しています。

2)手続き型プログラミングはフラッシュの多くは、の状態を管理についてです)、それは、特定の作業の流れにあなたをロックしますが、作るプログラマの初めのためにそれが簡単に

3を理解するために、ワークフローに似ていますフラッシュウィジェットなので、ある中央の場所で情報を管理するのにある程度の意味があります。

----------------元の応答----------------

私はコミュニティASことの一部ですシングルトンを好き(そして使用する)。

私はプログラミング(3年PHP/MySQL/Javascript/Actionscript proffesionally)には比較的新しいです。

モジュラープログラミングと古典的なクラスベースの継承OOPの間には明確な違いがあると思います。

私が理解しているところからOOPの大部分を占めるモジュラプログラミングは、効果的なプログラムデザインの非常に重要な部分です。

何度も使用されているものは、別の機能に移動することができます。類似の機能または属性を共有する操作のグループは、それらの共通部分に分離することができ、次に異なる部分をそのインスタンスに一意にすることができます。

しかし、私は、継承ベースのOOPのほとんどがちょうど熱い空気である私の意見では、相互にモジュールのコレクション

でこれを行うにはそれがより効果的見つけます。お互いに対話するモジュールは、基本的に同じものの15バージョンのプログラムの活動をモデル化するはるかに効率的な方法です。

私はコアを作り、モジュールをコアにアタッチさせますが、サブオブジェクトをコアの延長線にすることはありません。私はクラスを拡張するのが面倒だと思って、そこから必要な柔軟性を取り除くことによって開発を停滞させます。

私がよく読む(そして継承ベースのOOPの背後にある)理由の1つは、読みやすさとメンテナンス性が向上することです。私にとっては、プログラマーは、プログラムにとって効果的なシステムよりもむしろ、使いやすいシステムを使いたいということです。

私はすべて、きれいでわかりやすいコードとして書くことができますが、プログラムの創造性と柔軟性を阻害するポイントを超えてはいません。

私はOOPですが、私はシングルトン、プロトタイプ、またはモジュールベースのaproachを好んでいます。

+0

実際に継承モデルでも型の安全性が確保されています。ゲームオブジェクトは単一のオブジェクトから派生し、すべての破壊可能なオブジェクトは破壊可能なインターフェイスなどを継承します。継承はオーバーライドだけではありません。 – Soviut

+0

私は砲弾でフライを撃っているように聞こえますが、オブジェクトは1つの大きなバケツよりも整理されていなければなりません。各グループのデストラクタを整列させるか、または個別のデストラクタモジュールを1つのグローバルオブジェクトとして作成し、すべてのオブジェクトにそのオブジェクトと通信させます。 最高のゲームは多様なものなので、あなたが描くゲームは楽しいものではないように聞こえる。 –

+0

好奇心を持たずに、単体テストや他の形式の自動テストをコードで実行していますか? –

3

すでにここで作成されている優れた点については、Flashプロジェクトをまとめるスピードと、ほとんどの場合メンテナンスする必要がないという事実があります。できるだけ早く処理を完了してください。シングルトンはそれを実現する良い方法です。参照、依存関係注入などを渡すのではなく、getInstanceを使用することができます。実際には、実際には、理論的には複数のクラスが必要な場合でも、多くのクラスのインスタンス

関連する問題