Lassen Sie es wissen, dass ich ein großer Fan von Dependency Injection (DI) und automatisierten Tests bin . Ich könnte den ganzen Tag darüber reden.
Hintergrund
Kürzlich hat unser Team dieses große Projekt bekommen, das von Grund auf neu gebaut werden soll. Es ist eine strategische Anwendung mit komplexen Geschäftsanforderungen. Natürlich wollte ich, dass es schön und sauber ist, was für mich bedeutet: wartbar und überprüfbar. Also wollte ich DI verwenden.
Widerstand
Das Problem war in unserem Team, DI ist tabu. Es wurde ein paar Mal erwähnt, aber die Götter sind nicht einverstanden. Das hat mich aber nicht entmutigt.
Mein Umzug
Das mag komisch klingen, aber Bibliotheken von Drittanbietern werden normalerweise von unserem Architektenteam nicht genehmigt (denken Sie: "Sie sollten nicht von Unity , Ninject , NHibernate , Moq oder NUnit sprechen , damit ich Ihnen nicht den Finger abschneide"). Anstatt einen etablierten DI-Container zu verwenden, habe ich einen extrem einfachen Container geschrieben. Es hat im Grunde alle Ihre Abhängigkeiten beim Start verkabelt, alle Abhängigkeiten (Konstruktor / Eigenschaft) injiziert und alle verfügbaren Objekte am Ende der Webanforderung entsorgt. Es war extrem leicht und hat genau das getan, was wir brauchten. Und dann bat ich sie, es zu überprüfen.
Die Antwort
Um es kurz zu machen. Ich stieß auf heftigen Widerstand. Das Hauptargument war: "Wir müssen diese Komplexitätsebene nicht zu einem bereits komplexen Projekt hinzufügen". "Es ist auch nicht so, als würden wir verschiedene Implementierungen von Komponenten einstecken". Und "Wir wollen es einfach halten, wenn möglich einfach alles in eine Baugruppe packen. DI ist eine nicht benötigte Komplexität ohne Nutzen".
Schließlich meine Frage
Wie würden Sie mit meiner Situation umgehen? Ich bin nicht gut darin, meine Ideen zu präsentieren, und ich würde gerne wissen, wie die Leute ihre Argumente präsentieren würden.
Natürlich gehe ich davon aus, dass Sie wie ich lieber DI verwenden. Wenn Sie nicht einverstanden sind, sagen Sie bitte, warum, damit ich die andere Seite der Medaille sehen kann. Es wäre wirklich interessant, den Standpunkt von jemandem zu sehen, der anderer Meinung ist.
Aktualisieren
Vielen Dank für alle Antworten. Das relativiert die Dinge wirklich. Es ist schön genug, noch ein paar Augen zu haben, um dir ein Feedback zu geben. Fünfzehn ist wirklich großartig! Das sind wirklich großartige Antworten und haben mir geholfen, das Problem von verschiedenen Seiten zu sehen, aber ich kann nur eine Antwort auswählen, also werde ich nur die meistgewählte auswählen. Vielen Dank an alle, die sich die Zeit genommen haben zu antworten.
Ich habe entschieden, dass es wahrscheinlich nicht der beste Zeitpunkt ist, DI zu implementieren, und wir sind nicht bereit dafür. Stattdessen werde ich mich darauf konzentrieren, das Design testbar zu machen und zu versuchen, automatisierte Komponententests vorzustellen. Mir ist bewusst, dass das Schreiben von Tests zusätzlichen Aufwand bedeutet, und wenn jemals entschieden wird, dass sich der zusätzliche Aufwand nicht lohnt, würde ich es persönlich immer noch als eine Gewinnsituation ansehen, da das Design immer noch testbar ist. Und wenn in Zukunft jemals ein Test oder DI in Frage kommt, kann das Design problemlos damit umgehen.