14

The Guerilla Guide to Interviewingで Joelは、物事を成し遂げたいが頭が良くない人は、単純な配列で十分なビジター デザイン パターンを使用するなどの愚かなことをするだろうと述べています。

ギャング・オブ・フォーによって提案されたデザイン・パターンが適用されるべきかどうかを検出するのは難しいと思います.

したがって、あなたの実務経験からのいくつかの例をお願いします

  • 単純なアプローチ (固定サイズの配列) で十分なのはいつですか?
  • GoF パターンの使用を正当化するソフトウェアの最小サイズは?
  • 素朴なものから GoF にリファクタリングするのはいつですか? これは賢明な方法で行うことができますか?
4

7 に答える 7

19

テスト駆動開発を使用すると、これらの質問に直面したときにガイドとして役立つことがよくあります。

  • シンプルなアプローチで十分なのはどのような場合ですか? 次のテストに合格するには、最も単純なアプローチを使用するだけで常に十分です。しかし、いつ、どのようにリファクタリングするかを知ることは、真の芸術形式です。
  • GoF パターンの使用を正当化するソフトウェアの最小サイズは? 私がかつて読んだ経験則は、何かを一度コーディングしたら、それで問題ありません。そのコードをどこかでもう一度複製するときは、メモを取り、先に進むというものです。同じコードが 3 回必要になった場合は、リファクタリングを行って重複を削除し、簡素化します。これには多くの場合、設計パターンへの移行が含まれます。
  • 素朴なものから GoF にリファクタリングするのはいつですか? @anopres の言葉が好きです。デザイン パターンが適切に配置されていないことに苦痛を感じるときです。痛み (またはコードの「におい」) は、いくつかの形で現れることがあります。コードの重複は最も明白です。Fowler のRefactoringや Kerievsky のRefactoring to Patternsなどのリファクタリングの本には、そのような多くの問題点/コードの悪臭がリストされています。
  • この[リファクタリング]は賢明な方法で行うことができますか? リファクタリングの秘訣は、信頼できる一連の単体テストを用意し、それらのテストを失敗させることなくリファクタリングすることです。リファクタリングは、定義上、コードの機能を変更しません。したがって、テストが引き続きパスする場合は、何も壊れていないというかなり良い感覚を得ることができます。難しいこともありますが、TDD のこの部分を実際に楽しんでいます。テストを壊さずに変更を加えるのは、ほとんどゲームのようです。

要約すると、TDD はその時点で十分なコードを作成するのに役立ち、さらに重要なことは、必然的に要件が変更されたり、より多くの機能が必要になったりしたときに後で変更を加えるのに役立つということです。

于 2008-11-06T19:44:57.927 に答える
12

デザインパターンは結果であり、目的ではありません。今日、私が Strategy Patterns を使用するとは思わないでください。ほぼ同じ 3 番目のクラスを実行している途中で停止し、紙のノートを使用して一般的なケースを把握し、共有コンテキストを記述する基本クラスを作成します。最初の 2 つのクラスを子孫としてリファクタリングします。これにより、現実のチェックが行われ、基本クラスにかなりの変更が加えられます。それから次の 30 人は公園の散歩です。

翌日のチーム ミーティングで、「私は戦略パターンを使用しました。それらはすべて同じように機能するため、テスト プログラムは 1 つしかありません。テスト ケースを変更するにはパラメーターが必要です」と言って、30 分の退屈を省きます。

パターンに親しんでいると、状況に応じていつでもパターンを反射的に使用できます。人々がパターンの使用をそれ自体を目的として扱うと、目的ではなくメカニズムについて話す、高尚で醜いコードになります。なぜではなくどのように。


ほとんどのパターンは、複雑さの緩和や拡張ポイントを提供する必要性など、繰り返し発生する基本的な問題に対処します。明らかに不要な拡張ポイントを提供すると、無意味にコードが複雑になり、より多くの障害ポイントとテスト ケースが作成されます。公開するためのフレームワークを構築している場合を除き、実際に直面している問題のみを解決してください。

于 2008-11-06T20:34:27.140 に答える
11

パターンはツールと語彙にすぎません。コードは、自分が知っている限りシンプルで、理解しやすく、保守しやすいように記述します。パターンを知ることで、より多くの代替案を自由に使用できるようになり、アプローチを実装する前にその長所と短所について話し合うための言語を手に入れることができます。

どちらの場合でも、「パターンを使用する」に「切り替える」だけではいけません。いつもしていることをやり続けて、自分が知っている最善の方法でコードを書いてください。

于 2008-11-06T21:15:02.333 に答える
7

これは、他の設計上の決定と同様です。最終的に、それは依存します。自分の言語で役立つパターンを学び (たとえば、Lisp や Smalltalk では多くの GoF パターンは必要ありません)、それらの長所と短所を学び、システムの制約を理解し、ニーズに最適な選択を行う必要があります。 .

私ができる最善のアドバイスは、学び、学び、学ぶことです。

于 2008-11-04T20:55:44.947 に答える
3

単純なアプローチから正式なデザインパターンへの切り替えは、通常、問題が複雑になるにつれて、私にとってはかなり自然に起こることです。重要なのは、転換点を認識し、現在および将来の開発に最大の利益をもたらすときに、単純なアプローチからデザインパターンに切り替えることができるパターンに精通していることです。

より大規模で複雑なプロジェクトの場合、転換点はかなり早い段階である必要があります。多くの場合、コーディングを開始する前ですら。小規模なプロジェクトの場合、パターンの実装を決定する前に待つ余裕があります。

パターンをいつ使用すべきかを認識する能力を高めるためにできる最善のことの1つは、プロジェクトの完了後、「単純な」アプローチがどれほど複雑になったかを調べるために時間をかけることです。パターンを実装するのにかかる時間と労力が少なかった場合、またはパターンがあなたがやろうとしていることを明確にする場合は、次に同様の問題が発生したときにその知識をファイルしておくことができます。

于 2008-11-06T20:18:44.677 に答える
2

パターンの1つが解決する問題がある場合。GoF ブックの各章には、各パターンがどのようなシナリオに適しているかを説明するセクションがあります。抱えている問題をそれぞれ分析するのではなく、使用するパターンを調べてください。どのような状況でパターンが必要になるかを認識できるように、パターンに精通する必要があります。

于 2008-11-06T20:39:51.997 に答える
0

元の GoF ブックの優れた点の 1 つは、パターンが問題を解決するのに最適なシナリオについての議論があることです。これらの議論を検討することで、「時が来た」かどうかを判断するのに役立ちます。

開始するのに適したもう 1 つの場所は、Head First デザイン パターンです。さまざまな設計パターンの使用法を説明する演習は、優れた学習体験を提供するのに十分精巧です。さらに、演習は現実世界のシナリオにも基づいているため、設計パターンをいつ適用するのが適切なのかを理解するのに苦労することはありません。

于 2008-11-10T02:53:57.703 に答える