Le même problème de base, vous obtenez souvent avec la programmation orientée objet, les règles de style, et à peu près tout le reste. Il est possible - très fréquent, en effet, à trop en faire abstraction, et d'ajouter trop d'indirection, et plus généralement pour appliquer les bonnes techniques de manière excessive et dans les mauvais endroits.
Chaque modèle ou d'autres construction d'appliquer amène de la complexité. L'Abstraction et l'indirection éparpillement de l'information autour de, parfois émouvant détail sans importance, mais aussi parfois difficile de comprendre exactement ce qui se passe. Chaque règle d'appliquer apporte de la rigidité, ce qui exclut les options que peut-être la meilleure approche.
Le point est d'écrire du code qui fait le travail et est robuste, lisible et maintenable. Vous êtes un développeur de logiciel, pas une tour d'ivoire builder.
EDIT - UN couple de liens pertinents...
http://thedailywtf.com/Articles/The_Inner-Platform_Effect.aspx
http://www.joelonsoftware.com/articles/fog0000000018.html
MODIFIER
Comme j'ai eu un coup de réputation de boost à partir de cela, j'ai décidé d'ajouter un peu plus précisément sur l'injection de dépendance.
Probablement la forme la plus simple de l'injection de dépendance (ne riez pas) est un paramètre. Le code dépendant dépend des données, et que les données sont injectées par les moyens de transmission du paramètre.
Oui, c'est idiot, et il n'a pas d'adresse orientée objet, le point de l'injection de dépendance, mais un programmeur fonctionnel vous dire que (si vous avez d'abord des fonctions de classe) c'est le seul type de l'injection de dépendance dont vous avez besoin. Le point ici est de prendre un exemple trivial, et de montrer le potentiel de problèmes.
Vous permet de profiter de cette simple fonction traditionnelle - syntaxe C++ n'est pas important ici, mais je dois préciser quelque sorte...
void Say_Hello_World ()
{
std::cout << "Hello World" << std::endl;
}
J'ai une dépendance je veux extraire et injecter - le texte "Hello World". Assez facile...
void Say_Something (const char *p_text)
{
std::cout << p_text << std::endl;
}
Comment est-ce plus rigides que les originaux? Eh bien, si je décide que la sortie doit être en unicode. J'ai probablement ne souhaitez pas utiliser std::cout de std::wcout. Mais cela signifie que mes cordes alors être de wchar_t, pas de char. Chaque appelant doit être changé, ou (plus raisonnable), de la vieille mise en œuvre sera remplacé par un adaptateur qui convertit la chaîne et appelle la nouvelle mise en œuvre.
C'est le travail de maintenance là qui ne sont pas nécessaires si nous avions conservé l'original.
Et si cela semble trivial, jetez un oeil à ce monde réel, la fonction de l'API Win32...
http://msdn.microsoft.com/en-us/library/ms632680%28v=vs.85%29.aspx
C'est 12 "dépendances" à traiter. Par exemple, si les résolutions d'écran vraiment énorme, peut-être que nous aurons besoin de 64 bits coordonner des valeurs et une autre version de CreateWindowEx. Et oui, il y a déjà une version plus ancienne encore traîner, qui, vraisemblablement, est tracé à la version la plus récente en coulisses...
http://msdn.microsoft.com/en-us/library/ms632679%28v=vs.85%29.aspx
Ces "dépendances" ne sont pas seulement un problème pour le développeur d'origine - tout le monde qui utilise cette interface a qu'à regarder ce que les dépendances sont, comment ils sont, et ce qu'ils signifient, et que faire pour leur application. C'est là que les mots "valeurs par défaut raisonnables" peuvent rendre la vie beaucoup plus simple.
Orientée objet injection de dépendance n'est pas différent dans son principe. L'écriture d'une classe est une surcharge, à la fois dans le code source du texte et dans le temps dans le révélateur, et si cette classe est écrite pour la fourniture de dépendances selon certains objets dépendants spécifications, alors dépendante de l'objet est verrouillé dans le soutien de cette interface, même si il y a un besoin de remplacer la mise en œuvre de cet objet.
Rien de tout cela devrait être lu comme affirmant que l'injection de dépendance est mauvais, loin de là. Mais toute bonne technique peut être appliquée de manière excessive et au mauvais endroit. Tout comme chaque chaîne doit être extraite et transformée en paramètre, pas chaque de bas niveau comportement doit être extrait à partir de haut niveau des objets et de les transformer en une injection de dépendance.