タグ付けされた質問 「strategy」

14
マネージャーがプログラミング言語を選択する方法
この質問は、Software Engineering Stack Exchangeで回答できるため、Stack Overflowから移行されました。 8年前に移行され ました。 マネージャーがプロジェクトで使用されるプログラミング言語を課すことができ、しばしば課すことになるのは誰にとっても秘密ではありません。 私自身プログラマーであるため、これを理解することはできませんでした。 しかし、今私はそう思います。JoelSpolskyがポッドキャストでQuickBooksを使うべきだと言ったとき、「世界のすべての会計士はそれを知っている」ので啓示を受けたばかりです。これは、「世界中のすべてのプログラマーがJavaを知っているためJavaを選択する」と非常によく似ていると思いました。 同じ問題を別の観点から見たので、会計についてはあまり知りませんが、プログラミングについては知っていますが、プロジェクトに適切なプログラミング言語が選択されていることをプログラマがどのように支援できるか疑問に思っています?

8
歴史に基づいて公正なチームを分割するための戦略/アルゴリズム
私たちは定期的にフロアボールをしている人々のグループです。すべてのセッションは、チームを分割するという困難なタスクから始まります... では、チームを自動的に選択するアプリケーションよりも優れているのは何でしょうか? したがって、チームの組み合わせと結果の履歴、およびこの特定のセッションに参加する人々のリストを考えると、最適なチームを見つけるための良い戦略は何でしょうか?最適とは、チームが可能な限り平等であることを意味します。 何か案は? 編集:明確にするために、ピッキングの基礎となるデータは次のようになります。 [{ team1: ["playerA", "playerB", "playerC"], team2: ["playerD", "playerE", "playerF"], goals_team1: 10, goals_team2: 8 }, { team1: ["playerD", "playerB", "playerC"], team2: ["playerA", "playerE", "playerG"], goals_team1: 2, goals_team2: 5 }, { team1: ["playerD", "playerB", "playerF"], team2: ["playerA", "playerE", "playerC"], goals_team1: 4, goals_team2: 2 }]

2
コードの抽象化をどのように処理しますか?
新しいコードベースを見るとき、ボトムアップのアプローチから始めたいと思います。 1つのファイルを理解してから、次の抽象化に移動します。 しかし、多くの場合、低レベルの抽象化が行っていることを忘れています。 だから、私はこの時点で、私が以前完全に理解していたファイルに戻って、それらを再学習しようとするほぼ無限のループにいることに気付くでしょう。私の頭の中で互いに接続する他の多くの抽象化をジャグリングしようとしながら。 この状況に対処するためのより良い戦略はありますか? 下位レベルの詳細を忘れて、それを当然のことと考えるべきですか?しかし、それでも、現在の抽象化が何をしているのかを理解するには、以前に低レベルの抽象化を理解しておく必要が何度もあります。

6
戦略パターンの利点
if / thenの場合にコードを書くことができるのに、なぜ戦略パターンを使用するのが有益なのですか? 例:TaxPayerクラスがあり、そのメソッドの1つが異なるアルゴリズムを使用して税金を計算します。では、なぜif / thenケースを持ち、戦略パターンを使用する代わりに、そのメソッドで使用するアルゴリズムを見つけられないのでしょうか?また、なぜTaxPayerクラスの各アルゴリズムに個別のメソッドを実装できないのですか? また、実行時にアルゴリズムが変更されるとはどういう意味ですか?

2
ゼロダウンタイム展開-移行Dbスキーマ
ゼロダウンタイムの展開の実現には同じ問題が関係していましたが、検討している戦略に関するアドバイスが必要です。 環境 サーバー側の処理にApache / PHPを使用し、永続性にMySQL DB / filesystemを使用するWebベースのアプリケーション。 現在、インフラストラクチャを構築しています。すべてのネットワークハードウェアには冗長性があり、すべてのメインネットワークケーブルは、フォールトトレランスのためにボンディングペアで使用されます。サーバーは、ハードウェアフォールトトレランス用の高可用性ペアとして構成されており、仮想マシンのフォールトトレランスと一般的なパフォーマンスの両方で負荷分散されます。 私は、ダウンタイムなしでアプリケーションに更新を適用できることを意図しています。100%の稼働時間を提供できるように、インフラストラクチャを設計する際に多大な苦労をしました。更新が適用されるたびに10〜15分のダウンタイムが発生するのは非常に残念です。これは、リリースサイクルを非常に高速にすることを意図しているため、特に重要です(1日あたり1つ以上のリリースに達することがあります)。 ネットワークトポロジー これはネットワークの要約です: Load Balancer |----------------------------| / / \ \ / / \ \ | Web Server | DB Server | Web Server | DB Server | |-------------------------|-------------------------| | Host-1 | Host-2 | Host-1 | Host-2 | |-------------------------|-------------------------| Node A \ …

