Open jnuank opened 4 years ago
ワシの考え。
決定事項: 有効な予約型 を導入する
テスト実装する。(昨日消しちゃったやつ! )
あれ? 既存の Reservation を直しながらやる?
そうすると、有効な予約型を作っているときに、既存のテストが壊れてしまう。 → 悲しい: 視覚的につらい。。。REDはこころにダメージがくる → 悲しい: うっかり、残しておくべきテストを破壊してしまうかもしれない
さらに、有効な予約型っていう話は、ドメインの重要な話なので、丁寧行くべき。というか不安。
以上より、
〇〇
という方針
15 から派生した話。
このあたりの処理なんですが、「有効な予約か?」という判定ロジックはドメインオブジェクトに寄せられそうな気がします! 付随している「開始時刻が現在時刻より未来かどうか?」というロジックも寄せられそう(リファクタリングされたコードを見て初めて気づきました! リファクタリングありがてえ!)。
なんでかっていうと、「有効な予約」というのは重要な概念だと思うからです。 現状の実装では、インフラ層のRepsoitoryの具体的な実装をみないと「有効な予約」の意味がわからないと思うんですよね。
気になるお題が3点
素直にドメインオブジェクトに実装しようとする前に、気になることは3つあってですね。 (ちょっと長いので、このPRはマージして、別途議論したほうが良いかも)
Repository.find_available_reservations の時点で「有効な予約」という情報は十分に表現できているから、別にこのままで良い説 しかし、「有効」の意味を誤解して実装をミスっていたときに、現状のテストコードではそれを検知できない問題が生まれる(f511922 で消してもうた!)
現状の実装では、ドメインオブジェクト(Reservation)に、有効な予約かどうか判定ロジックを実装したとしても、利用するのはインメモリのRepsoitoryだけ(もし、インメモリのリポジトリ不要だと判断するなら、どこからも呼ばれない振る舞いになっちゃうけど、それってなんかへんじゃない?)。
現在時刻をどこで取得するか? これは、現在時刻は "とりあえず" ドメインオブジェクト内で取得しちゃって良いと思ってます。重要ですが、別の話だと思うので。