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

設計パターンは、ソフトウェア設計で一般的に発生する問題に対する一般的な再利用可能なソリューションです。



6
オブジェクトプーリングは非推奨のテクニックですか?
私はオブジェクトプーリングの概念に非常に精通しており、常に可能な限りそれを使用しようとしています。 さらに、Java自体と他のフレームワークが可能な限りプーリングを使用することを確認したため、オブジェクトプーリングは標準的な標準であると常に考えていました。 最近、私にとってはまったく新しい(そして直感に反する?)ものを読みました。 このプーリングにより、特に同時実行アプリケーションでは特にプログラムのパフォーマンスが低下します。new新しいJVMではオブジェクトのインスタンス化が非常に高速であるため、代わりにオブジェクトをインスタンス化することをお勧めします。 私は本でこれを読みました: Java Concurrency in Practice 本の最初の部分では、新しいインスタンスを作成する代わりにExecutorsその再利用を使用するようにアドバイスされているので、ここで何かを誤解しているのではないかと考え始めていThreadます。 それでは、オブジェクトプーリングは非推奨になりましたか?


2
ネストされたディレクティブ間の通信
ディレクティブ間で通信する方法はかなりあるようです。ネストされたディレクティブがあるとします。ここでは、内側のディレクティブが外側に何かを伝える必要があります(たとえば、ユーザーによって選択されます)。 <outer> <inner></inner> <inner></inner> </outer> これまでにこれを行うには5つの方法があります require: 親ディレクティブ innerディレクティブが必要になることがありouter、そのコントローラ上のいくつかのメソッドを公開することができディレクティブを、。だからinner定義では require: '^outer', link: function(scope, iElement, iAttrs, outerController) { // This can be passed to ng-click in the template $scope.chosen = function() { outerController.chosen(something); } } そして、outerディレクティブのコントローラーで: controller: function($scope) { this.chosen = function(something) { } } $emit 出来事 innerディレクティブができる$emitイベント、outerディレクティブは経由して、に応答することができます$on。そのため、innerディレクティブのコントローラーで: controller: function($scope) { …

12
これはCのgotoの適切なユースケースですか?
私は「議論、議論、投票、または議論を求める」ことを望んでいないので、これを尋ねることを本当にbutしますが、私はCに不慣れであり、言語で使用される一般的なパターンについてより多くの洞察を得たいと思っています。 私は最近、gotoコマンドに対する嫌悪感を聞いたが、最近、それに対するまともなユースケースも見つけた。 このようなコード: error = function_that_could_fail_1(); if (!error) { error = function_that_could_fail_2(); if (!error) { error = function_that_could_fail_3(); ...to the n-th tab level! } else { // deal with error, clean up, and return error code } } else { // deal with error, clean up, and return error code …

8
ORMは反パターンですか?[閉まっている]
ORMとその長所と短所について同僚と非常に刺激的で興味深い議論をしました。私の意見では、ORMは非常にまれな場合にのみ役立ちます。少なくとも私の経験では。 しかし、現時点では自分の主張をリストしたくありません。それでは、ORMについてどう思いますか?長所と短所は何ですか?

3
DRY、KISS、SOLIDなどは何に分類されますか?
DRYのようなものは、デザインパターン、方法論、またはそれらの間にあるものですか?それらには、必要に応じて実証できる特定の実装はありません(KISSのようなものを使用しないケースを簡単に実証できる場合でも... 多数の例については、The Daily WTFを参照してください)。一般的には。これらのタイプの「経験則」はどこにあるのでしょうか?

6
イベントループは、ポーリングが最適化されたfor / whileループですか?
イベントループとは何かを理解しようとしています。多くの場合、イベントループでは、イベントが発生したことが通知されるまで何かをするという説明があります。その後、イベントを処理し、以前の操作を続行します。 上記の定義を例にマッピングします。イベントループで「リッスン」するサーバーがあり、ソケット接続が検出されると、そこからのデータが読み取られて表示され、その後サーバーは以前と同じようにリッスンを再開/開始します。 ただし、このイベントが発生し、「そのような」通知を受け取ることは、私にとって非常に重要です。あなたは言うことができる:「それはあなたがイベントリスナーを登録しなければならない「ちょうどそのような」ではない」しかし、イベントリスナーとは何か、何らかの理由で返されない関数です。イベントが発生したときに通知されるのを待っている独自のループですか?イベントリスナーもイベントリスナーを登録する必要がありますか?どこで終わりますか? イベントは作業するのに最適な抽象概念ですが、単なる抽象概念です。結局、ポーリングは避けられないと思います。おそらく私たちはコードでそれをしていませんが、下位レベル(プログラミング言語の実装またはOS)が私たちのためにそれをしています。 基本的には、次の擬似コードになります。このコードは、十分に低い場所で実行されているため、ビジー待機を発生させません。 while(True): do stuff check if event has happened (poll) do other stuff これはアイデア全体に対する私の理解であり、これが正しいかどうか聞きたいと思います。私は全体の考えが根本的に間違っていることを受け入れることに心を開いています。その場合、正しい説明が欲しいです。

7
ユニットテストには依存性注入が不可欠ですか?
単体テストに依存性注入(DI)の使用は不可欠ですか? テストできるようにコードを分離する別の方法は考えられません。また、私が今まで見たすべての例では、このパターンを使用しています。それは唯一の実行可能なオプションであるか、または他の選択肢があるからでしょうか?

8
「まだ行われていない場合に何かを行う」という用語(または「パターン」?)[クローズ]
かなり基本的に聞こえますが、最近、同僚に、呼び出されたメソッドstartHttpServerがまだ実行されていない場合にサーバーを起動するだけなので、理解するには複雑すぎると言われました。「真剣に?私はこれを何十年も続けてきました。これはプログラミングの一般的なパターンです」と答えたとき、私はトラブルに陥ります。私が認めようと思うよりも頻繁に、彼は、プログラミングコミュニティ全体が彼の視点の背後にあることを示す文書化された証拠とともに戻ってきて、私はひどい気持ちになります。 質問:必要なアクションが既に有効になっている場合、ノーオペレーションであるメソッドの概念の背後にある文書化された設計パターンはありますか?または、パターンでない場合、名前もありますか?そうでない場合、この方法でメソッドを記述することを検討するのが複雑すぎると考える理由はありますか?

8
MVCアーキテクチャ—コントローラーはいくつ必要ですか?
私はしばらくコーディングしてきましたが、ほとんどはスクリプトと単純なアプリケーションです。Web Appsの開発と適切なMVCアーキテクチャの使用がすべての新しい役割に移行したため、そのすべてについて非常に迅速に学習しようと必死です。 この質問が「MVCアーキテクチャのベストプラクティス」とあまり似ていないことを願っていますが、いくつかの異なるチュートリアルを進めていると、いくつかの異なるコントローラが複数あることがわかりました。 1つのWebアプリに必要なコントローラーの数は? 例がなければ答えるのは難しいと思いますので、例を示します。 応用: ユーザーがログインします。 ユーザーは、次の3つのいずれかを実行できます 。a )ファイルをアップロードします(メタデータとともにmongodbデータベースに保存されます)。 b) ファイルを検索します。 c) ログアウトします。 私の質問は一般的な質問ですが、答えようとしている人を助けるために例を挙げました。

