25 minutos · En parejas
¿Qué está variando — y cuánto?
Fragmento A
class WelcomeNotifier { public function send(User $u): void { $msg = $this->buildMessage($u); $this->log('sending', $u); Mail::send($u->email, $msg); // DISTINTO $this->log('sent', $u); } } class PromoNotifier { public function send(User $u): void { $msg = $this->buildMessage($u); $this->log('sending', $u); SMS::send($u->phone, $msg); // DISTINTO $this->log('sent', $u); } }
Estructura sugerida
s3m-taller/ ├── Contracts/ ← abstracta o interfaz └── Services/ ← implementaciones
s3m-taller/ ├── contracts/ ← abstracta o interfaz └── services/ ← implementaciones
s3m-taller/ ├── contracts/ ← abstracta o interfaz └── services/ ← implementaciones
Fragmento B
class PriceFormatter { public function format(float $n): string { switch ($this->locale) { case 'en_US': return '$' . number_format($n, 2); case 'de_DE': return number_format($n, 2, ',', '.') . ' €'; case 'ja_JP': return '¥' . number_format($n, 0); } } }
Estructura sugerida
s3m-taller/ ├── Contracts/ ← interfaz └── Formatters/ ← implementaciones
s3m-taller/ ├── contracts/ ← interfaz └── formatters/ ← implementaciones
s3m-taller/ ├── contracts/ ← interfaz └── formatters/ ← implementaciones
Para cada fragmento: ¿qué varía, cuánto varía, y qué patrón lo resuelve?