web-dev-qa-db-ja.com

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

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

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

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

85
Ashlocke

Head First Design Patterns

alt text

そして Design Pattern Wikipedia page は初心者にとって最高のリソースです。 FluffyCat は、 Java[〜#〜] php [〜#〜] の両方のデザインパターン用の無料の優れたオンラインリソースです。

ギャングオブフォーブック はその後に進むべき場所ですが、それはかなり進んでいるので、他のリソースからかなりしっかりと把握できるようになるまで待ちます。

84
Bill the Lizard

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

  1. 一般的な問題を解決するための出発点となります。
  2. 問題を非常にコンパクトに解決する特定の方法について語るボキャブラリーを開発者に提供します。
  3. 設計パターンを知っていて、ソリューションで設計パターンを使用する開発者と一緒に作業すると、ソリューションをより早く理解できます。

しかし、あなたの目標がデザインパターンを学ぶことだけである場合、私はあなたが基本を見逃していると思います。すべての設計パターンは、より一般的な原則に基づいています。高凝集性、低結合オープンクローズ原理、DRY、リスコフ置換原理など。これらの基礎については、次の本をこの順序で読みます。

  1. Head First Object-Oriented Analysis and Design(Head First)[ILLUSTRATED](ペーパーバック)
  2. MLとパターンの適用(ハードカバー)
  3. アジャイルの原則、パターン、およびC#での実践(ロバートC.マーティンシリーズ)(ハードカバー)

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

  1. Head First Design Patterns(Head First)[ILLUSTRATED](ペーパーバック)
  2. 聖書
  3. ニースのWebサイト(何も購入しないでください。価値はありません) http://dofactory.com/Patterns/Patterns.aspx (このサイトの一部の実装は、議論に値します。

次のステップ:

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

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

27
KeesDijk

「-Gang of four」の Design Patterns の本は、デザインパターンに真剣に興味がある人なら誰でも聖書だと付け加えます。

20
Leopold Cimrman

私のヒント:

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

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

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

とにかく、それが私にとってうまくいきました。

14
Lars A. Brekken

デザインパターン

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

  • Intent各設計パターンの
  • 実世界の構造設計パターン
  • A 問題ステートメント
  • 問題に関する詳細な議論
  • チェックリストパターンに到達する方法
  • 経験則パターンに到着したとき。
  • コードスニペットを含むデザインパターンの場合C#、C++、Delphi、Java and PHP

このサイトにはAnti Patterns[〜#〜] uml [〜#〜]およびRefactoringに関するガイドも含まれています。

9
pramodc84

Bruce Eckelは デザインパターンの本 を持っています。これはJavaですが、彼のすべての本のようなものです。そして最高のものは無料です!

8
Jan Gressmann

C#3.0デザインパターン デザインパターンのC#パースペクティブ用。

alt text
(ソース: oreilly.com

6

私が便利でよく書いた紹介本は、アランシャロウェイとジェームストロット(Addison Wesley)による デザインパターンの説明 です。

alt text

しないでくださいGang of Four の本から始めてください。これは決して紹介本ではありません。

5

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

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

ここから始めることができます dofactory.com/patterns/patterns.aspx -各パターンへのリンクと、対応する実装を見つけることができます。

ただし、これらはGOFパターンであることを忘れないでください。 OOADに関する十分な専門知識を身につけたら、高度なパターンも読んで理解する必要があるかもしれません。 Head First Design Patternsは良い出発点であり、ある程度の進歩を遂げた後、Martin FowlerのEnterprise Application Architecture Patternsに進みます。

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

別の主な側面-デザインパターンを適用することは、それらを知ることと同じくらい重要です。これらの記事を読むことも役立ちます。

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

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

お役に立てれば

4
amazedsaint

DNRtvのデザインパターンをわかりやすく説明するためのJean Paul Boodhooのクイントロジー(?)をご覧になることをお勧めします。ビデオキャストは、とりわけシングルトン、アブストラクトファクトリーに触れています。違いは、彼が理論について話しているときにコードを見ることができることです。雨の平日の昼食を見守りたい。

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

4
David Pike

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

自己学習に加えて、私はあなたの地域でパターン研究グループを始めるか、参加することを真剣に勧めています。説明とパターンを学習するための優れた順序については、 パターンを設計するためのラーニングガイド を参照してください。他の関心のある人々と毎週会うことで、デザインパターンのような抽象的なものを学ぶとき、驚くほど規律が保たれます。

幸せな研究!

3
mmiika

本にお金をかける前に、ウィキペディアの優れた デザインパターン ページをお勧めします。また、別のGoogleの「デザインパターンのスクリーンキャスト」や「デザインパターン」の検索は YouTube で行います。同じ情報を別の方法で提示することは、多くの場合、ペニーの減少に役立ちます。

Gang of Four の本は、最もよく知られているパターンに関する決定的なテキストですが、それほど読みやすくはなく、C++の例では誰もが好きではありません。

Head First Design Patterns テキストははるかにアクセスしやすくなっていますが、Gang of Fourパターンのサブセットのみが含まれています。

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

差し込むだけです。

3
Royd Brayshay

Design Patterns
(ソース: Amazon

3
Paul Croarkin

MLとパターンの適用 Craig Larman著。分析、設計の基本から始め、簡単なケースシナリオを使用します。基本的なパターンのほとんどを簡単な方法で紹介します。

2
skinp

デザインパターンについて読むと、Javaにいくつかのパターンが実装されているようです。

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

デザインパターンは、レイジーコーダー向けではありません。

2
Peter Turner

私と私の同僚のために、次の Pattern Study Group に続くDesign Patternを研究します。彼らは私たちが順番に学ぶべき各パターンのリストを準備し、グループでより多くの議論をする最初の質問も持っています。

2
Samnang

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

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

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

Beyond Software Architecture:Creation and Sustaining Winning Solutions(ペーパーバック)by Luke Hohmann

2
Elie

デザインパターンは他のライブラリ関数に似ています。それらについて読んでから、問題が発生すると、デザインパターンは「Toolchest」に含まれます。オリジナルの「ギャングオブフォー」のデザインパターンに倣ってデザインされたデザインパターンの本はたくさんあります。

すべてのプログラマーにとって、Fowlerによるリファクタリングの本は、絶対に最小限の要件だ​​と思います。

2
Bill K

Webサイトの場合、非常に優れたサイトは http://ajaxpatterns.org であり、ajaxian Webサイトの開発者の1人によるものです。

2
Ken Penn

オリジナルの Design Patterns 本は、すべてのプログラマーにとって必読です。

レイアウト、明快さ、洞察、奥行きなど、あらゆるレベルで優れた本です。これは、最初に表紙を読んでから、文字通り完全に理解するまで参照として使用する素晴らしい本の1つです。

Wikipedia page から始めることもできますが、すばらしい本を読んでください。

2
ddaa

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

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

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

1
dongilmore

また、Head First Design Patternsを読んだ後は、 Refactoring to Patterns に注意を払うことをお勧めします。

注:コード例はJavaですが、C#の例と非常によく似ています...

1
toolkit

このウェブサイトのデザインパターンの記事が本当にわかりやすい

C#のデザインパターン

1
DotnetDude

概念を理解したら、Eclipseのソースコードまたはデザイン、これらのパターンの非常に優れた例をたくさん見てください(当然のことながら、Gammaはデザイナーの1人でした)。

1
Uri

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

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

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

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

1
Tim