@@ -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