日記2025年7月17日
朝は目覚ましが7:30から鳴る中8:00に起きた。ちょっと寝起きが悪かった。
朝から作業を進めていた。明日出張なので、荷物の準備をしていた。
昼にサイゼリヤに行こうかと思ったがなんとなく外出するのが面倒で、カップ麺に卵を入れたものになった。電子レンジで温めたお湯で卵をあらかじめ温めておき、その卵をカップ麺に入れ、卵にあたるようにお湯を注ぎ、湯の入った鍋で蓋をしておいたところ、これまでの人生で最もいい感じに固まったカップ麺の卵になった。感無量だ。
今日は妙に調子が良く、昼以降も作業することができた。
説明用のドキュメントの調整とか、画面上の文言の調整とか、細々した磨き込みをやっていたら、他のメンバーから問題が見つかったとの連絡があって処理を追加することになった。直前に困る。しかしこのシステムは、依存性注入によって疎結合にしまくり、Decoratorパターンによって責務を分離しまくっていたので、Decoratorを一つ作ってガッチャーンってするだけで済んだ。設計を頑張ったうま味が出た。
夕飯こそはサイゼリヤにした。ついでに出張に持っていくためのケース入り歯ブラシを買おうと画策した。歯ブラシは買い忘れた。短期記憶が弱すぎる。明日道中で買う。多分これも忘れる。
夕飯を食べた後に歩数を稼ぐべくブラブラしていたら、メンバーからトラブルの連絡があった。システムを改修する必要がある。今日は厄日だわ。帰ってクラスを一つ作ってガッチャーンってした。うまうぇい。
あれ
システムの振る舞いの多くをDecoratorパターンで作っている。
レゴブロックみたいで楽しい。スパゲッティになってるような気がしなくもない。
あれ
Decoratorパターンで例外のハンドリングができる……ってコト?!
こんな感じっぽい
class ErrorHandlingProductRepositoryDecorator implements IProductRepository {
constructor(private readonly productRepository: IProductRepository) { }
async insert(product: Product) {
try {
this.productRepository.insert(product)
} catch(error) {
// エラーハンドリングの処理
}
}
}
class Application {
constructor(private readonly productRepository: IProductRepository) { }
}
const application = new Application(
new ErrorHandlingProductRepositoryDecorator(
new ProductRepository()
)
)
こうすることで、ProductRepositoryは「エラーハンドリングとか知らね」ってできるし、テストとかでエラーハンドリングしたくない場合はProductRepositoryをApplicationに直接渡してしまえばよいってわけね。