範囲の設計
設計のポイント
境界値を含む(Inclusive)か否(Exclusive)か?
上限、下限が有限か(Close)、無限(Open)か?
実装例
commons-lang
org.apache.commons.lang3.Range ソースコード Comparatorを実装したクラスなら、これを使って範囲を表現できる
両端がInclusiveかつCloseな範囲のみを表現できる。
Guava
com.google.common.collect.Range ソースコード Comparatorを実装したクラスなら、これを使って範囲を表現できる
両端がInclusive/Exclusiveなもの、Open/Closedなもの全部を1つのRangeクラスで表現できる
if分を使うことなく、「範囲」に要求されるすべてを実現した見事な設計。
Spring Data