インプレス[コンピュータ・IT]ムック ソフトウェア設計の結合バランス 持続可能な成長を支えるモジュール化の原則
インプレス / 2025年10月17日 / 全311ページ
「結合」とは、モジュール設計における基本概念の1つ。モジュール間の相互作用や依存関係の強さを表します。「結合」を適切に管理することで、ソフトウェアシステムの保守性や拡張性、進化性を向上させることができます。その重要性にも関わらず「結合」について深く理解されていないのが実情です。本書では、まず構造化設計やオブジェクト指向設計に用いられてきた「結合」に関するモデルや評価手法を包括的に解説。さらに、複雑性を管理し、モジュール性を高める設計ツールとして「結合」を使用する新たなアプローチを提案します。
目次
- 正誤表、免責事項について
- 本書への推薦の言葉
- シリーズ編集者による序文
- Rebecca J. Wirfs-Brockによる序文
- Kent Beckによる序文
- はじめに
- 謝辞
- 著者について
- イントロダクション
- 目次
- 第I部 結合
- 第1章 結合とシステム設計
- 1.1 結合とは何か
- 1.2 結合の強度1.2.1 ライフサイクルの共有
- 1.2.2 知識の共有
- 1.3 知識の流れ
- 1.4 システム
- 1.4.1 システムにおける結合
- 1.4.2 オプション:機械工学における結合とコスト管理
- 1.5 まとめ
- 正誤表、免責事項について
- 本書への推薦の言葉
- シリーズ編集者による序文
- Rebecca J. Wirfs-Brockによる序文
- Kent Beckによる序文
- はじめに
- 謝辞
- 著者について
- イントロダクション
- 目次
- 第I部 結合
- 第1章 結合とシステム設計
- 1.1 結合とは何か
- 1.2 結合の強度1.2.1 ライフサイクルの共有
- 1.2.2 知識の共有
- 1.3 知識の流れ
- 1.4 システム
- 1.4.1 システムにおける結合
- 1.4.2 オプション:機械工学における結合とコスト管理
- 1.5 まとめ
- 1.6 演習問題
- 第2章 結合と複雑性:クネビン
- 2.1 複雑性とは何か2.1.1 ソフトウェア設計における複雑性2.1.2 複雑性は主観
- 2.2 クネビンフレームワーク2.2.1 明確系(Clear)
- 2.2.2 煩雑系(Complicated)
- 2.2.3 複雑系(Complex)
- 2.2.4 混沌系(Chaotic)2.2.5 無秩序(Disorder)
- 2.3 クネビンフレームワークのドメインの比較
- 2.4 ソフトウェア設計におけるクネビンフレームワーク2.4.1 例A:外部サービスの統合
- 2.4.2 例B:データベースインデックスの変更
- 2.5 クネビンフレームワークの適用2.6 クネビンフレームワークと複雑性
- 2.7 まとめ
- 2.8 演習問題
- 第3章 結合と複雑性:相互作用
- 3.1 複雑性の本質3.2 複雑性とシステム設計3.2.1 線形な相互作用
- 3.2.2 複雑な相互作用
- 3.2.3 複雑性とシステムの規模3.3 階層的複雑性
- 3.3.1 大域的複雑性だけを最適化する
- 3.3.2 局所的複雑性だけを最適化する
- 3.3.3 複雑性のバランスを調整する3.4 自由度3.4.1 ソフトウェア設計における自由度
- 3.4.2 自由度と複雑な相互作用
- 3.5 複雑性と制約3.5.1 例:自由度を制約する
- 3.5.2 クネビンフレームワークのドメインにおける制約3.6 結合と複雑な相互作用
- 3.7 例:結合と複雑性を結びつける3.7.1 設計A:SQLを使用してサポートケースをフィルタリングする
- 3.7.2 設計B:QueryObjectを使用する
- 3.7.3 設計C:特化したファインダーメソッドを使用する
- 3.7.4 結合、自由度、制約
- 3.8 まとめ
- 3.9 演習問題
- 第4章 結合とモジュール性
- 4.1 モジュール性
- 4.2 モジュール
- 4.2.1 LEGOブロック
- 4.2.2 カメラの交換レンズ4.3 ソフトウェアシステムにおけるモジュール性
- 4.3.1 ソフトウェアモジュール
- 4.3.2 ソフトウェアモジュールの機能、ロジック、コンテキスト
- 4.3.3 効果的なモジュール
- 4.3.4 抽象としてのモジュール
- 4.4 モジュール性、複雑性、結合
- 4.4.1 深いモジュール
- 4.4.2 モジュール性と複雑性
- 4.4.3 モジュール性:過ぎたるはなお及ばざるがごとし
- 4.5 モジュール性における結合
- 4.6 まとめ
- 4.7 演習問題
- 第II部 次元
- 第5章 構造化設計におけるモジュール結合
- 5.1 構造化設計5.2 モジュール結合
- 5.2.1 内容結合(Content Coupling)
- 5.2.2 共通結合(Common Coupling)
- 5.2.3 外部結合(External Coupling)
- 5.2.4 制御結合(Control Coupling)
- 5.2.5 スタンプ結合(Stamp Coupling)
- 5.2.6 データ結合(Data Coupling)
- 5.3 モジュール結合レベルの比較
- 5.4 まとめ
- 5.5 演習問題
- 第6章 コナーセンス
- 6.1 コナーセンスとは6.2 静的コナーセンス
- 6.2.1 名前のコナーセンス
- 6.2.2 型のコナーセンス
- 6.2.3 意味のコナーセンス
- 6.2.4 アルゴリズムのコナーセンス
- 6.2.5 位置のコナーセンス
- 6.3 動的コナーセンス
- 6.3.1 実行のコナーセンス
- 6.3.2 タイミングのコナーセンス
- 6.3.3 値のコナーセンス
- 6.3.4 同一性のコナーセンス
- 6.4 コナーセンスの評価
- 6.4.1 コナーセンスの管理
- 6.4.2 構造化設計のモジュール結合とコナーセンス
- 6.5 まとめ6.6 演習問題
- 第7章 統合強度
- 7.1 結合の強さ
- 7.1.1 モジュール結合、コナーセンス、それとも両方?
- 7.1.2 構造化設計とコナーセンスの盲点
- 7.1.3 異なる戦略7.2 統合強度
- 7.2.1 具体例:データベースの共有7.3 侵入結合
- 7.3.1 侵入結合の例7.3.2 具体例:データベースの共有による侵入結合
- 7.3.3 侵入結合の影響7.4 機能結合
- 7.4.1 機能結合の度合い
- 7.4.2 機能結合の原因7.4.3 具体例:データベースの共有による機能結合
- 7.4.4 機能結合の影響7.5 モデル結合
- 7.5.1 モデル結合の度合い
- 7.5.2 具体例:データベースの共有によるモデル結合
- 7.5.3 モデル結合の影響
- 7.6 コントラクト結合
- 7.6.1 コントラクト結合の例
- 7.6.2 コントラクト結合の度合い
- 7.6.3 コントラクト結合の深さ
- 7.6.4 具体例:データベースの共有によるコントラクト結合
- 7.6.5 コントラクト結合の影響
- 7.7 統合強度の議論
- 7.7.1 分散システムの例
- 7.8 統合強度と非同期実行
- 7.9 まとめ7.10 演習問題
- 第8章 距離
- 8.1 距離とカプセル化境界
- 8.1.1 距離のコスト
- 8.1.2 ライフサイクル結合としての距離
- 8.1.3 距離の評価
- 8.2 距離に影響を与える追加の要因8.2.1 距離とソシオテクニカルデザイン
- 8.2.2 距離と実行時結合8.2.3 非同期通信と変更コスト
- 8.3 距離と近接性8.4 距離と統合強度
- 8.5 まとめ8.6 演習問題
- 第9章 変動性
- 9.1 変更と結合9.2 ソフトウェアが変更される理由
- 9.2.1 ソリューションの変更
- 9.2.2 問題の変更
- 9.3 変更率の評価9.3.1 ドメイン分析
- 9.3.2 ソースコード分析
- 9.4 変動性と統合強度
- 9.5 推定変動性
- 9.6 まとめ9.7 演習問題
- 第III部 バランス
- 第10章 結合の均衡化
- 10.1 結合の次元を組み合わせる
- 10.1.1 測定単位
- 10.1.2 安定性:変動性と強度10.1.3 実コスト:変動性と距離
- 10.1.4 モジュール性と複雑性:強度と距離
- 10.2 強度、距離、変動性の組み合わせ10.2.1 メンテナンスの労力:強度、距離、変動性
- 10.2.2 均衡結合:強度、距離、変動性
- 10.3 結合の均衡度を数値スケールで評価する
- 10.3.1 均衡結合方程式
- 10.3.2 均衡結合:例
- 10.4 まとめ10.5 演習問題
- 第11章 結合の再均衡化
- 11.1 変更に強い設計11.2 ソフトウェア変更の要因11.2.1 戦術的変更
- 11.2.2 戦略的変更
- 11.3 結合の再均衡化
- 11.3.1 強度
- 11.3.2 変動性
- 11.3.3 距離
- 11.3.4 複雑性の再均衡化11.4 まとめ
- 11.5 演習問題
- 第12章 ソフトウェア設計のフラクタル幾何学的性質
- 12.1 成長12.1.1 ネットワーク型システム
- 12.1.2 ソフトウェア設計はネットワーク型システム
- 12.1.3 なぜシステムは成長するのか
- 12.1.4 成長の限界
- 12.1.5 ソフトウェア設計における成長のダイナミクス
- 12.2 イノベーション
- 12.2.1 ソフトウェア設計におけるイノベーション12.2.2 イノベーションとしての抽象化
- 12.3 フラクタル幾何学的性質
- 12.4 フラクタルモジュール性12.5 まとめ
- 12.6 演習問題
- 第13章 均衡結合の実践
- 13.1 マイクロサービス13.1.1 ケーススタディ1:イベントによる余分な知識の共有
- 13.1.2 ケーススタディ2:十分な統合
- 13.2 アーキテクチャパターン13.2.1 ケーススタディ3:複雑性の軽減
- 13.2.2 ケーススタディ4:レイヤー、ポート、アダプター
- 13.3 ビジネスオブジェクト13.3.1 ケーススタディ5:エンティティと集約
- 13.3.2 ケーススタディ6:クラスの編成
- 13.4 メソッド13.4.1 ケーススタディ7:分割統治
- 13.4.2 ケーススタディ8:コードの臭い
- 13.5 まとめ13.6 演習問題
- 第14章 結論
- 第15章 エピローグ
- 付録A 結合のバラード
- 付録B 結合の用語集
- 付録C 演習問題の解答
- 付録D ドメイン駆動設計の用語の訳について
- 参考文献
- 訳者あとがき
- 索引
- 翻訳者プロフィール
- 奥付
※このデジタル雑誌には目次に記載されているコンテンツが含まれています。それ以外のコンテンツは、本誌のコンテンツであっても含まれていません のでご注意ください。
※電子版では、紙の雑誌と内容が一部異なる場合や、掲載されないページがある場合があります。