みんな一度は傾倒する DDD の話。例に漏れず自分も DDD 沼にハマった覚えがあり、今でも自身の開発・設計の考えは DDD から大きな影響を受けている。TypeScript で DDD でよくある実装パターンを素振りしてみたことは何度もある。
今日はこの本を読んでいて、DDD でよく使われる値オブジェクトの実装パターンを TypeScript で実装したときの問題について考えていた。
具体的には、TypeScript で不変な値オブジェクトを作って equals メソッドでオブジェクトを比較することでオブジェクト間の等価性を評価する、という部分。equals で評価するのは良いが、当然 `===` などの比較演算子も使えて、その場合は意図しない動作をする。TypeScript(JavaScript) は演算子のオーバーロードが出来ないのでうっかり `===` 演算子を使うと残念なことになる。うっかりミスによる不具合はほぼ起きないと思うが気になる。uuid v4 が衝突したときに発生する不具合と同じくらい気になる。つまりほとんど気にならない。
eslint のカスタムルールを作れば `===` を禁止して equals のみ許可したりできるんだろうか。実用性は無いが時間があるうちに勉強がてら試しに作ってみても良いかもしれない。