タグ付けされた質問 「design-patterns」

設計パターンは、ソフトウェア設計で一般的に発生する問題に対する一般的な再利用可能なソリューションです。デザインパターンの実装に問題がある場合の質問には、このタグを使用します。テキストパターンマッチングに関する質問には、このタグを使用しないでください。このタグを実装の重い質問に使用する場合-実装が記述されているコード言語にタグを付けます。


12
概念的には、ゲームでリプレイはどのように機能しますか?
ゲームでリプレイがどのように実装されるかについて、私は一種の好奇心を持っていました。 最初は、ゲームで行われたすべてのプレイヤー/ aiアクションのコマンドリストがあるだけだと思っていたので、ゲームを「リプレイ」して、エンジンを通常どおりにレンダリングしました。ただし、FPS / RTSゲームのリプレイを確認しました。注意深く調べたところ、粒子やグラフィック/音声のグリッチなども一貫しています(これらのグリッチは一般に一貫しています)。 これはどのようにして起こりますか?固定カメラアングルゲームでは、保存されたストリームにシーン全体のすべてのフレームを書き込み、ストリームを再生するだけかもしれませんが、カメラを一時停止して移動できるゲームには十分ではないようです。周り。すべての時点でシーン内のすべての場所を保存する必要があります(いいえ)。パーティクルなどの場合、これはプッシュする大量のデータであり、プレイ中のゲームのパフォーマンスを大幅に引き出すように見えます。

8
Javaでプラグインシステムを構築する最良の方法
Javaアプリケーションのプラグインシステムをどのように実装しますか? 以下を実現する使いやすい(開発者向けの)システムを用意することは可能ですか? ユーザーはプラグインをアプリのサブディレクトリに配置します プラグインは設定画面を提供できます フレームワークを使用する場合、ライセンスは商用開発と互換性がありますか?


