プレファクタリング(Ken Pugh)
書籍情報
- 著者:Ken Pugh
- 発行日:2006-01-16
- ISBN:4873112729
- URL:https://www.oreilly.co.jp/books/4873112729/
書籍目次
- はじめに
- 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 プロトタイプは無数の言葉に匹敵する
- 2.1 サムとの出会い
- 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 複数
- 5.1 分類とクラス
- 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 関数のオーバーロード
- 6.1 クラスの一般原則を崇拝する
- 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 エクスポート
- 12.1 見栄えのよいレポート
- 13章 請求書、クレジットカード、割引
- 13.1 次の段階
- 13.1.1 失敗への対応
- 13.1.2 テストの計画
- 13.2 クライアントの言葉使い
- 13.3 セキュリティとプライバシー
- 13.3.1 セキュリティ
- 13.3.2 プライバシー
- 13.1 次の段階
- 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 完全なフロー
- 16.1 背景
- 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 ソフトウェア設計原則
- A.1 指針
- 付録B ソースコード