デザインパターンの学習/実装(初心者向け)[終了]


85

私はこれを理解しようとしている混乱した初心者で愛好家のプログラマーなので、私の質問が少しずれていたり、あまり意味がない場合は許してください。

デザインパターンの使用を中心にSOに関する質問がたくさんありますが、デザインパターンについて学び、実装するための優れたリソースを誰かが持っているのではないかと思います。私は一般的な考え方を理解しており、それらのいくつか(シングルトン、ファクトリメソッド)をいつどのように使用するかを知っていますが、私は見逃していることを知っています。

(念のため、私の好みの言語はC#ですが、他の言語の例から学ぶこともできます)

回答:


84

ヘッドファーストデザインパターン

代替テキスト

デザインパターンウィキペディアのページは、初心者に最適なリソースです。 FluffyCatは、JavaPHPの両方のデザインパターンに関するもう1つの優れた無料のオンラインリソースです。

四本のギャングは、その後どこへ行くですが、他のリソースからかなりしっかり理解しているまで、私は待つと思いますので、それは、かなり高度です。



5
私はその本を見ました...それを嫌いました。そこで、GoFの本を手に取って、そこからデザインパターンについてすべて学びました。それは一種の乾燥したものでしたが、はるかに有益でした。
Thomas Owens

1
私は当初、頭の最初の本が完全に不快になるだろうと思っていました(それは比喩、側近に重く、非常に会話的な口調を持っています)。しかし、それは実際には本当に独創的で有益です。リスクを冒して購入できてとてもうれしいです。イモ、ギャングオブフォーを選ぶ=不必要なマゾヒズム。
codeinthehole 2008年

2
私は頭の最初の本が完全に不快であることに気づきました。それは「楽しい」ことに多くの時間を費やします。私はそれが重要なアイデアをうまく​​伝えていないと思います-彼らは迷子になります。それを読むことは、誰かのお父さんがかっこよくしようとしているのを見ているようなものです。しかし、GoFの本は他の極端なものであり、したがってすべての人に適しているわけではありません。
draemon 2008年

2
@Bill:わかっていますが、@ Thomasと@Draemonのコメントに同意します。プログラミングクラスのアルゴリズムについてこのシリーズの本を勧められたプログラミング志向ではない私の友人は、ページあたりの情報量が多かったため、彼らを嫌い、「より乾燥した」本になってしまいました。それは好みの問題です。私は幼い頃から技術書を読んでいて、高度な技術を持った高校に通っていたので、「乾いた」本を読んでいたに違いありません。私は、ペットが私に話しかけたり、脇に追いやったりするのではなく、私が同化するためのわかりやすい情報を持っている本を好みます。
エステバンKüber

27

デザインパターンはさまざまな理由で優れています。

  1. 一般的な問題を解決するための出発点を提供します。
  2. 開発者に、非常にコンパクトな方法で問題を解決する特定の方法について話すための語彙を提供します。
  3. デザインパターンを知っている開発者と協力し、ソリューションでデザインパターンを使用すると、開発者はソリューションをより早く理解できます。

しかし、あなたの目標が単にデザインパターンを学ぶことである場合、私はあなたが基本を欠いていると思います。すべてのデザインパターンは、より一般的な原則に基づいています。高凝集度、低結合度の開放閉鎖原則、DRY、リスコフの置換原則など。これらの基本事項については、次の本をこの順序で読みます。

  1. ヘッドファーストオブジェクト指向分析および設計(ヘッドファースト)[図解](ペーパーバック)
  2. UMLとパターンの適用(ハードカバー)
  3. C#の機敏な原則、パターン、および実践(Robert C. Martinシリーズ)(ハードカバー)

その後、4つのデザインパターンの基本的なギャングの準備が整います

  1. ヘッドファーストデザインパターン(ヘッドファースト)[イラスト](ペーパーバック)
  2. 聖書
  3. 素敵なウェブサイト(何も買わないでください、それは価値がありません)http://dofactory.com/Patterns/Patterns.aspx(このサイトのいくつかの実装は議論する価値があります

次のステップ:

  1. エンタープライズアプリケーションアーキテクチャのパターン(Addison-Wesley署名シリーズ)(ハードカバー)
  2. POSAの本

そして常に覚えておいてください:パターンは目標ではありません!


2
オブジェクト指向の基礎(カプセル化、継承、ポリモーフィズムなど)は、デザインパターンの学習を開始するための知識として十分だと思います。学習パターンを通じて、他の原則(高凝集度、低結合オープンクローズド原則、DRY、リスコフ置換原則など)を学習できます。
トカゲのビル

オブジェクト指向の基礎だけでデザインパターンを学ぶことができることに同意します。しかし、パターンを機能させることはできますが、これが優れたデザインである理由、作成したトレードオフ、およびパターンのバリエーションを作成する方法をまだ完全には理解していません。
KeesDijk


14

私のヒント:

さまざまなソースからのパターンについてたくさん読んでください。

この時点では、作成しているすべてのコードにできるだけ多くのパターンを強制しようとしても、良い結果は得られません。代わりに、情報をしばらくの間脳内に置いておきます(読み取り:月)。

突然、問題やコードの一部に出くわし、この特定の問題の解決策として機能する可能性のあるものを見たことを漠然と覚えているでしょう。今こそ、考えているパターンの詳細を調べて、それを適用してみるときです。

とにかく、それは私のために働いたものです。


9

デザインパターン

このチュートリアルサイトには、次のサブセクションが含まれています

  • 意図各デザインパターンの
  • 実世界の構造デザインパターンの
  • A 問題文
  • 問題に関する詳細な議論
  • チェックリストパターンに到達する方法の
  • 経験則パターンに到達する際。
  • C#、C ++、Delphi、Java、PHPを含むデザインパターンのコードスニペット

このサイトには、アンチパターンUMLリファクタリングに関するガイドも含まれています。


ウェブサイトはとても便利だと思いました。良い、明確な例。
オーガスタス2016年




4

DNRtvのデザインパターンの謎を解くためのJeanPaul Boodhooの五重奏(?)をご覧になることをお勧めします。URLは以下のとおりです。ビデオキャストは、とりわけシングルトン、アブストラクトファクトリに触れています。違いは、彼が理論について話しているときに彼のコードを見ることができるということです。雨の平日の昼食を見守るのもいいでしょう。

http://www.dnrtv.com/default.aspx?showNum=63 http://www.dnrtv.com/default.aspx?showNum=65 http://www.dnrtv.com/default.aspx?showNum= 68 http://www.dnrtv.com/default.aspx?showNum=71 http://www.dnrtv.com/default.aspx?showNum=92


DnrTVがダウンしています!Boodhooのスクリーンキャストは有益なので、それはとても残念です。他の場所でホストされているビデオを見たことがありますか?ビデオファイルはありますか?オンラインで保管させていただきます。
ステファンルイス

4

上記のコメントへの注釈。

GOFパターンのクイックリファレンス

ここがdofactory.com/patterns/patterns.aspxを開始できる良い場所です-対応する実装とともに、各パターンへのリンクを見つけることができます。

ただし、これらはGOFパターンであることを忘れないでください。OOADの専門知識を十分に習得したら、高度なパターンも読んで理解する必要があるかもしれません。Head First Design Patternsは良いスタートであり、ある程度の進歩を遂げた後、MartinFowlerのエンタープライズアプリケーションアーキテクチャパターンを使用してください。

デザインパターンの適用-思考プロセス

もう1つの主要な側面-デザインパターンを適用することは、それらを知ることと同じくらい重要です。これらの記事を読むこともあなたを助けるかもしれません。

デザインパターンの適用パートI

デザインパターンの適用パートII

お役に立てれば


3

Head First Design Patternsは、すでに述べた他のパターンと同様に優れたものです。これに加えて、もちろんオリジナルの本とC#デザインパターン。また、すでに言及されている良いウェブサイトがあります。

自己学習に加えて、お住まいの地域のパターン研究グループを開始または参加することを強くお勧めします。パターンを設計するための学習ガイドを参照してくださいを研究するための説明と素晴らしい順序については、。これを行ったので、今ほど理解できないと正直に言うことができます。他の関心のある人々との毎週のミーティングは、デザインパターンのような抽象的なものを学ぶときに驚くほど規律を保ちます。

幸せな勉強!


3

本にお金を使う前に、ウィキペディアの優れたデザインパターンページをお勧めします。また、Googleで「デザインパターンのスクリーンキャスト」を検索したり、YouTubeで「デザインパターン」を検索したりすることもできます。。同じ情報を異なる方法で提示することは、多くの場合、ペニードロップに役立ちます。

4人のギャング本は最もよく知られているパターン上の決定的なテキストですが、読みやすいとC ++の例ではないみんなのお気に入りとのことではありません。

ヘッドファーストデザインパターンテキストがはるかにアクセス可能ですが、わずか4パターンのギャングのサブセットが含まれています。

最も重要なことは、特定のパターンが役立つ場所と理由を理解することです。その後、選択した言語の実装例をWebで検索し、「取得」するまで実験します。次のパターンに進む前に、1つのパターンを理解してください。誰もが他のパターンよりもいくつかのパターンをよく理解しています(そして、あまり知られていないパターンが何百もあります)。

ただ差し込んでください。



2

Martin Fowlerによるエンタープライズアプリケーションアーキテクチャのパターン(ハードカバー)

Joshua Kerievskyによるパターンへのリファクタリング(ハードカバー)

継続的インテグレーション:ソフトウェア品質の向上とリスクの軽減(ペーパーバック)Paul Duval et.al.

ソフトウェアアーキテクチャを超えて:Luke Hohmannによる受賞ソリューションの作成と維持(ペーパーバック)


2

デザインパターンは他のライブラリ関数と同じです。それらについて読んでください。問題が発生すると、デザインパターンは「ツールチェスト」に含まれます。オリジナルの「Gangoffour」デザインパターンを模したデザインパターンの本がたくさんあります。

どんなプログラマーにとっても、ファウラーによるリファクタリングの本は絶対的な最小要件だと思います。


POSAの本は、「GOFの後にパターン化された」本ではなく、GOFが最初に出版されたのですが、同時に制作されていました。
ティム

1
混乱を避けるために、MOSTデザインパターンはライブラリに実装されていません。多くのパターンは、ライブラリクラスを組み合わせることによって形成されます。
トカゲのビル

私はそれを図書館でできるように聞こえさせました-それについては申し訳ありませんが、説明してくれてありがとう、ビル。デザインパターンは一般的にライブラリのようなものですが、通常はライブラリに配置できないものです。たとえば、互いに未知のクラスが相互作用するさまざまな方法などです。
ビルK


2

オリジナルのデザインパターンの本は、すべてのプログラマーにとって必読です。

レイアウト、明快さ、洞察力、深さなど、あらゆるレベルで優れた本です。それはあなたが最初にカバーツーカバーを読んで、それからあなたがそれを文字通り裏返しに知るまで参照として使うそれらの素晴らしい本の1つです。

ウィキペディアのページから始めることもできますが、すばらしい本で自分自身を扱ってください。



2

デザインパターンについて読むと、Javaにはそれらのいくつかが実装されているように見えることに気付くでしょう。

フレームワークのソースを見ると、デザインパターンに関する情報を収集できます。個人的には、それらが私のコードのいずれにも完全に適合しているとは思いません。本やチュートリアルの例は、特に孤独なコーダーにとって、少し理想化されているように見えることがあります。

デザインパターンは怠惰なコーダー向けではありません。




1

経験がほとんどない人がデザインパターンを深く掘り下げることは、私にはあまり意味がありません。それらが存在することを知ることは素晴らしいことですが、この時点では、単にデザインパターンについて学ぶのではなく、他のことに集中する必要があります。

それらは問題のコンテキストで役立ちます-初心者/初心者の開発者の概念として、いつでもどこでもそれらを使用する必要があることを知っていることを除けば、実際にはあまり実用的な価値はありません。

編集明確にするために-多くのデザインパターンは、いくつかのドメインで見つかった問題の結果です。新しいプログラマーは、いくつかの問題に使用するデザインパターンを知っているとはほとんど期待できません(IMO)。CS研究でアルゴリズムが少しずつ得られるように、パターンでできることとその利点を理解する必要がありますが、Hello Worldを構築しているときや、stlを発見しているときは、デザインパターンの実用的な必要性はあまりありません。パターンは素晴らしいです。しかし、それらは特効薬ではありません。

(CASE(ツール)でも、UMLでも、SCRUMでも、TDDでも、STLでも、Javaでも、XMLでもありません。)これらはすべて私たちの職業の側面であり、これらのトピックを2番目のものとして扱います。来るのはナイーブです。


しかし、パターンについて知らなければ、特定の問題に対処するパターンがあるかどうかはわかりません。はい、初心者としてパターンが必要になる可能性は低いですが、その必要が生じる前にパターンを学ぶことが重要です。
エリー

私は私の投稿でそれをカバーしたと思います
ティム

それらが存在することを知るだけでなく、それらがどのように機能し、どのような状況で使用されるかを知る必要があります。それは表面的な知識以上のものです。パターンを使用するまでには何年もかかるかもしれませんが、使用する場合は、パターンを学ぶ時期ではありません。
エリー

つまり、初心者は数十以上のパターンを学び、理解する必要があるということですか?その間に何がテーブルから外れますか?私はパターンに反対しているのではありません。また、パターンJITの詳細を学ぶことは悪いことではないと思います。他のものの前にパターンを学ぶIMOは役に立たない
Tim

1

パターンは、プログラマーが抽象的なデザインについて話すために使用する高レベルの語彙で構成されます。抽象ソリューションを再利用する場合は、名前で参照すると便利です。パターンを発明する場合は、パターンに名前が付けられていないことを確認するために少しチェックするのが専門的です。名前が付けられている場合は、説明が役立つ場合があります。

少しでもコーディングすると、以前にコーディングしたものと同様の何かを書いていることに気付くでしょう。これはパターンです。小さな模様でも注目に値します。より良いパターンはありますか?より大きな問題を解決するために協力する特定の小さなパターンを見ますか?次回、より大きな問題を解決したいときは、パターン全体が1つのチャンクとして頭に浮かびます。コードの詳細な行を具体化すると、機械的になります。

パターンに気付くほど、プログラミングが容易になり、他のプログラマーが作成した最大かつ最高のパターンのいくつかに感謝するようになります。MVCパターンをマスターしてみてください。どういうわけか、小さな設計上の決定であっても、バリエーションはいたるところに現れます。


1

概念を理解したら、Eclipseのソースコードまたはデザインを確認します。これらのパターンの非常に優れた例がたくさんあります(当然のことながら、ガンマはデザイナーの1人でした)。


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