Je vais essayer de comprendre pourquoi le CIO pourrait ne pas être bon pour moi.
Comme pour tout le reste, le conteneur IOC (ou comme le dirait Einstein I = OC ^ 2) est un concept que vous devez décider vous-même si vous en avez besoin ou non dans votre code. Le tollé récent sur la mode à propos d'IOC n'est que cela, la mode. Ne tombez pas dans la mode, c'est le premier. Il existe une myriade de concepts que vous pouvez implémenter dans votre code. Tout d'abord, j'utilise l'injection de dépendance depuis que j'ai commencé la programmation et j'ai appris le terme lui-même quand il a été popularisé sous ce nom. Le contrôle de la dépendance est un sujet très ancien et il a été traité jusqu'à présent de milliers de milliards de façons, en fonction de ce qui se découplait de quoi. Découpler tout de tout est un non-sens. Le problème avec le conteneur IOC est qu'il essaie d'être aussi utile qu'Entity Framework ou NHibernate. Bien que l'écriture d'un mappeur relationnel-objet soit tout simplement indispensable dès que vous devez coupler une base de données avec votre système, le conteneur IOC n'est pas toujours nécessaire. Ainsi, lorsque le conteneur IOC est utile:
- Lorsque vous avez une situation avec de nombreuses dépendances que vous souhaitez organiser
- Lorsque vous ne vous souciez pas de coupler votre code avec un produit tiers
- Lorsque vos développeurs veulent apprendre à travailler avec un nouvel outil
1: Ce n'est pas si souvent que vous avez autant de dépendances dans votre code, ou que vous les connaissez au début de la conception. La pensée abstraite est utile lorsque la pensée abstraite est due.
2: Le couplage de votre code avec un code tiers est un problème HuGe. Je travaillais avec du code qui a plus de 10 ans et qui suivait à l'époque des concepts sophistiqués et avancés ATL, COM, COM + et ainsi de suite. Il n'y a rien que vous puissiez faire avec ce code maintenant. Ce que je dis, c'est qu'un concept avancé donne un avantage apparent, mais il est annulé à long terme avec l'avantage obsolète lui-même. Cela avait simplement rendu tout cela plus cher.
3: Le développement logiciel est déjà assez difficile. Vous pouvez l'étendre à des niveaux méconnaissables si vous autorisez un concept avancé à rogner dans votre code. Il y a un problème avec IOC2. Même s'il s'agit de découpler des dépendances, il découplera également le flux logique. Imaginez que vous avez trouvé un bug et que vous devez définir une pause pour examiner la situation. L'IOC2, comme tout autre concept avancé, rend cela plus difficile. La correction d'un bogue dans un concept est plus difficile que la correction d'un bogue dans un code plus simple, car lorsque vous corrigez un bogue, un concept doit être à nouveau respecté. (Juste pour vous donner un exemple, C ++ .NET change constamment la syntaxe à tel point que vous devez bien réfléchir avant de refactoriser une ancienne version de .NET.) Quel est donc le problème avec IOC? Le problème réside dans la résolution des dépendances. La logique de résolution est généralement cachée dans l'IOC2 lui-même, écrit peut-être d'une manière inhabituelle que vous devez apprendre et maintenir. Votre produit tiers sera-t-il disponible dans 5 ans? Microsoft ne l'était pas.
Le syndrome "Nous savons comment" est écrit un peu partout concernant IOC2. Ceci est similaire aux tests d'automatisation. Terme de fantaisie et solution parfaite à première vue, vous mettez simplement tous vos tests à exécuter pendant la nuit et voyez les résultats le matin. Il est vraiment pénible d'expliquer entreprise après entreprise ce que signifient vraiment les tests automatisés. Les tests automatisés ne sont certainement pas un moyen rapide de réduire le nombre de bogues que vous pouvez introduire du jour au lendemain pour augmenter la qualité de votre produit. Mais, la mode rend cette notion énormément dominante. IOC2 souffre du même syndrome. On pense que vous devez l'implémenter pour que votre logiciel soit bon. Tous les entretiens récents, on m'a demandé si j'implémentais IOC2 et l'automatisation. C'est un signe de mode: l'entreprise avait une partie du code écrite en MFC qu'elle n'abandonnera pas.
Vous devez apprendre IOC2 comme tout autre concept logiciel. La décision d'utiliser ou non l'IOC2 appartient à l'équipe et à l'entreprise. Cependant, au moins TOUS les arguments ci-dessus doivent être mentionnés avant que la décision ne soit prise. Ce n'est que si vous voyez que le côté positif l'emporte sur le côté négatif que vous pouvez prendre une décision positive.
Il n'y a rien de mal avec IOC2, sauf qu'il ne résout que les problèmes qu'il résout et présente les problèmes qu'il présente. Rien d'autre. Cependant, aller à l'encontre de la mode est très difficile, ils ont la bouche en sueur, les adeptes de tout. C'est étrange comme aucun d'eux n'est là quand le problème de leur fantaisie devient apparent. De nombreux concepts dans l'industrie du logiciel ont été défendus parce qu'ils génèrent du profit, des livres sont écrits, des conférences ont lieu, de nouveaux produits sont fabriqués. C'est la mode, généralement de courte durée. Dès que les gens trouvent autre chose, ils l'abandonnent complètement. IOC2 est utile mais il montre les mêmes signes que beaucoup d'autres concepts disparus que j'ai vus. Je ne sais pas si elle survivra. Il n'y a pas de règle pour cela. Vous pensez que si elle est utile, elle survivra. Non, ça ne marche pas comme ça. Une grande entreprise riche suffit et le concept peut mourir en quelques semaines. Nous verrons. NHibernate a survécu, EF est arrivé deuxième. Peut-être que l'IOC2 survivra aussi. N'oubliez pas que la plupart des concepts en développement logiciel n'ont rien de spécial, ils sont très logiques, simples et évidents, et il est parfois plus difficile de se souvenir de la convention d'appellation actuelle que de comprendre le concept lui-même. La connaissance d'IOC2 fait-elle d'un développeur un meilleur développeur? Non, car si un développeur n'a pas été en mesure de proposer un concept de nature similaire à IOC2, il lui sera difficile de comprendre quel problème IOC2 résout, son utilisation semblera artificielle et il ou elle pourra commencer à l'utiliser. par souci d'être une sorte de politiquement correct. N'oubliez pas que la plupart des concepts en développement logiciel n'ont rien de spécial, ils sont très logiques, simples et évidents, et il est parfois plus difficile de se souvenir de la convention d'appellation actuelle que de comprendre le concept lui-même. La connaissance d'IOC2 fait-elle d'un développeur un meilleur développeur? Non, car si un développeur n'a pas été en mesure de proposer un concept de nature similaire à IOC2, il lui sera difficile de comprendre quel problème IOC2 résout, son utilisation semblera artificielle et il ou elle pourra commencer à l'utiliser. par souci d'être une sorte de politiquement correct. N'oubliez pas que la plupart des concepts en développement logiciel n'ont rien de spécial, ils sont très logiques, simples et évidents, et il est parfois plus difficile de se souvenir de la convention d'appellation actuelle que de comprendre le concept lui-même. La connaissance d'IOC2 fait-elle d'un développeur un meilleur développeur? Non, car si un développeur n'a pas été en mesure de proposer un concept de nature similaire à IOC2, il lui sera difficile de comprendre quel problème IOC2 résout, son utilisation semblera artificielle et il ou elle pourra commencer à l'utiliser. par souci d'être une sorte de politiquement correct. La connaissance d'IOC2 fait-elle d'un développeur un meilleur développeur? Non, car si un développeur n'a pas été en mesure de proposer un concept de nature similaire à IOC2, il lui sera difficile de comprendre quel problème IOC2 résout, son utilisation semblera artificielle et il ou elle pourra commencer à l'utiliser. par souci d'être une sorte de politiquement correct. La connaissance d'IOC2 fait-elle d'un développeur un meilleur développeur? Non, car si un développeur n'a pas été en mesure de proposer un concept de nature similaire à IOC2, il lui sera difficile de comprendre quel problème IOC2 résout, son utilisation semblera artificielle et il ou elle pourra commencer à l'utiliser. par souci d'être une sorte de politiquement correct.