スープに別のメタファーを追加するために、デザインパターンはMicrosoft OfficeヘルパーClippyです。「あなたは多くのものに対して同じことをしているようです。イテレータまたはビジターを提供することでそれを手助けできますか?」
これらのパターンの適切な説明は、以前に何度も行われたのと同じ方法で何かを行うことが有用な場合、最初に試すときにどんな間違いをするか、そしてそれらの間違いを避けるために見つかった一般的な方法を示します。そのため、設計パターンを読んで(またはメモリからレビューして)、作業を続行します。できないことは、Clippyとウィザードのみを使用することです。
経験の浅い人が間違って現実を考慮しないコードを書くことができるのは、設計パターンのリストがソフトウェアの問題を解決するためのすべての可能なアプローチの完全なリストであり、設計をリンクしてコードを設計しようとするときですそれが終了するまでパターン。野生で見られるもう1つの貧弱な戦術は、デザインパターンが「ベストプラクティス」であるという事実に基づいて、デザインパターンを実際には適さない状況に靴べらにすることです。いいえ、実際に解決する問題のクラスのベストプラクティスである場合とそうでない場合がありますが、解決に失敗した問題、または単純なソリューションがある場合に不必要な複雑さを導入するだけで解決する問題のベストプラクティスではありません。
もちろん、YAGNIに基づいてパターンを回避し、それが必要であることに気付き、通常の解決策を模索することも可能です。これは通常(常にではないが)最初から要件を実現するよりも悪いことであり、アジャイル開発においてさえ、完全に予測可能な要件が早期に発見されないとイライラする理由です。Javaが最初に汎用コンテナを不必要に複雑なものとして拒否し、後でそれらを元に戻したことに非常に面白がっていた唯一のC ++プログラマではありませんでした。
したがって、設計パターンを避けることを好むので、原則としてIterator を書くことを避けることは間違いなく間違いです。
UI /データベース/データレイヤーへの新しいフィールドの追加には2〜3時間かかりますが、彼のコードの場合は30分かかります。
あなたは本当にそれと議論することはできません:このメトリックによって、彼のデザインは他のものよりもはるかに優れています。彼がデザインパターンを避けたからかどうかは疑わしいが、デザインの際に正しい「現実世界」の問題を考えたためであり、経験を生かして教科書と高い理想。
そのため、フィールドを追加するためにコード内の多くの異なる点に触れる必要があるパターンは、「フィールドを簡単に追加できるようにする」というジョブにとって悪いパターンであり、それらのパターンは使用しません。階層化されたアーキテクチャはその点で実際に苦しむ可能性があり、デメリットを認識せずにデザインパターンを使用するのは間違っています。
それに対して、彼のデザインに新しいUIを書くのにどれくらい時間がかかりますか?プロジェクトが、フィールドを絶えず追加するのではなく、固定データモデル上で新しいUIを絶えず構築および展開するように彼に求めた場合、代わりにそのために設計したことを願っています。または同様に。しかし、そのすべての利点について、悲しいことに「アジャイルをしている」と言っても、別のトレードオフをする必要がないという意味ではありません!
設計パターンのメニューから選択すると、確かに最も重要な懸念事項について考えるのを止めることができます。しかし、ビジターを作成していることを認識し、それを文書化するか、「ビジター」と命名して、読者がすばやく取得できるようにすることは、何の邪魔にもなりません。適切に文書化するのではなく「これは訪問者です」と書くことは、シニア開発者が与える理由のためのひどい間違いです。プログラマーはそれを理解しません。訪問者が何であるかを知っているプログラマでさえ、「これは訪問者です」以上の情報が必要です。