14
クラス内のすべてのメソッドを特定のコードブロックで開始するエレガントな方法はありますか?
すべてのメソッドが同じように開始するクラスがあります: class Foo { public void bar() { if (!fooIsEnabled) return; //... } public void baz() { if (!fooIsEnabled) return; //... } public void bat() { if (!fooIsEnabled) return; //... } } fooIsEnabledクラスのすべてのパブリックメソッドの部分を要求する(そして、できれば毎回書き込むのではない)良い方法はありますか?

10
デザインパターン:抽象ファクトリとファクトリメソッド
注:質問は投稿の最後にあります。 Abstract FactoryとFactory Methodに関する他のスタックオーバーフロースレッドを読みました。各パターンの意図を理解しています。しかし、私はその定義を明確にしていません。 Factoryメソッドは、オブジェクトを作成するためのインターフェースを定義しますが、インスタンス化するものをサブクラスに決定させます。ファクトリメソッドを使用すると、クラスはインスタンス化をサブクラスに遅らせることができます。 対照的に、抽象ファクトリは、具体的なクラスを指定せずに、関連するオブジェクトまたは依存するオブジェクトのファミリを作成するためのインターフェースを提供します。 - ジョン・フェミネラ 抽象ファクトリーと非常によく似ていますファクトリメソッド。私のポイントを説明するために、いくつかのUMLクラスを描画しました。 注意: 図はwww.yuml.comからのものですので、完全に方向付けられていません。しかし、それは無料のサービスです:)。 図は完全ではない場合があります。GoFのデザインパターンはまだ学習中です。 工場での方法: 抽象ファクトリー(1メンバーのみ): 抽象ファクトリー(より多くのメンバー): 質問: 場合抽象工場は一つだけ作成者と一つの製品を持っている、それはまだある、抽象ファクトリパターン?(家族を作成するためのインターフェース) ファクトリメソッドコンクリートクリエーターをインターフェイスから作成できますか、それともクラスから作成する必要がありますか?(クラスはインスタンス化をサブクラスに延期します) 抽象工場は一つだけ作成者と一つの製品を持つことができる場合は、唯一の違いである抽象工場とファクトリメソッド元のための作成者が、後者はクラスであるためにインターフェイスと作成者であることは?

6
ソーシャルネットワークにアクティビティストリームを実装する方法
私は自分のソーシャルネットワークを開発していますが、ユーザーのアクションのストリームの実装例をWeb上で見つけていません...たとえば、各ユーザーのアクションをフィルターする方法は?アクションイベントを保存する方法 アクションストリームとそのアクションにどのデータモデルとオブジェクトモデルを使用できますか?

6
PHPで(C#のように)静的クラスを作成することは可能ですか?
PHPで静的クラスを作成し、C#と同じように動作させたいので、 クラスへの最初の呼び出しでコンストラクターが自動的に呼び出されます インスタンス化は不要 このようなもの... static class Hello { private static $greeting = 'Hello'; private __construct() { $greeting .= ' There!'; } public static greet(){ echo $greeting; } } Hello::greet(); // Hello There!

11
PHPでデータベースにアクセスするシングルトンのユースケースはありますか?
PDOを介してMySQLデータベースにアクセスします。私はデータベースへのアクセスを設定しており、私の最初の試みは次のものを使用することでした: 私が最初に考えたのはglobal: $db = new PDO('mysql:host=127.0.0.1;dbname=toto', 'root', 'pwd'); function some_function() { global $db; $db->query('...'); } これは悪い習慣だと考えられています。少し検索したところ、シングルトンパターンになりました。 「クラスの単一インスタンスが必要な状況に適用されます。」 マニュアルの例によると、これを行う必要があります: class Database { private static $instance, $db; private function __construct(){} static function singleton() { if(!isset(self::$instance)) self::$instance = new __CLASS__; return self:$instance; } function get() { if(!isset(self::$db)) self::$db = new PDO('mysql:host=127.0.0.1;dbname=toto', 'user', 'pwd') …

11
効果的なJavaのビルダーパターン
私は最近、Joshua BlochによるEffective Javaを読み始めました。Builderパターン[本の項目2]のアイデアは本当に興味深いものでした。プロジェクトに実装しようとしましたが、コンパイルエラーが発生しました。以下は本質的に私がやろうとしていたことです: 複数の属性を持つクラスとそのビルダークラス: public class NutritionalFacts { private int sodium; private int fat; private int carbo; public class Builder { private int sodium; private int fat; private int carbo; public Builder(int s) { this.sodium = s; } public Builder fat(int f) { this.fat = f; return this; } public …

7
ServiceLocatorはアンチパターンですか?
最近、Service Locatorのアンチパターンに関するMark Seemannの記事を読みました。 著者は、ServiceLocatorがアンチパターンである2つの主な理由を指摘しています。 APIの使用に関する問題(これで問題 ありません)クラスがサービスロケーターを使用する場合、ほとんどの場合、クラスにはPARAMETERLESSコンストラクターが1つしかないため、依存関係を確認することは非常に困難です。ServiceLocatorとは対照的に、DIアプローチは、コンストラクターのパラメーターを介して依存関係を明示的に公開するため、IntelliSenseで依存関係を簡単に確認できます。 メンテナンスの問題(これは私を困惑させます) 次の例を考えます サービスロケーターアプローチを採用するクラス'MyType'があります。 public class MyType { public void MyMethod() { var dep1 = Locator.Resolve<IDep1>(); dep1.DoSomething(); } } 次に、クラス 'MyType'に別の依存関係を追加します public class MyType { public void MyMethod() { var dep1 = Locator.Resolve<IDep1>(); dep1.DoSomething(); // new dependency var dep2 = Locator.Resolve<IDep2>(); dep2.DoSomething(); } } そして、ここが私の誤解の始まりです。著者は言う: …

4
MVC(Laravel)ロジックを追加する場所
CRUD操作を実行したり、特定の方法で関係を変更したりするたびに、別のことも実行したいとします。たとえば、誰かが投稿を公開するときはいつでも、分析のためにテーブルに何かを保存したいと思います。おそらく最良の例ではありませんが、一般的にはこの「グループ化された」機能がたくさんあります。 通常、私はこのタイプのロジックがコントローラーに組み込まれるのを見ます。多くの場所でこの機能を再現するまでは、それで十分です。パーシャルの作成、APIの作成、ダミーコンテンツの生成を開始すると、DRYを維持することが問題になります。 これを管理するために私が見た方法は、イベント、リポジトリ、ライブラリ、およびモデルへの追加です。それぞれについての私の理解は次のとおりです。 サービス:これは、ほとんどの人がおそらくこのコードを配置する場所です。サービスに関する私の主な問題は、特定の機能を見つけるのが難しい場合があり、人々がEloquentの使用に集中すると、それらが忘れられるように感じることです。メソッドを呼び出す必要があることをどのように知ることができますかpublishPost()ライブラリでます$post->is_published = 1か? 私がこれがうまく機能している唯一の条件は、サービスのみを使用している(そしてコントローラーからEloquentに何らかの方法でアクセスできないことが理想的です)場合です。 最終的には、リクエストが一般的にモデル構造に従っている場合、余分な不要なファイルがたくさん作成されるだけのようです。 リポジトリ:私が理解しているところから、これは基本的にはサービスのようですが、ORMを切り替えることができるインターフェースがあるので、私は必要としません。 イベント:モデルイベントは常にEloquentメソッドで呼び出されるため、通常どおりにコントローラーを記述できるため、これはある意味で最もエレガントなシステムだと思います。私はこれらが乱雑になるのを見ることができます、そして誰かが重要なカップリングのためにイベントを使用している大規模なプロジェクトの例を持っているなら、それを見てみたいです。 モデル:従来は、CRUDを実行し、重要な結合も処理するクラスがありました。CRUD +のすべての機能を知っていたので、これは実際に簡単になりました。 シンプルですが、MVCアーキテクチャでは、これは通常私が行っているとは言えません。ある意味では、検索するのが少し簡単で、追跡するファイルが少ないので、サービスよりもこちらを好みます。少し混乱するかもしれません。この方法の欠点と、ほとんどの人がそうしない理由を聞きたいのですが。 各方法の長所/短所は何ですか?何か不足していますか?

3
オブザーバーの設計パターンと「リスナー」
GOFで説明されているオブザーバーの設計パターンは、さまざまなツールキットにあるリスナーと本当に同じものであるように思えます。概念に違いはありますか、それともリスナーとオブザーバーは本当に同じものですか? (特定のコンピューター言語の実装を探しているのではなく、設計の観点から(もしあれば)違いを理解したいだけです。はい、SOFに関する同様の質問に対するいくつかの回答があることは知っていますが、それらは根付いています特定の言語に関する特定の質問-言語の回答ではなく、デザインの回答を探しています。)

10
エンティティ属性値データベースと厳密なリレーショナルモデルのeコマース
EAV / CRデータベースモデルが悪いと言っても安全です。それは言った、 質問:実行時に変更できるeコマース製品を説明する属性の「クラス」を処理するには、どのデータベースモデル、手法、またはパターンを使用する必要がありますか? 優れたeコマースデータベースでは、オプションのクラスを保存します(テレビの解像度には各テレビの解像度がありますが、次の製品はテレビではなく、「テレビの解像度」がない場合があります)。それらをどのように保存し、効率的に検索し、ユーザーが製品を説明する変数フィールドを使用して製品タイプをセットアップできるようにしますか?顧客が通常はコンソールの奥行きに基づいてテレビを検索することが検索エンジンで判明した場合は、コンソールの奥行きをフィールドに追加し、実行時にテレビ製品のタイプごとに1つの奥行きを追加できます。 優れたeコマースアプリには、一連の製品を表示した後、「ドリルダウン」サイドメニューに「TV解像度」をヘッダーとして表示できるという優れた共通機能があり、上位5つの最も一般的なTV解像度がセットが見つかりました。いずれかをクリックすると、その解像度のテレビのみが表示され、サイドメニューで他のカテゴリを選択してさらにドリルダウンできます。これらのオプションは、実行時に追加される動的な製品属性です。 さらなる議論: 要するに、インターネットやモデルの説明に、次の設定を「劇的に」修正する可能性のあるリンクはありますか? カテゴリテーブルを提案してくれたNoel Kennedyに感謝しますが、必要性はそれよりも大きいかもしれません。以下に別の方法で説明し、重要性を強調します。問題を解決するために視点を修正する必要があるかもしれませんし、EAV / CRに深く入り込む必要があるかもしれません。 EAV / CRモデルに対する肯定的な反応が大好きです。私の仲間の開発者全員が、ジェフリーケンプが以下に触れた内容を述べています。問題は: エンティティは属性を毎週追加および削除します (検索キーワードは将来の属性を指示します) 新しいエンティティが毎週到着します (製品はパーツから組み立てられます) 古いエンティティは毎週消えます (アーカイブされ、人気が低く、季節的) 顧客は2つの理由で製品に属性を追加したいと考えています。 部門/キーワード検索/類似製品間の比較表 チェックアウト前の消費者向け製品構成 属性には、キーワード検索だけでなく、重要性がなければなりません。「ホイップクリームのフロスティング」があるすべてのケーキを比較したい場合は、ケーキをクリックし、誕生日のテーマをクリックし、ホイップクリームのフロスティングをクリックし、ホイップクリームのフロスティングがあることを知っている興味深いケーキをすべてチェックします。これはケーキに固有のものではなく、単なる例です。

8
プロキシパターンとデコレータパターンの違い
プロキシとデコレータの違いは何ですか? 私が目にする主な違いは、プロキシが構成を使用し、デコレータが集約を使用すると仮定すると、複数の(1つ以上の)デコレータを使用することで、既存のインスタンス(装飾)に機能を変更/追加できることは明らかです。プロキシには、プロキシされたクラスの独自の内部インスタンスがあり、それにいくつかの追加機能(プロキシの動作)を追加して委任します。 問題は、- 集約で作成されたプロキシはまだプロキシか、それともデコレータか?(GoFパターンの定義により)集約を使用してプロキシを作成することはできますか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.