SRP -単一の責任原則


SRPは固体の一部であり、5つの設計原理の合計を束ねるニーモニック頭字語です.
しかし、SRPは何ですか?

どのような状態ですか?
私は今あなた自身の定義をあなたに与えることができました、しかし、ロバートC .マーティンは彼が最初にこの原則について書いたとき、すでにかなりのものを与えました

"A class should have one, and only one, reason to change"


彼は特にクラスを述べたが、我々はまた、モジュールや関数に原則を適用することができます.
したがって、クラス、モジュール、または関数を持っている場合、その中のコードを変更する理由は一つだけあります.
つではなく、3つ、1つだけ!

基本的な例
かなり基本的な例、いくつかのレポートデータを作成する関数を見てみましょう.そして、あなたが見るように、この機能の中に問題があります.それは1つ以上のことを行います!
function createReportData(user) {
  const lowerCasedForename = user.forename.toLowerCase();
  const capitalizedForename = lowerCasedForename.charAt(0).toUpperCase() + lowerCasedForename.slice(1);
  const greeting = `Hello ${capitalizedForename}!`;
  return {
    id: user.id,
    name: user.name,
    forename: user.forename,
    greeting
  };
}
あなたが挨拶を変更したい場合はどうなりますか?
あなたはcreateReportDataを変更する必要があります!
レポートにデータを追加する場合はどうなりますか?
あなたはcreateReportDataを変更する必要があります!

それはなぜ重要ですか?
SRPはコードを作ります:

テスタブル
あなたのコードは、正確に1つのことを行うときにテストするのが簡単です.なぜなら、その1つのことをテストする必要があるからです.

再利用
あなたは挨拶を作成するロジックを再利用したい想像してください.
createReportDataを使用しますか?
SRPを活用することにより、あなたがオンデマンドを作成することができます小さな独立ユニットを持っている!

読み込み可能
つのことだけをする単位は、サイズがより小さくて、このようにより読みやすいように非常にありそうです、特に、それが通常それに関連する記述的命名を持って.

再分解可能
あなたのユニットが小さく、それぞれが1つだけ物事を行うだけでなく、それはあなたがそれをリファクタリングするために簡単に方法です.
あなたは、最初の5に興味を持っているときに別の何かを行う他の50行の世話をする必要はありません!

適用
上の例を個々の関数を作成することによって修正できます.
次のコードスニペットでは、どのように見えるかを考えます.
function createGreeting(forename) {
  const lowerCasedForename = forename.toLowerCase();
  const capitalizedForename = lowerCasedForename.charAt(0).toUpperCase() + lowerCasedForename.slice(1);
  return `Hello ${capitalizedForename}!`;
}

function createReportData(user) {
  const greeting = createGreeting(user.forename);
  return {
    id: user.id,
    name: user.name,
    forename: user.forename,
    greeting
  };
}

分析の変更
何が起こったのですか.
挨拶文字列を作成するロジックは、別の関数です.
挨拶が変わるならば、それは変化を適用する場所です!
あいさつがレポートのデータの一部であるので、createReportDataは現在createGreetingだけを使用しません.
機能自体は、今後は、唯一の場合は、追加するには、削除するか、レポートデータを変更する場合は、変更する必要があります.
追加ボーナスとして:
あなたのテストケースは、より分離され、独立した!

あなたは気にする必要がありますか?
通常、SRPについて気にかけるべきです.なぜなら、それは通常、適用するより簡単な原則の一つですからです.
あなたのコードを分割するには、それほど多くのエネルギーがかかりません.
「いつこれを変えなければならないのですか?」
あなたが複数の答えを持っているときはいつでも、あなたはあなたのコードを複数の機能に分割することができるということを知っています!
SRPはまた、ここで読んだことがたくさんの利点が付属しています.
なぜそんな小さなコストであなたと一緒にそれらを取るか?

去る前に
あなたが私のコンテンツが好きならば、私を訪ねてください、そして、おそらく、あなたはあなたが見るものが好きです!