Discord: https://pinto-bagpipe-5b6.notion.site/Discord-3880d8895d33480aa00b5a32c140194b
## 悪い結合が3つある
- **コンテント結合 (Content coupling):** 最も結合度が高い、最悪のパターンです。あるモジュールが別のモジュールの内部コードを直接利用したり、変更したりする状況を指します。これは情報隠蔽というソフトウェア設計の基本原則を完全に破壊する行為です。
- EnemyControllerとEnemyActionというものがある
- EnemyControllerがEnemyActionの特定のAnimationの内容を直接変えだす。公開されてるインターフェースを使わずに。結果攻撃のアニメーションがぐちゃぐちゃになった
- **共通結合 (Common coupling):** 複数のモジュールが同じグローバルデータにアクセスする状況です。変更が予期せぬ副作用やエラーの伝播を引き起こすリスクがあります。
- 例えばグローバル変数でシステムのモードみたいなのをEnumで持ってる
- あらゆるサービスがそのシステムのモードを見て動きを変える
- だれかが意図しないタイミングでシステムのモードを変えたら全然意味不明な動きをするようになった
- **制御結合 (Control coupling):** あるモジュールが、別のモジュールに「何をすべきか」を指示する情報(例えば、処理を分岐させるフラグなど)を渡すことで、その制御フローをコントロールしている状態です。
- EnemyControllerクラスが、EnemyActionのフローを制御してる
- 攻撃のEnemyActionクラスをコントローラーが制御する
- コントローラーがなぜか
- まず1s 剣を振りかぶる動作のメソッドを呼ぶ
- 剣をふらせるメソッドを呼ぶ
- その後2s硬直して後隙をうませる
- この責務はEnemyAction側にあったほうがいい。コントローラーがやることで、攻撃の動作のロジックがコントローラーに染み出している