system-sekkei/isolating-the-domain

開始時刻と終了時刻のモデル、ビュー、テーブル

Opened this issue · 3 comments

興味深いテーマなので、discussion。

文字列で扱うのは、bad smell。

素直に考えると、

オブジェクト : LocalTime
テーブル: time

で表現したい。

こうなっていない理由は、24:00 あるいは、26:00 という表記(view)を扱いたいから。

オブジェクトだけであれば、そういう情報を持たせることが可能。
例えば、 localTime + overFlow (boolean) みたいな overFlow == true であれば、24 + localTimeにする。

テーブルも、そういう構造にすれば、永続化が可能。

ビューとモデルの間は変換が必要。

出力は、toString() でよい。( 24 + localTime)

入力のバインディングは、single string コンストラクタで、parse する。

あるいは、コンストラクタにロジックは入れたくないので、ファクトリメソッドを用意する。
これだと、Spring MVC のバインディングができないので、ビューモデルを作って、明示的に変換する。

というような方向で、文字列で扱うのではなく、LocalTime とtime型を使う方向にしたい。

もうひとつのアプローチとして、日付と時刻をきちんと使う、という方法がありそう。
事実の記録としては、年月日+時刻という基本形式を重視する。
テーブルの主キーとか、計算方法とかいくつか考慮点はある。

この方法を採用するかどうかは、給与の締日をまたいだ勤務時間を、どこに入れるているか、という現場の実態に合わせたい。

月末締めの場合、月をまたいだ勤務は、翌月の給与になるのではないかしら?

  • どう記録・表示するか?
  • どう内部で持つか
  • 給与計算や給与支払いのルールを、どうするか?

ここらへんの専門家の知見が欲しいところ。

version 2.0 では、known issue でよい。

ここらへんの知識/枠組みを意識した設計にしておきたい。

昭63.1.1.基発第1号

継続勤務が2暦日にわたる場合には、たとえ暦日を異にする場合でも1勤務として取扱い、当該勤務は始業時刻の属する日の「1日」とすること。

http://www13.plala.or.jp/S-Kawamura/roudo/keizokukinmu%20warimashi.html

「2暦日にわたる」ということを明示的に記録するために、
勤務記録は、
開始日+開始時刻
終了日+終了時刻
という形式でもつほうがよさそう。(同日であれば、開始日=終了日)