プレファクタリング リファクタリング軽減のための新設計


プレファクタリング ―リファクタリング軽減のための新設計 (THEORY/IN/PRACTICE)


オライリー・ジャパン


著者:Ken Pugh 
訳者:木下哲也、有限会社福龍興業


はじめに

1章 プレファクタリングの概要
1.1 プレファクタリングとは
1.2 3つの極度
1.2.1 抽象化
1.2.2 関心事の分離
1.2.3 読みやすさ
1.3 指針の探究
1.3.1 背景状況がすべて
1.3.2 各自のやり方に適合させる
1.3.3 経験を回顧する
1.4 本書における背景状況

2章 非常に多くの言葉で表されるシステム
2.1 サムとの出会い
2.1.1 開発者のティム
2.1.2 サムの要求
2.1.3 サムのユースケース
2.1.4 イリティーズ(Ilities)
2.2 作り直しの回避
2.3 名前の意味
2.4 分割と一括
2.5 凝集化(clumping)
2.6 抽象化
2.6.1 単なるStringではない
2.6.2 定数の回避
2.7 プロトタイプは無数の言葉に匹敵する

3章 開発における一般的な課題
3.1 全体像から始める
3.2 インタフェース契約
3.3 妥当性検証
3.4 コードでの意思疎通
3.4.1 暗黙と明示
3.4.2 明確な名前付け
3.4.3 コードのスペルチェック
3.4.4 やり方を環境に適合させる
3.5 一貫性は簡潔性
3.6 プレファクタリングの姿勢
3.7 繰り返しを避ける
3.8 前提事項と決定事項の文書化
3.9 逸脱とエラーへの対処
3.9.1 失敗の距離
3.9.2 ユーザメッセージ
3.9.3 アサーション
3.10 高速性
3.11 スプレッドシートの難問
3.11.1 グラフィックスの例
3.11.2 誰が責任者か
3.12 ツールはツール−ツールを賢く利用する
3.12.1 IDEを使うか使わないか
3.12.2 複数のツール

4章 全体像をつかむ
4.1 その他の話
4.2 工程
4.2.1 分析麻痺
4.2.2 設計麻痺
4.3 初期設計
4.4 大局的な計画と局部的な設計
4.5 テスト機能
4.5.1 フラクタルは至る所に存在する
4.5.2 テストのフィードバック
4.6 テストの品質
4.7 セキュリティ

5章 クラスの作成
5.1 分類とクラス
5.1.1 異なるクラス
5.1.2 異なるオブジェクト
5.2 宣言と実行
5.3 適切な継承
5.4 テキストを使った通信
5.5 複数

6章 クラスに関するいくつかの用語
6.1 クラスの一般原則を崇拝する
6.1.1 凝集度
6.1.2 結合度
6.2 オブジェクト3原則
6.3 必要性がクラスを決める
6.4 多態性
6.4.1 継承の使用
6.4.2 インタフェースの使用
6.5 1つの小さな仕事
6.6 ポリシーと実装
6.7 極端な名前付け
6.8 関数のオーバーロード

7章 システム作成間近
7.1 現状
7.2 関心事の分離
7.2.1 レンタル契約書の計算
7.2.2 レンタル契約書の作成
7.2.3 レポートの表示
7.2.4 変更と影響
7.3 新システムへの移行
7.3.1 現行データのロード
7.3.2 潜在的な問題の予測
7.3.3 一意性の判断

8章 第1版
8.1 証拠は実物の中にある
8.2 回顧の時間
8.3 現状のシステム
8.4 操作インタフェース
8.5 抽象データ型
8.6 設定
8.7 テスト
8.7.1 テストと製品
8.7.2 テストの柔軟性
8.8 逸脱とエラーの対処
8.8.1 エラーと逸脱の通知
8.8.2 逸脱の規約
8.8.3 ファイルインポート時のエラー
8.9 小規模なプレファクタリング
8.9.1 分割と一括
8.9.2 プレファクタリングの姿勢で臨む
8.10 反復型開発の第1版
8.11 実践項目が理論と一致しない場合もある
8.11.1 意図せぬ結合
8.11.2 完璧なものはない
8.11.3 常に例外がある
8.11.4 小さな誤解
8.12 その他のクラス

9章 関連と状態
9.1 サムの新しい要件
9.2 誰が責任者か
9.2.1 1つのクラスが責任を持つ
9.2.2 関連クラス
9.3 オブジェクトの状態
9.3.1 状態図
9.3.2 2値状態の表現
9.3.3 3つ以上の状態
9.3.4 すべての基本要素を網羅しているか確認する

10章 インタフェースと適合
10.1 カタログ検索ユースケース
10.2 インタフェースの設計
10.2.1 CDとは何か
10.2.2 時期尚早の小さな懸念
10.3 インタフェースの開発
10.4 インタフェースのテスト
10.5 インタフェースの分割
10.6 機能するもの
10.6.1 制約の設定
10.6.2 共通コード

11章 郵便番号とインタフェース
11.1 適合
11.2 責任転嫁
11.3 記述していないコード
11.3.1 アスペクト指向プログラミング
11.3.2 機能が多ければ開発は少なくなる
11.4 間接化
11.5 ロギング
11.6 パラダイムの不一致

