開発者として、私たちはしばしば”自分を繰り返さないでください”のような決まり文句を投げかけるのを聞きます。 私たちはこのようなアイデアを取り、時には少し遠すぎる、彼らと一緒に実行します。
戻って、なぜこれらのことを行うのかを評価することは役に立ちます。 それでは、今日は、ドライプログラミングの代替イデオロギーを見てみましょう。DRYは(Wikipediaによると)次のように定義されています。
知識のすべての部分は、システム内で単一の、明確な、権威ある表現を持たなければなこのうちのいくつかは少し賢明になるかもしれませんが、このようなものを検討するときに役立ちます。 のは、そこにフレージングの部分を分解してみましょう。/p>
すべてのピース
“すべてのピース”とは何ですか? 変数名を繰り返すことはできませんか? HTMLの実体か。
Ok、ok。 だから私たちは繰り返すことができます
<div>
多くの問題なしで、私は誰もそれを怒らせるとは思わない。 しかし、これは質問を持ち出すん-私たちは何かが”知識の一部”になっていると判断するのはいつですか? Reactでは、良い例はコンポーネントかもしれませんが、PrimaryButton
SecondaryButton
Button
クラスを意味しますか? 答えは一般的に”あなたの組織が選ぶものは何でも”と考えられていますが、これはまだ私たちが抽象化することを選択したものの周りにあいまいさ知識
これはもう一つのあいまいな点です。 いくつかのアトミッククラスとReactを使用してスタイル付きのbutton要素を考えてみましょう。 上級開発者が作成するのに10秒かかる場合、彼らはその知識を抽象化する価値があるとは考えないかもしれません。 しかし、システムをよく知らないより若い開発者にとっては、その知識は良い抽象化になる可能性があります。 それ以外の場合は、クラスを追跡し、ボタンがどのように機能するかを思い出させ、
onClick
の構文を把握する必要があります。 知識は相対的であり、定義でそれを使用することはあいまいさを追加します。P>更新:Xanderは以下のコメントを残しました。 私はその記事が”知識”が何を意味するべきかを説明する素晴らしい仕事をしていると思います。
興味のある人のためにこれをここに残したかっただけです。
“DRYは知識に関するものであり、コードの重複は問題ではありません。”
verraes.net/2014/08/dry-is-about-k…単一の、明確な、権威ある表現
“単一の”表現は、多くのことが望まれています。 Devopsエンジニアの観点から見ると、単一の表現は、デプロイする必要があるアプリケーション全体である可能性があります。 フロントエンド開発者には、それはコンポーネントかもしれません。 そして、バックエンドの開発者にとっては、それはクラスまたはAPIエンドポイントのメソッドである可能性があります。 線はどこに描画されますか?
また、「あいまいでない」という言葉もありますが、私が指摘したように、この文の残りの部分はより曖昧さを定義しています。 「権威ある」ことは理にかなっています-あなたのDRYコードはそれが何をするのかを正確に定義し、その定義に忠実でなければなりません。 しかし、それは明示的にDRYコードに限定されていません。最後に、私たちは世界の”システム”を持っています-これは私たちが2秒前に議論した”単一の”声明に戻ります。 “システム”とは何ですか? Reactでは、コンポーネントまたはRedux action/component/reducerである可能性があります。 コンテナ化されたソフトウェアでは、ポッド全体または単一のインスタンスについて話すことができます。
一日の終わりに、DRY all toは、多くの場合、不要であり、時には実際にコードを書くためにあなたの能力を傷つける事前最適化を促進します。 特定のユースケースに合わせて抽象化されたコンポーネントを変更することがより困難な場合があります。 あなたは多くの複雑さを追加したり、そのコンポーネントを新しいものに壊したりします。 最初の日にコンポーネントのすべてのユースケースを知ることはできません。
代替-すべてを二度書く(ウェット)プログラミング
代わりに、私はウェットプログラミングを提案します。 私には、定義は次のようになります。
あなたは自分自身に尋ねることができます”私は前にこれを書いていませんか?”二回、しかし決して三。この定義を使用すると、フォーカスは時期尚早の最適化から離れ、代わりに同様のコードを数回繰り返すことができます。
この定義では、 それはまたより多くの腸の反作用に焦点を移す。 それはあなたが見ている正確なユースケースに基づいて意思決定を行うことができます。 Webアプリを構築する場合は、ボタンを多く使用するため、ボタンをコンポーネントに抽象化することをお勧めします。 しかし、いくつかの特別なスタイリングを持つ単一のページがある場合(多分価格設定ページ?その場合、そのページ上のコンポーネントを抽象化することについてあまり心配する必要はありません。 実際、このシステムでは、その特別なページに似た新しいページが必要な場合は、必要なコードをコピー/貼り付けて変更するだけです。 しかし、それが3回目に発生した瞬間には、抽象化できる部分を抽象化するのに少し時間を費やす時間があります。私はまた、この規定を(ウェットとドライの両方のプログラミングに)追加します: