Ich werde versuchen herauszufinden, warum das IOC aus meiner Sicht möglicherweise nicht gut ist.
Wie bei allem anderen ist der IOC-Container (oder wie Einstein es ausdrücken würde, I = OC ^ 2) ein Konzept, das Sie selbst entscheiden müssen, ob Sie es in Ihrem Code benötigen oder nicht. Der jüngste Aufschrei der Mode über IOC ist nur das, Mode. Verlieben Sie sich nicht in Mode, das ist das Erste. Es gibt unzählige Konzepte, die Sie in Ihren Code implementieren können. Zunächst verwende ich die Abhängigkeitsinjektion, seit ich mit dem Programmieren begonnen habe, und habe den Begriff selbst gelernt, als er unter diesem Namen populär gemacht wurde. Die Abhängigkeitskontrolle ist ein sehr altes Thema und wurde bisher auf Billionen von Wegen behandelt, je nachdem, was von was entkoppelt wurde. Alles von allem zu entkoppeln ist ein Unsinn. Das Problem mit dem IOC-Container besteht darin, dass er versucht, genauso nützlich zu sein wie Entity Framework oder NHibernate. Während das Schreiben eines objektrelationalen Mappers einfach ein Muss ist, sobald Sie eine Datenbank mit Ihrem System koppeln müssen, ist ein IOC-Container nicht immer erforderlich. Also, wenn IOC-Container nützlich ist:
- Wenn Sie eine Situation mit vielen Abhängigkeiten haben, die Sie organisieren möchten
- Wenn Sie Ihren Code nicht mit einem Produkt eines Drittanbieters koppeln möchten
- Wenn Ihre Entwickler lernen möchten, wie man mit einem neuen Tool arbeitet
1: Es kommt nicht so oft vor, dass Sie so viele Abhängigkeiten in Ihrem Code haben oder dass Sie diese schon früh im Design kennen. Abstraktes Denken ist nützlich, wenn abstraktes Denken fällig ist.
2: Das Koppeln Ihres Codes mit Code von Drittanbietern ist ein HuGe-Problem. Ich habe mit Code gearbeitet, der mehr als 10 Jahre alt ist und der damals ausgefallenen und fortgeschrittenen Konzepten wie ATL, COM, COM + und so weiter folgte. Mit diesem Code können Sie jetzt nichts mehr tun. Was ich damit sagen will ist, dass ein fortschrittliches Konzept einen offensichtlichen Vorteil bietet, der jedoch langfristig mit dem veralteten Vorteil selbst aufgehoben wird. Es hatte einfach alles teurer gemacht.
3: Softwareentwicklung ist schwer genug. Sie können es auf nicht erkennbare Ebenen erweitern, wenn Sie zulassen, dass ein erweitertes Konzept in Ihren Code eingefügt wird. Es gibt ein Problem mit IOC2. Obwohl es Abhängigkeiten entkoppelt, entkoppelt es auch den Logikfluss. Stellen Sie sich vor, Sie haben einen Fehler gefunden und müssen eine Pause einlegen, um die Situation zu untersuchen. IOC2 macht dies wie jedes andere fortschrittliche Konzept schwieriger. Das Beheben eines Fehlers innerhalb eines Konzepts ist schwieriger als das Beheben eines Fehlers in einem einfacheren Code, da beim Beheben eines Fehlers ein Konzept erneut befolgt werden muss. (Um nur ein Beispiel zu nennen: C ++ .NET ändert die Syntax ständig so stark, dass Sie gründlich überlegen müssen, bevor Sie eine ältere Version von .NET überarbeiten.) Wo liegt also das Problem mit IOC? Das Problem besteht in der Lösung von Abhängigkeiten. Die Logik zum Auflösen ist üblicherweise im IOC2 selbst verborgen. geschrieben vielleicht auf ungewöhnliche Weise, die Sie lernen und pflegen müssen. Wird Ihr Drittanbieterprodukt in 5 Jahren verfügbar sein? Microsoft war nicht.
Das "Wir wissen wie" -Syndrom ist in Bezug auf IOC2 allgegenwärtig. Dies ähnelt dem Testen der Automatisierung. Ausgefallene Laufzeit und perfekte Lösung auf den ersten Blick: Sie lassen einfach alle Ihre Tests über Nacht ausführen und sehen die Ergebnisse am Morgen. Es ist wirklich schmerzhaft, Unternehmen für Unternehmen zu erklären, was automatisierte Tests wirklich bedeuten. Automatisierte Tests sind definitiv kein schneller Weg, um die Anzahl der Fehler zu reduzieren, die Sie über Nacht einführen können, um die Qualität Ihres Produkts zu verbessern. Aber die Mode macht diesen Begriff ärgerlich dominant. IOC2 leidet unter dem gleichen Syndrom. Es wird angenommen, dass Sie es implementieren müssen, damit Ihre Software gut ist. Jedes kürzlich geführte Interview wurde mich gefragt, ob ich IOC2 und Automatisierung implementiere. Das ist ein Zeichen der Mode: Das Unternehmen hat einen Teil des Codes in MFC geschrieben, den sie nicht aufgeben werden.
Sie müssen IOC2 wie jedes andere Konzept in Software lernen. Die Entscheidung, ob IOC2 verwendet werden muss, liegt im Team und im Unternehmen. Mindestens ALLE oben genannten Argumente müssen jedoch erwähnt werden, bevor die Entscheidung getroffen wird. Nur wenn Sie sehen, dass die Plus-Seite die negative Seite überwiegt, können Sie eine positive Entscheidung treffen.
An IOC2 ist nichts auszusetzen, außer dass es nur die Probleme löst, die es löst, und die Probleme einführt, die es einführt. Nichts anderes. Es ist jedoch sehr schwierig, gegen die Mode vorzugehen, sie haben einen schweißtreibenden Mund, die Anhänger von allem. Es ist seltsam, wie keiner von ihnen da ist, wenn das Problem mit ihrer Phantasie offensichtlich wird. Viele Konzepte in der Softwareindustrie wurden verteidigt, weil sie Gewinn bringen, Bücher geschrieben, Konferenzen abgehalten und neue Produkte hergestellt werden. Das ist Mode, normalerweise von kurzer Dauer. Sobald Menschen etwas anderes finden, geben sie es vollständig auf. IOC2 ist nützlich, zeigt aber die gleichen Anzeichen wie viele andere verschwundene Konzepte, die ich gesehen habe. Ich weiß nicht, ob es überleben wird. Dafür gibt es keine Regel. Sie denken, wenn es nützlich ist, wird es überleben. Nein, so geht es nicht. Ein großes, reiches Unternehmen reicht aus und das Konzept kann innerhalb weniger Wochen sterben. Wir werden sehen. NHibernate überlebte, EF wurde Zweiter. Vielleicht überlebt IOC2 auch. Vergessen Sie nicht, dass die meisten Konzepte in der Softwareentwicklung nichts Besonderes sind, sie sind sehr logisch, einfach und offensichtlich, und manchmal ist es schwieriger, sich an die aktuelle Namenskonvention zu erinnern, als das Konzept selbst zu verstehen. Macht das Wissen über IOC2 einen Entwickler zu einem besseren Entwickler? Nein, denn wenn ein Entwickler nicht in der Lage war, ein Konzept zu entwickeln, das IOC2 ähnelt, ist es für ihn schwierig zu verstehen, welches Problem IOC2 löst. Die Verwendung sieht künstlich aus und er oder sie beginnt möglicherweise damit um politisch korrekt zu sein. Vergessen Sie nicht, dass die meisten Konzepte in der Softwareentwicklung nichts Besonderes sind, sie sind sehr logisch, einfach und offensichtlich, und manchmal ist es schwieriger, sich an die aktuelle Namenskonvention zu erinnern, als das Konzept selbst zu verstehen. Macht das Wissen über IOC2 einen Entwickler zu einem besseren Entwickler? Nein, denn wenn ein Entwickler nicht in der Lage war, ein Konzept zu entwickeln, das IOC2 ähnelt, ist es für ihn schwierig zu verstehen, welches Problem IOC2 löst. Die Verwendung sieht künstlich aus und er oder sie beginnt möglicherweise damit um politisch korrekt zu sein. Vergessen Sie nicht, dass die meisten Konzepte in der Softwareentwicklung nichts Besonderes sind, sie sind sehr logisch, einfach und offensichtlich, und manchmal ist es schwieriger, sich an die aktuelle Namenskonvention zu erinnern, als das Konzept selbst zu verstehen. Macht das Wissen über IOC2 einen Entwickler zu einem besseren Entwickler? Nein, denn wenn ein Entwickler nicht in der Lage war, ein Konzept zu entwickeln, das IOC2 ähnelt, ist es für ihn schwierig zu verstehen, welches Problem IOC2 löst. Die Verwendung sieht künstlich aus und er oder sie beginnt möglicherweise damit um politisch korrekt zu sein. Macht das Wissen über IOC2 einen Entwickler zu einem besseren Entwickler? Nein, denn wenn ein Entwickler nicht in der Lage war, ein Konzept zu entwickeln, das IOC2 ähnelt, ist es für ihn schwierig zu verstehen, welches Problem IOC2 löst. Die Verwendung sieht künstlich aus und er oder sie beginnt möglicherweise damit um politisch korrekt zu sein. Macht das Wissen über IOC2 einen Entwickler zu einem besseren Entwickler? Nein, denn wenn ein Entwickler nicht in der Lage war, ein Konzept zu entwickeln, das IOC2 ähnelt, ist es für ihn schwierig zu verstehen, welches Problem IOC2 löst. Die Verwendung sieht künstlich aus und er oder sie beginnt möglicherweise damit um politisch korrekt zu sein.