プレファクタリング

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

[cover photo]
TOPICS
Programming , Java
発行年月日
PRINT LENGTH
280
ISBN
4-87311-272-9
原書
Prefactoring
FORMAT
PDF
Ebook
3,080円
Ebookを購入する

「プレファクタリング」(Prefactoring)とは、pre(事前に)+refactoring(リファクタリング)という意味の新造語です。リファクタリングとは、コーディング中にコードの動きを変えずにコードを改善する手法のこと。そして、プレファクタリングは、コーディング前にリファクタリングを行うことで、リファクタリングの効率をさらに上げようというもので、著者の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

索引