12章 レポートの追加
12.1 見栄えのよいレポート
12.1.1 機能が多ければ開発は少なくなる
12.1.2 スプレッドシートの難問に立ち返る
12.2 変更発生
12.3 エクスポート

13章 請求書、クレジットカード、割引
13.1 次の段階
13.1.1 失敗への対応
13.1.2 テストの計画
13.2 クライアントの言葉使い
13.3 セキュリティとプライバシー
13.3.1 セキュリティ
13.3.2 プライバシー

14章 サムの事業拡張
14.1 2号店
14.2 新たな開発
14.2.1 インタフェース契約
14.2.2 冷気を締め出す
14.3 3号店
14.3.1 通貨の柔軟性
14.3.2 言語の柔軟性
14.4 さよならサム
14.5 汎用性

15章 プリントサーバの例
15.1 はじめに
15.2 システム
15.3 メッセージ
15.3.1 特定のメッセージ
15.3.2 メッセージの処理
15.3.3 環境
15.3.4 メッセージの例
15.4 テスト
15.5 ロギング
15.6 さらなる分離
15.7 エピローグ

16章 アンチスパムの例
16.1 背景
16.1.1 環境
16.1.2 SMTP
16.1.3 状態図
16.2 スパムチェック
16.3 ReceivingMailServer
16.3.1 レスポンス
16.3.2 処理メソッド
16.3.3 MailDTO
16.3.4 コマンド処理
16.3.5 別の方法
16.4 ReceivedMailExaminer
16.4.1 代替インタフェース
16.4.2 別の責務割り当て方法
16.4.3 MailReport
16.4.4 MailExaminer
16.4.5 効率についての配慮
16.4.6 関心事の分離
16.5 完全なフロー

17章 エピローグ

付録A 指針と原則
A.1 指針
A.1.1 全体像
A.1.2 極度の抽象化(Extreme Abstraction)
A.1.3 極度の分離(Extreme Separation)
A.1.4 極度の読みやすさ(Extreme Readability)
A.1.5 インタフェース
A.1.6 エラー処理
A.1.7 一般的な問題
A.1.8 セキュリティ
A.1.9 一般的なオブジェクト
A.2 指針の索引
A.3 ソフトウェア設計原則

付録B ソースコード
B.1 com.samscdrental.configurationパッケージ
B.1.1 Configuration.java
B.1.2 DataAccessConfiguration.java
B.1.3 ReportConfiguration.java
B.2 com.samscdrental.controllerパッケージ
B.2.1 MaintenanceOperations.java
B.2.2 RentalOperations.java
B.2.3 ReportOperations.java
B.3 com.samscdrental.dataaccessパッケージ
B.3.1 CDDiscDataAccess.java
B.3.2 CDReleaseDataAccess.java
B.3.3 CustomerDataAccess.java
B.3.4 DataAccessHelper.java
B.3.5 StoreDataAccess.java
B.4 com.samscdrental.display.adtパッケージ
B.4.1 CustomerIDTextField.java
B.4.2 PhysicalIDTextField.java
B.5 com.samscdrental.displayパッケージ
B.5.1 CheckinDialog.java
B.5.2 CheckoutDialog.java
B.5.3 DisplayHelper.java
B.5.4 Main.java
B.5.5 MainFrame.java
B.6 com.samscdrental.failuresパッケージ
B.6.1 Deviation.java
B.6.2 CDCategoryFormatDeviation.java
B.6.3 他の逸脱
B.6.4 SeriousErrorException.java
B.7 com.samscdrental.helperパッケージ
B.7.1 StringHelper.java
B.8 com.samscdrental.importexportパッケージ
B.8.1 AddFromFileInterface.java
B.8.2 CDDiscDataAccessImportExport.java
B.8.3 CDDiscImportExport.java
B.8.4 CDReleaseDataAccessImportExport.java
B.8.5 CDReleaseImportExport.java
B.8.6 CustomerDataAccessExport.java
B.8.7 CustomerImportExport.java
B.8.8 DataAccessImportExportHelper.java
B.9 com.samscdrental.migrationパッケージ
B.9.1 MigrateMain.java
B.10 com.samscdrental.model.adtパッケージ
B.10.1 CustomerID.java
B.10.2 Dollar.java
B.10.3 Name.java
B.10.4 PhysicalID.java
B.10.5 Timestamp.java
B.10.6 UPCCode.java
B.11 com.samscdrental.model.dtoパッケージ
B.11.1 CDDiscInventoryDTO.java
B.11.2 CDDiscInventoryItem.java
B.11.3 OverdueRentalDTO.java
B.11.4 RentalContractDTO.java
B.12 com.samscdrental.modelパッケージ
B.12.1 CDCategory.java
B.12.2 CDCategoryValues.java
B.12.3 CDDisc.java
B.12.4 CDRelease.java
B.12.5 Customer.java
B.12.6 Rental.java
B.13 com.samscdrental.reportsパッケージ
B.13.1 CDDiscInventoryMain.java
B.13.2 CDDiscInventoryReportPlainTextFormat.java
B.13.3 ContractReportPlainTextFormat.java
B.13.4 OverdueRentalReportPlainTextFormat.java
B.13.5 ReportPlainTextFormat.java
B.13.6 Reports.java
B.14 com.samscdrental.testsパッケージ
B.14.1 CheckinCheckoutTests.java
B.14.2 TestOnlyOperations.java

索引

書籍目次

Posted by shi-n