7
大幅な分岐なしで戦略パターンを実装できますか?
Strategyパターンは、巨大なif ... elseコンストラクトを回避し、機能の追加または置換を容易にするためにうまく機能します。しかし、それでも私の意見には1つの欠陥が残っています。どの実装でも、分岐構造が必要であるようです。ファクトリまたはデータファイルの可能性があります。例として、注文システムを取り上げます。 工場: // All of these classes implement OrderStrategy switch (orderType) { case NEW_ORDER: return new NewOrder(); case CANCELLATION: return new Cancellation(); case RETURN: return new Return(); } この後のコードは心配する必要はなく、新しい注文タイプを追加する場所は1つだけですが、このセクションのコードはまだ拡張できません。データファイルにそれを引き出すことは、読みやすさをいくらか助けます(議論の余地があります、私は知っています): <strategies> <order type="NEW_ORDER">com.company.NewOrder</order> <order type="CANCELLATION">com.company.Cancellation</order> <order type="RETURN">com.company.Return</order> </strategies> しかし、これにより、データファイルを処理するための定型コードが追加されます。付与された、より簡単にユニットテスト可能で、比較的安定したコードですが、それでも複雑さが増します。 また、この種のコンストラクトは統合テストがうまくいきません。個々の戦略は今すぐテストする方が簡単かもしれませんが、追加するすべての新しい戦略はテストの複雑さを増すことになります。パターンを使用していなかった場合よりも少ないですが、それはまだあります。 この複雑さを緩和する戦略パターンを実装する方法はありますか?それとも、これはそれと同じくらい簡単で、さらに先へ進んでも、抽象化の別の層を追加するだけで、ほとんどまたはまったく利益がありませんか?

5
変更された戦略設計パターン
私は最近、デザインパターンの調査を開始しましたが、コーディングしていることの1つは、小さな違いを除いて、戦略パターンに完全に適合します。 基本的に、私のアルゴリズムの一部(すべてではない)には、追加のパラメーターまたは2つを渡す必要があります。 だから私はどちらかをする必要があります 計算メソッドを呼び出すときに追加のパラメーターを渡します または それらをConcreteAlgorithmクラス内の変数として保存し、アルゴリズムを呼び出す前にそれらを更新できるようにします。 このニーズに合ったデザインパターンはありますか/戦略パターンにこだわってこれを実装するにはどうすればよいですか? クライアントオブジェクトをすべてのアルゴリズムに渡し、変数をそこに格納し、特定のアルゴリズムで必要な場合にのみ使用することを検討しました。しかし、これは扱いにくく、戦略パターンのポイントを打ち負かすと思います。 明確にするために、私はJavaで実装しているので、オプションのパラメーター(これをうまく解決できる)の贅沢はありません。

2
Strategyパターンのコンテキストクラス
私は戦略パターンを理解しようとして自分自身に問いかけています。コンテキストクラスはなくてはならないのですか、それともパターンの目的を損なうことなく省略できますか? さまざまな種類のファイルを読み取るためになんらかのスイッチが必要であるという印象を受けましたが、何かをハックして後でリファクタリングを処理したくありませんでした(もちろん、コードは常にリファクタリングされる可能性がありますが、アイデアは:設計をできるだけスマートにするために...): ウィキメディアから撮影した画像 クライアントはストラテジーインターフェイスに直接委任できますか、それともコンテキストクラスについて理解できなかったことがありますか? interface Reader { // read information from file and fill data list field of Client readFile(); } class ExcelReader implements Reader{ /* */ } class PdfReader implements Reader{ /* */} class Client{ // strategic choice Reader r; // data list field List<Data> data; // Client Constructor …

2
Head First Design PatternsのDuckの例で示されているように、コンテキストの継承は戦略パターンとは無関係ですか?
でヘッドファーストデザインパターンでは教えて戦略パターンをダックの異なるサブクラスは、実行時に特定の動作を割り当てることができダックの例を使用して。私の理解では、戦略パターンの目的は実行時に単一のオブジェクトの動作を変更することですが、Duckの継承を使用してさまざまなタイプのDuckの動作を変更しています。 関連性? Duckのコンテキスト継承は戦略パターンと無関係であるか、またはDuckのタイプを変更し、それらの動作も変更することは、戦略パターンを採用する正当な理由ですか?両方を変化させる必要がある状況は、戦略パターンを使用する正当な理由になりますか?なぜこれを戦略パターンの例として含めるのですか? より簡単な例 Duckクラス(派生クラスなし)だけでこの例をさらに簡略化できますか?次に、1つのduckオブジェクトを実装するときに、独自のオブジェクトタイプに依存しない特定の状況に基づいて、異なる動作を割り当てることができます。例:FlyBehaviorは天気に基づいて変化し、QuackBehaviorは時刻またはアヒルの空腹度に基づいて変化します。これは本の問題とは異なる問題を解決することになると思いますが、私が探しているのは、頼りになる適切な戦略パターンの例です。 上記の私の例も戦略パターンを構成しますか? 編集: 私は、コンテキストを継承しない単なる戦略パターンであるHunter.javaとsolver.pyに厳密に準拠する2つの単純な戦略パターンの例を見つけることに成功しました。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.