Dans les précédents articles, nous avons étudié 3 refactorings permettant d’améliorer la lisibilité de code manipulant le type Future[Option[T]]
.
L’application du principe de séparation des responsabilité a permis une première amélioration, l’utilisation d’exceptions métier est une solution dans certains cas mais sacrifie une partie de l’information de typage.
Finalement l’utilisation d’un type ad hoc composant les propriétés d’une Future
et d’une Option
s’est avéré être un parfait complément à la séparation initiale.
Le seul défaut de cette dernière approche est le besoin de maintenir ce type et de construire un nouveau type pour chaque nouvelle composition: FutureO
(Future
et Option
), FutureL
(Future
et List
), etc. Ces types ne sont pas spécifiques à un projet et idéalement devraient être extraits dans une bibliothèque. Il s’avère qu’une telle bibliothèque existe déjà.
Dans cet article, le dernier de cette série, je vous propose un refactoring utilisant les MonadTransformer
de Scalaz 7.x.