Skip to content
This repository was archived by the owner on Mar 20, 2023. It is now read-only.

Commit 659af17

Browse files
committed
refactoring
1 parent b9d42ef commit 659af17

File tree

1 file changed

+34
-1
lines changed

1 file changed

+34
-1
lines changed

books/refactoring.md

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -736,8 +736,41 @@ describe('', () => {
736736

737737
- 目的
738738
- 関数を介してデータを操作することで、変更を容易にしたり監視を可能にしたりするため
739-
- 一般的にデータは関数よりも扱いにくい
739+
- データは関数よりも操作しにくい
740+
- データの再構成という困難な作業を、関数の再構成というより簡単な作業に変えるため
740741
- 方法
741742
- getter や setter を介して値を操作するようにする
742743
- e.g.
743744
- react の`useState`
745+
746+
### 変数名の変更
747+
748+
- 読んで字のごとく、変数の名前を変えること
749+
- 以下を満たす場合には、変数のカプセル化も合わせて実施するとよい
750+
- 変数のスコープが 1 つの関数より広い
751+
- 変数が更新されている
752+
753+
### パラメータオブジェクトの導入
754+
755+
- 複数のパラメータをまとめてオブジェクト(クラス)にする
756+
- メリット
757+
- パラメータがスッキリする
758+
- パラメータ間の関係を表現できる
759+
- 一貫性が向上する
760+
- パラメータに振る舞いをもたせることができる
761+
762+
### 関数群のクラスへの集約
763+
764+
- 以下を一つのクラスにまとめること
765+
- データ
766+
- データをもとに派生値を算出する関数
767+
- 関数型プログラミングにおいては「[入れ子関数](https://martinfowler.com/bliki/FunctionAsObject.html)」で同様のことができる
768+
- (しかし、結局のところシリアライズ不可能なオブジェクトになってしまうので、関数型プログラミングとは言えない?)
769+
- (関連する関数を単一のオブジェクトにまとめておく、だけでも良いのではないか?)
770+
771+
### 関数群の変換への集約
772+
773+
- データ変換関数を用いて、もとのデータに派生値をトッピングしたデータを作る方法
774+
- データ変換関数 = `enrichSomething()``transformSomething()`など
775+
- 扱い方を間違うと、もとのデータが変更されたときに不整合が起こりがちなので注意
776+
- (こっちのほうが関数型プログラミングと親和性が高そう)

0 commit comments

Comments
 (0)