Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Pourquoi vous devriez arrêter d'utiliser les field injection #DevoxxFR

Pourquoi vous devriez arrêter d'utiliser les field injection #DevoxxFR

Durant cette présentation, nous parlerons inversion de contrôle (IOC) et injection de dépendance (DI).

Nous nous intéresserons aux défauts induits par l'utilisation des injections par champ (field injection), alors même qu'elles sont encore très populaires aujourd'hui (notamment grâce à Spring). Nous verrons quelles sont les alternatives possibles, et les avantages consécutifs à leur utilisation.

-- Devoxx France 2018 --

8140a367a6c6ed81f2d09a3886f7dea7?s=128

Erwan Deruelle

April 20, 2018
Tweet

Transcript

  1. #DevoxxFR #StopFieldInjection @d3rwan Erwan Deruelle @d3rwan Pourquoi vous devriez arrêter

    d’utiliser les @Autowired Field Injection
  2. #DevoxxFR #StopFieldInjection @d3rwan 2 Erwan Deruelle Développeur full-stack d3rwan 2

    2
  3. #DevoxxFR #StopFieldInjection @d3rwan 3 Yet another travel service

  4. #DevoxxFR #StopFieldInjection @d3rwan 4 Yet another travel service

  5. #DevoxxFR #StopFieldInjection @d3rwan 5 Dependencies instantiation

  6. #DevoxxFR #StopFieldInjection @d3rwan 6 Dependencies instantiation IoC Inversion of Control

    DI
 Dependency Injection / 6
  7. #DevoxxFR #StopFieldInjection @d3rwan 7 Travel service - Enterprise Edition

  8. #DevoxxFR #StopFieldInjection @d3rwan Field Injection + Short and concise 8

  9. #DevoxxFR #StopFieldInjection @d3rwan Field Injection + Short and concise -

    Coupling with DI Container - Inconsistent state possible - Mutable/hidden dependencies - Circular dependencies - Tends to hide code design red flags 9
  10. #DevoxxFR #StopFieldInjection @d3rwan 10 Alternative : Setter Injection

  11. #DevoxxFR #StopFieldInjection @d3rwan Setter Injection 11 + Less coupling with

    DI Container + Explicit dependencies + Bad design code indicator
  12. #DevoxxFR #StopFieldInjection @d3rwan Setter Injection + Less coupling with DI

    Container + Explicit dependencies + Bad design code indicator - The most verbose, more boilerplate code - Break encapsulation, inconsistent state possible - Mutable dependencies - Circular dependencies 12
  13. #DevoxxFR #StopFieldInjection @d3rwan 13 Alternative : Constructor Injection

  14. #DevoxxFR #StopFieldInjection @d3rwan Constructor Injection 14 + No more coupling

    with DI Container + Explicit dependencies + Bad design code indicator + Immutable dependencies + State always valid + No circular dependencies + Compiler is your friend
  15. #DevoxxFR #StopFieldInjection @d3rwan 15 Constructor Injection Setter Injection Field Injection

  16. #DevoxxFR #StopFieldInjection @d3rwan 16 Industry state of the art

  17. #DevoxxFR #StopFieldInjection @d3rwan Resources 17 • https://docs.spring.io/spring/docs/4.3.x/spring-framework- reference/html/beans.html#beans-constructor-injection • http://vojtechruzicka.com/field-dependency-injection-considered-

    harmful/ • https://kinbiko.com/java/dependency-injection-patterns/ • http://olivergierke.de/2013/11/why-field-injection-is-evil/
  18. #DevoxxFR #StopFieldInjection @d3rwan Thanks 18