姪にデザインのパターンを説明したいのですが、いつも苦労しています。それは主に、デザインパターンを明確に理解していないためです。MVC、シングルトン、ファクトリー、リポジトリなどのパターンを、10歳の子供でも理解できるような簡単な言葉で説明するにはどうすればよいですか。
パターンの理解を助けるのに役立つ例を探しています。おもちゃ、映画、音楽などの例
姪にデザインのパターンを説明したいのですが、いつも苦労しています。それは主に、デザインパターンを明確に理解していないためです。MVC、シングルトン、ファクトリー、リポジトリなどのパターンを、10歳の子供でも理解できるような簡単な言葉で説明するにはどうすればよいですか。
パターンの理解を助けるのに役立つ例を探しています。おもちゃ、映画、音楽などの例
回答:
ウィキペディアの記事の冒頭は、おそらく良いスタートだと思います。
A design pattern is a general reusable solution to a commonly occurring problem.
それとも、それらの特定のパターンの詳細を説明したいですか?
なぜそれを説明したいかによります。パターンのアイデアを説明したいだけなら、A Pattern Languageのアーキテクチャーの例を利用します。これらの研究者たちは、建物や部屋の特定の側面が人々にその建物や部屋での生活や仕事を楽しんでいることを発見しました-世界中の異なる文化、異なる建築材料、異なる種類の地域で。たとえば「両面の光」のように。2つの壁に窓がある部屋は、1つしかない部屋(または何もない部屋)よりもはるかに優れています。ソフトウェアにもそのようなパターンがあります。異なるプログラミング言語を使用しても、いくつかのパターンが繰り返されます。さらに、ゲーム、財務計算用の何か、Facebook内のエンジンなど、非常に異なるソフトウェアでもです。
次に、特定のパターンについて話したい場合(理由は不明ですが、10歳まで)、それがどのように機能するかを説明する前に、そのパターンの使用例を示すことから始めます。したがって、コンポジットを使用すると、コンテナの重量とすべてのコンテナの合計およびコンテナの緩みを合計することにより、スーツケースの重量を計算するときに明示的な再帰を回避できますが、企業の給与負担の計算にも役立ちますまたは製造コンプレックスの能力。それが10歳児にとって少しでも興味深い場合は、それがどのように機能するかを説明してみてください。
一部の人々は、ソフトウェアの断片をうまく連携させる方法があることに気づき、彼らの洞察を共有したいと考えたため、デザインパターンが存在します。
人々のグループと同じようにデザインパターンを考えることができます。たとえば、すべての会議を促進する1人の人物がいる場合があります。これは、オブジェクト間の相互作用を容易にするコントローラーパターンのようなものです。
または、部屋の前の誰かが手を挙げている人を監視している観客を想像して、質問を繰り返して、他の全員が聞けるようにするか、多分それに答えて反応するようにします。これは、Subject / Observerパターンに似ています。
トランスレーターのように動作するパターン(アダプターパターン)、セキュリティガードのように(プロキシ)、フィールドの専門家(シングルトン)のように、または車が機能していることを確認する人々(バリデーター)のように動作するパターンがあります。
オブジェクトと人の違いは、必要な数のオブジェクトをほぼ作成でき、それらの複数の異なるコピーを持つことができることです。そのため、ソフトウェアが複雑になりすぎないように、オブジェクトが持つべき責任を理解し、その責任を小さく保ち、オブジェクトの役割を複製しないようにすることが重要です。専門家はこれについて多くの経験を持っています。そして彼らは私たちに私たちがしようとしている仕事のためにどのような役割が最良の比喩であるかを決定し、得ることができるように効果的なソフトウェアがどのように相互作用するかのこれらのパターンを与えました最も適切な方法でコラボレーションするソフトウェア。
これらの設計パターンのほとんどは、オブジェクト指向設計の一部です。OODを理解していない人に実際に説明することはできません。特定のパターンで達成する目標を説明することはできますが、それがどのように機能するのか、なぜそれが必要なのかは説明できません。もちろん、OOD全体を説明する場合を除きます。
設計パターンは、最初にアーキテクチャーについて説明されました。広場の場所、建物、その他の一般的に繰り返されるレイアウトなど。あなたはそこから始めるかもしれません。正面玄関のようなものは通りに面している、部屋の隅に向かっているドア、その他何でも考えられる。元の作者のパターンは広く使用されていませんでした。彼は今パターン自体は十分ではないと述べていると報告されています。
部屋の中で動くものについて話し合う。ドアの前に椅子を置いてください。窓やドアを他の場所に移動するのは理にかなっていますか。なぜですか、なぜそうではありませんか?
テーブルに場所を置くようなものを試してください。あなたから離れて行くサイズで物事を配置してみてください。通常のパターンではなく、扱いにくい。通常通り設定してください。これは、ジュースの簡単なグラスに適したレイアウトですか?パターンは常に適切であるとは限りません。
私たちはいつもパターンを持って生きています。3〜4冊の本を取り、ページをめくってください。レイアウトには明らかなパターンがあります。タイトルページ、目次、コンテンツ、および索引。すべてのコンポーネントが必要なわけではありませんが、それらを所定の場所に配置しないと混乱を招きます。
設計パターンは、ジグと木工のソフトウェア開発です。これは、大規模なプロジェクトで使用するためのよく知られた「カット」を作成できるツールです。
カットを行うためにジグは必要ないことに注意してください。状況によっては簡単な場合もあります。
私の他の答えは一般的なケースを表すと思いますが、OPは詳細を要求するようコメントしました(そのため、別の答えに値すると感じました)。悲しいことに、私はリポジトリパターンに精通していませんが、他のものを試してみるつもりです。原則として、これらを説明する最良の方法は、どのような問題を解決したいのか、なぜそれを解決したいのか、そして問題がどのようにしてそれを達成するのかということです。
このパターンは、何かが1つだけであることを保証したい場合に使用されます。パターンは、他のユーザーがオブジェクトを作成できないようにすることで実現されます。
このパターンは、物事をモジュール化し、それに伴うすべての利点を維持するために使用されます。ビューは「ユーザーインターフェース」、モデルはデータ(ビジネスロジックを含む)、コントローラはユーザーアクションがモデルを操作する方法です。このモジュール性により、同じモデルで複数のビュー/コントローラーを使用することを妨げるものは何もありません。非常に単純化した例として、私はWebサイト、デスクトップアプリケーション、およびiPhone(「ビュー+コントローラ」)を介してメール(「モデル」)とやり取りできます。共有グループメールボックスがある場合、メールを送信しないコントローラーを作成し、同じアプリケーションビューとメールを再利用できます。(はい、過度に単純化していますが、うまくいけば理解できます:))
さらに、この明確に定義された関心の分離により、ある(理想的には)変更は別の変更を必要としません。具体的な例として、OracleデータベースではなくMySQLデータベースへの読み取り/書き込みをサポートする必要がある場合、モデルを変更するだけで済み、ビュー/コントローラーは変更されません。
Factoryと呼ばれる類似のパターンがたくさんあるので、ここで注意する必要があります... Abstract Factoryについて説明しますが、Factoryメソッドパターンもあることを知っておく必要があります。
基本的に、実行する手順がわかっている場合は、抽象ファクトリを使用しますが、これらの個別の手順を実行する方法の手順は異なる場合があります。たとえば、ボタンを備えたダイアログボックスを作成する必要があるアプリケーションを構築しているとします。コードで架空のUIファクトリを使用することで、WindowsではなくMacまたはLinuxでコードが必要な場合は、別のファクトリを提供するだけで、残りのコードは変更されません。よりワイルドな例として、私はWebファクトリーを使用することができ、デスクトップアプリケーションを裏付けるコードのほとんどがリッチなWebサイトにも電力を供給している:)(他の理由で実用的ではないが、理論的には:))
ハッカーになりたい10歳のユーザーに-と言います。
あなたがハッキングしていたときにあなたの隣に世界最高のハッカーがあなたの隣に座っていたとしたら、想像してみてください。そして、時々彼らは言うでしょう。 ...コードは[より速く/より安全/より保守可能/など]になります。
彼女がそのアイデアに熱心であると仮定したので、私は時間を無駄にしないで、「ハッキングタスク」を設定する各パターンを説明します。次に、デザインパターンをポスト適用し、値を説明します。良いリソースとそれがどこに行くか見てください。
しかし、ほとんどの場合、彼女はメンタリングを通じてそれらを学ぶ必要があります。