最近、SpringアプリケーションをJava 8.に移行し始めました。アプリケーションは3つのレイヤー、Rest Controller、Service、Repositoryレイヤーに分かれています。「アーキテクト」は、サービスレイヤー常にマッパー関数を受け入れます。
public <T> Optional<T> getCompany(int companyId, Mapper<S,T> mapper)
彼の理由は柔軟性です-呼び出し側のクラスが結果を何でも、または望むようにフォーマットできるようにするためです。
私はそれが単に機能の乱用だと思うので、私は提案に同意しません。同時に、新しい機能やコンセプトが本当にメリットをもたらすのであれば、それを採用したくないという印象を与えたくありません。
私の質問は、上記の提案は有効ですか、それともJava 8機能の乱用ですか?
あなたが実際に何かのような意味がある場合
_public <S super Company, T> Optional<T> getCompany(int companyId, Mapper<S,T> mapper)
_
マッパーの唯一の機能は、getCompany実装の最終結果を変換することですが、これは私には非常に不必要に思えます。あなたも持つことができます
_public Optional<Company> getCompany(int companyId)
_
また、結果を本当に変換する必要がある場合、API設計では、呼び出しはgetCompany(someid).map(mapper)
ではなくgetCompany(someid, mapper)
のようになります。これにより、意図がより適切に伝達され、実際に結果を変換したくない場合は、Function.identity()
をマッパーとして渡すために、しばしば不要な混乱が解消されます。