2
双方向データ同期のベストプラクティス/パターン
私の仕事では、多くの場合、データベースシステム間の双方向データ同期のアイデアが現れます。典型的な例は、2つのわずかに異なるCRMシステム(たとえば、Raiser's EdgeとSalesforce)と、それらの間で連絡先データの双方向同期が必要な場合です。 APIの考慮事項は別として、同期する共有キーがあり、使用するアルゴリズム/パターンを純粋に考えている場合、これは技術者以外によって過小評価されることが多いタスクです。 たとえば、次のことに注意する必要があります。 両方のシステムでどのレコードが変更されたかを簡単に検出できますか(または、システム間ですべてのレコードを比較して変更を検出する必要がありますか) N時間に1回の同期を行う場合、両方のシステムで同じレコードが多かれ少なかれ同じ時間に変化する競合に対処する方法 リアルタイム同期(つまり、1つのシステムの更新がすぐに他のシステムの更新をトリガーする)を予定している場合、バグまたはシステムクラッシュによる時間の経過に伴う逸脱の処理方法 個人的に私はこれすべてに取り組む方法を考えることができますが、私が参照できるよく知られたパターン、文献またはベストプラクティスがあるかどうか疑問に思っています。

2
MVCを介したMVPの改善点は何ですか?
Model-View-Controller(MVC)およびModel-View-Presenter(MVP)パターンについて3日間読んでいます。そして、私を非常に悩ませる1つの質問があります。既にMVCがあったのに、ソフトウェアデザイナーがMVPを発明したのはなぜですか? MVCが解決しなかった(またはひどく解決した)が、MVPが解決できる問題は何ですか?MVPが解決するのはどの問題ですか? MVPの歴史と説明、またはMVCとMVPの違いに関する記事をたくさん読んでいますが、私の質問に対する明確な答えがありませんでした。 私が読んだ記事の1つで、次のように言われました。 次に、Model View Presenterを使用します。これは、最新のコンポーネントベースのグラフィカルユーザーインターフェイスに適用した場合のMVCパターンの不備に対する応答でした。最新のGUIシステムでは、GUIコンポーネント自体が、中央のコントローラーではなく、マウスの動きやクリックなどのユーザー入力を処理します。 だから、理解できませんが、実際には別の方法で、GUIコンポーネントがユーザー入力を自分で処理しないようにすることはできますか?そして、「自分で処理する」とはどういう意味ですか?

10
パラメーターとしてのカスタムオブジェクトを避ける必要がありますか?
Studentというカスタムオブジェクトがあるとします。 public class Student{ public int _id; public String name; public int age; public float score; } そして、生徒の情報を表示するために使用されるクラスWindow: public class Window{ public void showInfo(Student student); } 正常に見えますが、Windowを個別にテストするのは簡単ではありません。関数を呼び出すには、実際のStudentオブジェクトが必要だからです。そこで、Studentオブジェクトを直接受け入れないようにshowInfoを変更しようとしています。 public void showInfo(int _id, String name, int age, float score); ウィンドウを個別にテストする方が簡単です: showInfo(123, "abc", 45, 6.7); しかし、修正版には別の問題があることがわかりました。 生徒の変更(例:新しいプロパティの追加)には、showInfoのメソッド署名を変更する必要があります Studentに多くのプロパティがある場合、Studentのメソッド署名は非常に長くなります。 それでは、カスタムオブジェクトをパラメーターとして使用するか、オブジェクトの各プロパティをパラメーターとして受け入れますか?

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