Appearance
1メソッドの限界 ― 13個の処理を1つに書いたら
この章のキーワード
| 用語 | 意味 | なぜ重要か |
|---|---|---|
| 結合度(Coupling) | 異なるコード間の依存の強さ | 結合度が高いと変更の影響が広がる |
| 責務の分離 | 1つのクラス/メソッドは1つの役割に集中する原則 | テスタビリティと保守性の向上 |
| ヘルパーメソッド | メインロジックから分離された補助的なメソッド | 各処理を個別にテストできる |
Phase 1: 観察
trade-off メソッド分離はされているが、1クラスの責務が大きい設計です。
LINE でユーザーが友だち追加したとき、LIBOT は以下を全て実行します。
php
// FollowEvent.php(構造の概要)
// Label: trade-off
class FollowEvent
{
public function process(): void
{
// 1. 重複メッセージ検出
if ($this->isDuplicateMessage()) return;
// 2. 友だち情報の取得または作成
$friend = $this->findOrCreateFriend();
// 3. ステータス更新(ブロック解除の場合も含む)
$this->updateFriendStatus($friend);
// 4. 流入経路の記録
$this->logFriendAdditionRoute($friend);
// 5. 紹介フォローの処理
if ($this->isReferralFollow()) {
$this->processReferralFollow($friend);
}
// 6. 流入経路フォローの処理
if ($this->isInflowFollow()) {
$this->processInflowFollow($friend);
}
// 7. ウェルカムメッセージの種類決定
$welcomeType = $this->determineWelcomeType($friend);
// 8. ウェルカムメッセージ送信
$this->sendWelcomeMessage($friend, $welcomeType);
// 9. ポイント付与
$this->issueFollowPoints($friend);
// 10. リッチメニュー設定
$this->assignRichMenu($friend);
// 11. シナリオトリガー
$this->scheduleTriggers($friend);
// 12. イベントファクト記録
$this->recordFriendFollowedFact($friend);
// 13. イベント発火(リアルタイム通知用)
event(new FriendAdded($friend));
}
}13 個の処理。全て process() から呼ばれています。
Phase 2: 判断
AI禁止ゾーン
- もしこの 13 個の処理が 全て
process()の中にベタ書き だったら、何が起きますか? - 現在の ヘルパーメソッド分離 のメリットとデメリットは?
- 14 番目の処理 を追加するとき、どこを変更しますか?
AIに聞く前に、自分の頭で考えてみましょう。
テキストを入力すると有効になります