問題タブ [design-patterns]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
7 に答える
423 参照

design-patterns - 複数の値を持つエンティティに最適な設計

詳細な情報を取得している車両のようなエンティティがあるとします。撮りたい車は赤、黒、白に塗られています。フロントタイヤはブリヂストンの275/35-18、リヤタイヤは325/30-19。また、タイヤが 2 つしかない場合もあれば (これは車両の一種であるオートバイと見なされます)、18 本のタイヤがすべて異なる場合もあります。次に、エンジンのサイズのように、常に単一の値であるフィールドがいくつかあります (想像力を働かせると、複数のエンジンを搭載した車両を考えることができますが、私はこれを単純にしようとしています)。

これに対処するための現在の戦略は、複数の値を持つことができるフィールドごとにテーブルを用意することです。これにより、多数のテーブルが生成され (この要件を持つさまざまなエンティティが多数あります)、少し臭いがします。これが最善の戦略ですか?そうでない場合、何が良いでしょうか?

0 投票する
5 に答える
349 参照

c# - 多くの異なるサブクラスを持つ型スライスに関する設計上の問題

私が頻繁に遭遇する基本的な問題ですが、明確な解決策を見つけたことはありますが、共通の基本クラスまたはインターフェイスの異なるオブジェクト間の相互作用の動作をコーディングする必要がある場合です。少し具体的にするために、例を挙げます。

ボブは、「クールな地理的効果」をサポートする戦略ゲームのコーディングを行っています。これらは、部隊が水中を歩いている場合、25% 減速するなどの単純な制約に切り上げられます。草の上を歩いている場合は 5% 遅くなり、歩道を歩いている場合は 0% 遅くなります。

現在、経営陣はボブに、新しい種類の軍隊が必要だと言いました。ジープ、ボート、ホバークラフトもあります。また、彼らはジープが水に浸かった場合にダメージを受けるようにし、ホバークラフトは 3 つの地形タイプすべてを無視するようにしました。噂によると、ユニットの速度を落としてダメージを受けるだけでなく、さらに多くの機能を備えた別の地形タイプを追加する可能性もあります.

非常に大まかな疑似コードの例を次に示します。

おわかりのように、Bob が最初からしっかりとした設計文書を持っていれば、状況は改善されたでしょう。ユニット数と地形タイプが増えるにつれて、コードの複雑さも増します。ボブは、どのメンバーをユニット インターフェイスに追加する必要があるかを考える必要があるだけでなく、多くのコードを繰り返さなければなりません。新しい地形タイプでは、基本的な IUnit インターフェイスから取得できるものからの追加情報が必要になる可能性が非常に高くなります。

別のユニットをゲームに追加するたびに、新しいユニットを処理するために各地形を更新する必要があります。明らかに、これは処理されるユニットのタイプを決定する醜い実行時チェックは言うまでもなく、多くの繰り返しになります。この例では特定のサブタイプへの呼び出しをオプトアウトしましたが、そのような種類の呼び出しを行う必要があります。例としては、ボートが陸地に衝突したときにプロペラが損傷することがあります。すべてのユニットにプロペラがあるわけではありません。

この種の問題が何と呼ばれているのかはわかりませんが、それは多対多の依存関係であり、切り離すのに苦労しています。カップリングをきれいにしたいので、ITerrain の各 IUnit サブクラスに何百ものオーバーロードがあるのは好きではありません。

この問題に関する何らかの光明が非常に求められています。おそらく、私は軌道から外れていると考えていますか?

0 投票する
18 に答える
183623 参照

design-patterns - 工場のパターン。ファクトリ メソッドを使用する場合

オブジェクト内でファクトリ クラスの代わりにファクトリ メソッドを使用することをお勧めするのはどのような場合ですか?

0 投票する
29 に答える
325453 参照

java - Javaでシングルトンパターンを実装する効率的な方法は何ですか?

Javaでシングルトン設計パターンを実装する効率的な方法は何ですか?

0 投票する
11 に答える
11043 参照

c++ - データフロー プログラミング - パターンとフレームワーク

提案されたBoost::Dataflowライブラリに出くわしました。興味深いアプローチのようで、C++ 用の代替フレームワークが他にあるかどうか、また関連する設計パターンがあるかどうかを知りたいと思っていました。Boost::Dataflow を除外したわけではありません。ドメインと自分のオプションをよりよく理解できるように (または必要に応じて自分でロールバックできるように)、利用可能な代替手段を調べているだけです。

0 投票する
13 に答える
3814 参照

design-patterns - このアンチパターン/コードの臭いの名前はありますか?

私はこのアプローチを支持していませんが、最近それを見て、有罪の当事者を指すために使用できる名前があるかどうか疑問に思いました。だからここに行きます。

これでメソッドができたので、値を返したいと思います。また、エラーコードを返したいと思います。もちろん、例外の方がはるかに良い選択ですが、何らかの理由で代わりにエラーコードが必要です。ここで悪魔の代弁者を演じていることを忘れないでください。したがって、次のようなジェネリッククラスを作成します。

そして、次のように関数を宣言します。

このパターンのバリエーションの1つは、文字列の代わりにエラーコードに列挙型を使用することです。さて、私の質問に戻りましょう。これには名前がありますか?もしそうなら、それは何ですか?

0 投票する
5 に答える
7623 参照

model-view-controller - PAC 設計パターンの例を知っていますか?

MVC ではなく、 Presentation-Abstraction-Controlデザイン パターンを使用している Web サイトまたは Web アプリケーションを指摘できる人はいますか? デスクトップ アプリケーションはこのように簡単に見つけることができますが (例: GIMP)、Web で何かを探しています。

0 投票する
5 に答える
6946 参照

c++ - C++ のカスタム イベント?

C++ でカスタム イベントを作成することはできますか? たとえば、変数 X と変数 Y があるとします。X が変化するたびに、Y を 3X に設定する関数を実行したいと考えています。そのようなトリガー/イベントを作成する方法はありますか? (トリガーは一部のデータベースで一般的です)

0 投票する
2 に答える
1112 参照

perl - Perl での戦略パターンのクリーンな実装

Perl で戦略パターンのクリーンな実装を作成するにはどうすればよいですか? Perl の機能を活用した方法で行いたいと考えています。

0 投票する
8 に答える
73618 参照

design-patterns - シェル スクリプトの設計パターンまたはベスト プラクティス

シェル スクリプト (sh、bash など) のベスト プラクティスや設計パターンについて説明しているリソースを知っている人はいますか?