Un bon exemple d'IoC est la simulation de base de données. Pendant que vous écrivez une application, vous devrez peut-être conserver des objets pour les récupérer ou les utiliser plus tard. Eh bien, faire abstraction de la base de données, vous créez une interface avec une méthode comme ceci:
Interface DbSaver
+void save(MyObject myObject)
+MyObject load(String id)
Sans IoC, vous auriez quelque chose comme ceci:
DbSaver saver = new DefaultDbSaver();
ou, vous définiriez juste une mise en œuvre et l'accès comme un singleton (qui semble d'abord approprié pour un objet de manipulation de base de données):
MyDbSaver saver = MyDbSaver.getInstance();
Avec IoC, vous pouvez changer la mise en œuvre de DbSaver sans même recom empiler votre application (au moins Spring fournit cela). Autrement dit, sans changer de code, vous pouvez choisir d'utiliser une implémentation plutôt qu'une autre. Avec les objets d'accès à la base de données, la chose la plus courante est de créer une implémentation par défaut qui stocke tout en mémoire. À mesure que vous finalisez la conception, la structure ou la technologie de votre base de données, vous pouvez continuer à créer votre application sans vous soucier de la façon dont les données sont conservées. Vous travaillez simplement dans l'interface. De cette manière, les objets métier sont découplés de l'intégration de la base de données, ce qui présente l'énorme avantage de permettre le développement simultané des deux pièces.
Manière indirecte pour éviter le codage coûteux que nous devrions –