13
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【React】よく耳にする設計用語の例え話をしてみた

Posted at

おはこんばんちは、@ちーずです。

本日のテーマは、「設計用語」に関してですが、
正直設計用語ってドキュメント読んでもいまいちパッとこなかったりしますよね。

そのような人にもなるべくわかりやすいよう「例え話」を添えて説明いたします。

単一責任の原則

単一責任の原則とは、SOLID原則の1つであり
「一つのモジュール(関数やクラス)は、一つの責任だけを持つべき」という原則です。

Reactでは、コンポーネントやhooksの責務を考える上で、非常に重要な考え方です。

「ハイボールを作る」処理があったと仮定して考えてみましょう。

ハイボールを作る処理.png

図の左側の処理Aは、

  • ウイスキーを入れる
  • 炭酸水を入れる

という複数の責任を持っており、この処理はハイボールを作る時にしか使えません。

一方で、図の右側のように1つの処理に対して一つの責任しか持たないように実装した場合、

  • 処理B は ウイスキーを入れる
  • 処理C は 炭酸水を入れる

ウイスキーロックを作る時に処理Bが使えますし、
処理Cなんて、レモンサワーや果実酒サワーなど、いろんなお酒を作る時に大活躍できます。

また、仮に「ウイスキーが腐った!」というバグが発生したとしても、
「発生要因がウイスキーである」ことが発見しやすい、というメリットもあります。
.....ウイスキーって腐るんですかね。

メリットまとめ

  • 汎用的に扱うことができる
  • 他の無関係な動作に影響を与えないようにできる
  • 単体テストが書きやすい

▼ 参考

関心の分離(Separation of Concerns)

関心の分離とは、「異なる関心ごとは、異なる部分に分離する」という考え方です。
Componentの命名やレイヤー分けなどに対して良く使われます。

  • 見た目
  • ビジネスロジック

これらを分離することも「関心の分離」です。

この考え方も関心の分離...?

先輩からよく 「Componentやhooksは無責任に振る舞え」と指摘されるのですが、
それも「関心の分離」に含まれるのでは?と考えております。

例えば、「数学のノートを取る」という処理があったとします。

関心の分離.png

A子はAくんが好きで、Aくんのためだけに数学のノートを書いたとしましょう。
そうすると、自分やAくん以外の人には適応できない数学のノートが完成するわけです。
一方B子は、「数学のノートを取る」ことだけをしたため、誰が見てもわかるノートが完成するわけです。

「数学のノートを取る」という行為に対して、Aくんのためであるなんて知ったこっちゃないわけです。
そのため、「Aくんのために〇〇する」行為と「数学のノートを取る」行為は分離させる必要があります。

▼ 参考

分割統治法

分割統治法とは、大きな問題を小さく分割して解決していく手法のことです。
小さく分割することで、影響の範囲を限定していくことができます。

例えば、「部屋の電気がつかない」という問題が発生したとしましょう。
その問題だけ聞くと、非常に大きい問題に聞こえますね。

それでは小さく分割していきましょう。

  • 電気代を払っているか
  • 部屋の電球に異常がないか
  • ブレーカーは上がっているか

そして、それぞれの異常をチェックすれば、原因が特定できるわけです。

DRYの原則

DRYは「don’t repeat yourself」の略であり、
重複することをなるべく避けるべきとする考え方です。

...シンプルすぎて例え話もいらなさそうですね。笑

13
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?