Ich habe einen starken OO-Hintergrund und arbeite seit kurzem in einer Organisation, die, obwohl der Code in Java geschrieben ist, viel weniger Wert auf gutes OO-Design legt als ich es gewohnt bin. Mir wurde gesagt, dass ich "zu viel Abstraktion" einführe, und dass ich stattdessen die Art und Weise codieren sollte, wie es immer gemacht wurde, was in Java ein prozeduraler Stil ist.
TDD wird hier auch nicht sehr geübt, aber ich möchte testbaren Code haben. Das Vergraben von Geschäftslogik in statischen privaten Methoden in großen "Gottklassen" (was für dieses Team die Norm zu sein scheint) ist nicht sehr prüfbar.
Ich bemühe mich, meinen Mitarbeitern meine Motivation klar mitzuteilen. Hat jemand einen Rat, wie ich meine Kollegen davon überzeugen kann, dass die Verwendung von OO und TDD zu einfacherem Code führt?
Diese Frage zur technischen Verschuldung hängt mit meiner Frage zusammen. Ich versuche jedoch zu vermeiden, dass die Schulden anfallen , anstatt sie nachträglich zu begleichen, worum es in der anderen Frage geht.
quelle
Antworten:
Sie haben sich nicht darüber beschwert, dass es nicht zu halten ist, nur nicht nach Ihrem Geschmack. Wenn es sich um eine bewusste Stilwahl handelt, kann es sich nur um unüberbrückbare kreative Unterschiede handeln, und Sie sollten Ihren Stil anpassen oder einen Ort finden, der zu Ihrem bevorzugten Stil passt.
Die Leute können und tun es, indem sie ständig modularen, effizienten, gut abstrahierten und relativ fehlerfreien Code in einem prozeduralen Stil schreiben. Java ist eine seltsame Wahl der Sprache für einen solchen Shop, aber ich kann sehen, dass es passiert, wenn externe Faktoren die Sprache bestimmen, wie zum Beispiel die Notwendigkeit, für Android zu entwickeln.
Wenn es war eine bewusste Entscheidung, nicht wirklich sie durch das beurteilen kann , wie gut haften sie für eine gute objektorientierte Design - Prinzipien, sollten Sie durch beurteilen , wie gut haften sie für eine gute Verfahrenskonstruktionsprinzipien und refactor dementsprechend auch. Mit Java können Sie keinen Code außerhalb einer Klasse schreiben. Das bloße Vorhandensein eines Codes bedeutet also nicht, dass ein Modul objektorientiert sein soll.
Auf der anderen Seite, wenn der Code in einem der Paradigmen ein Chaos ist , sollten Sie wahrscheinlich nur Ihre Verluste reduzieren.
quelle
Als ich Ihre Frage las, fiel mir ein Tipp aus dem Buch Pragmatic Programmer ein.
Einer seiner Tipps ist
Be a Catalyst for Change
:Also, ich denke, wenn du mit deinen OO- und TDD-Kenntnissen anfängst, gute Arbeit zu leisten, werden sie bald anfangen, nach deinem Job zu suchen und zu fragen.
quelle
Um neue Arbeitsweisen zu verkaufen, müssen Sie offensichtliche Vorteile zeigen. Mehr Abstraktionsebenen zu schreiben, ohne einen klaren, aber vagen Vorteil: "Es kann vorteilhaft für die Zukunft sein", wird nicht funktionieren.
Stellen Sie Fabriken her, in denen die Fabriken mehr als einen Objekttyp herstellen. Verwenden Sie die Abhängigkeitsinjektion, bei der die Vorteile sofort sichtbar werden. Erstellen Sie Schnittstellen, die tatsächlich von mehr als einer Klasse implementiert werden sollen.
Was ich in "true OO" zu oft sehe, ist, dass fortgeschrittene Techniken verwendet werden, um wirklich einfache Probleme auf übermäßig komplexe Weise zu lösen.
Wie können Sie den Nutzen einer Fabrik zeigen, wenn sie immer nur dasselbe Objekt herstellen wird? Finden Sie ein Problem in Ihrem Code, das von fortschrittlichen Techniken profitiert, und zeigen Sie Ihren Standpunkt und arbeiten Sie von dort aus.
Kriege werden nacheinander gewonnen.
quelle
Sie können sie nur überzeugen, indem Sie einen kleinen Teil des Codes übernehmen und TDD und bessere OO-Methoden implementieren, um die Vorteile zu nutzen. Sie haben sie in das gelobte Land geführt, nicht nur schöne Postkarten davon.
Ich denke, es gibt Fälle von Überabstraktion, die heutzutage in vielen Codebasen verwendet werden. Geben Sie nur das ein, was Sie brauchen, und das schließt auch Abstraktionen ein.
quelle