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

Commit c23294c

Browse files
committed
refactoring
1 parent d33501c commit c23294c

File tree

1 file changed

+33
-9
lines changed

1 file changed

+33
-9
lines changed

books/refactoring.md

Lines changed: 33 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -734,14 +734,13 @@ describe('', () => {
734734

735735
### 変数のカプセル化
736736

737-
- 目的
738-
- 関数を介してデータを操作することで、変更を容易にしたり監視を可能にしたりするため
739-
- データは関数よりも操作しにくい
740-
- データの再構成という困難な作業を、関数の再構成というより簡単な作業に変えるため
737+
- 関数を介して変数を操作することで、変更を容易にしたり監視を可能にしたりする
738+
- データは関数よりも操作しにくい
739+
- データの再構成という困難な作業を、関数の再構成というより簡単な作業に変える
741740
- 方法
742741
- getter や setter を介して値を操作するようにする
743-
- e.g.
744-
- react の`useState`
742+
- react の`useState`が限りなく近い
743+
- もう少し突っ込んでやるなら「レコードのカプセル化」までやる
745744

746745
### 変数名の変更
747746

@@ -786,8 +785,7 @@ describe('', () => {
786785

787786
### レコードのカプセル化
788787

789-
- プレーンなオブジェクトをクラスインスタンスにする手法
790-
- より具体的には、クラス、Setter、Getter を使ってカプセル化する
788+
- プレーンなオブジェクトをクラスインスタンスにしたうえ、各レコード(プロパティ)を Setter、Getter 介さないと操作できないようにする
791789
- (型、関数型プログラミング、Immutability 全盛の時代には少々時代遅れ感がある)
792790

793791
### コレクション(配列等)のカプセル化
@@ -796,4 +794,30 @@ describe('', () => {
796794
- これを防ぐために、get, add, remove の 3 つの関数を用意する
797795
- get では`slice()`等を使って複製してから返すことで変更されるのを防ぐ
798796
- あとでハードなデバッグをすることと比べたらパフォーマンス問題なんて微々たるもの
799-
- (これも、クラスを使わないで関数でできそう。やや時代遅れ感がある)
797+
- (型、関数型プログラミング、Immutability 全盛の時代には少々時代遅れ感がある)
798+
799+
### オブジェクトによるプリミティブの置き換え
800+
801+
- 最初は単純なデータに見えるものでも、あっという間に関連処理が増える
802+
- e.g. 電話番号であれば、整形や市外局番の抽出処理など
803+
- なので、クラスに置き換えて、データと振る舞いをもたせましょうね、ということ
804+
- 具体的な方法としては、クラスのプロパティを、まずはカプセル化したのちに、値オブジェクト or 参照オブジェクトにする
805+
- (このあたりも関数型ではどうすればよいかわからない)
806+
807+
### 問い合わせによる一時変数の置き換え
808+
809+
- 一時変数を問い合わせ関数にすると:
810+
- 関数の抽出がやりやすくなる
811+
- 計算ロジックの重複を避けられる
812+
- クラスの中で行うのが一番最適
813+
- 副作用がある場合は事前に分離しておく
814+
815+
### クラスの抽出
816+
817+
- クラスの中から、共通性のある一部のプロパティ・メソッドを別のクラスに抽出すること
818+
- 常にこれを心がけておかないと、あっという間にクラスは肥大化していく
819+
820+
### クラスのインライン化
821+
822+
- クラスの抽出の逆
823+
- もはや不要になったクラスを捨てるときや、リファクタ前に一旦全部フラットにしたいときに使う

0 commit comments

Comments
 (0)