web-dev-qa-db-ja.com

Java 8、Mapper関数の使用(または乱用)

最近、SpringアプリケーションをJava 8.に移行し始めました。アプリケーションは3つのレイヤー、Rest Controller、Service、Repositoryレイヤーに分かれています。「アーキテクト」は、サービスレイヤー常にマッパー関数を受け入れます。

public <T> Optional<T> getCompany(int companyId, Mapper<S,T> mapper) 

彼の理由は柔軟性です-呼び出し側のクラスが結果を何でも、または望むようにフォーマットできるようにするためです。

私はそれが単に機能の乱用だと思うので、私は提案に同意しません。同時に、新しい機能やコンセプトが本当にメリットをもたらすのであれば、それを採用したくないという印象を与えたくありません。

私の質問は、上記の提案は有効ですか、それともJava 8機能の乱用ですか?

6
HelloWorld

あなたが実際に何かのような意味がある場合

_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()をマッパーとして渡すために、しばしば不要な混乱が解消されます。

13