Tu es nicht. Es wird alles überkomplizieren und du wirst es nicht brauchen
... ist die Antwort, die ich vor 2 Jahren hier geschrieben hätte. Jetzt bin ich mir allerdings nicht so sicher; Tatsächlich habe ich in den letzten Monaten begonnen, alten Code in dieses Format zu migrieren, nicht weil ich nichts Besseres zu tun habe, sondern weil ich ihn wirklich brauchte, um neue Funktionen zu implementieren oder vorhandene zu ändern. Ich verstehe die automatischen Abneigungen, die andere hier sehen, aber ich denke, das ist etwas, das ernsthafte Gedanken verdient.
Leistungen
Der größte Vorteil ist die Möglichkeit , den Code zu ändern und zu erweitern . Wenn du benutzt
class Point {
int x,y;
// other point operations
}
Anstatt nur ein paar Ganzzahlen zu übergeben - was leider bei vielen Schnittstellen der Fall ist -, wird es viel einfacher, später eine weitere Dimension hinzuzufügen. Oder ändern Sie den Typ in double
. Wenn Sie später List<Author> authors
oder List<Person> authors
stattdessen verwenden, ist List<String> authors
es viel einfacher, dem, was ein Autor darstellt, weitere Informationen hinzuzufügen. Wenn ich es so aufschreibe, fühle ich mich so, als würde ich das Offensichtliche ausdrücken, aber in der Praxis habe ich mich schuldig gemacht, Strings so oft zu verwenden, besonders in Fällen, in denen es am Anfang nicht offensichtlich war, dann würde ich mehr brauchen als ein Faden.
Ich versuche gerade, eine String-Liste umzugestalten, die in meinem Code verflochten ist, da ich dort weitere Informationen benötige, und ich fühle den Schmerz: \
Darüber hinaus stimme ich dem Autor des Blogs zu, dass es mehr semantische Informationen enthält , die dem Leser das Verständnis erleichtern. Während Parameter häufig mit aussagekräftigen Namen versehen werden und eine eigene Dokumentationszeile erhalten, ist dies bei Feldern oder Einheimischen häufig nicht der Fall.
Der letzte Vorteil ist die Sicherheit geben , aus offensichtlichen Gründen, aber es ist eine kleine Sache hier in meinen Augen.
Nachteile
Das Schreiben dauert länger . Das Schreiben einer kleinen Klasse ist schnell und einfach, aber nicht mühelos, insbesondere wenn Sie viele dieser Klassen benötigen. Wenn Sie alle 3 Minuten anhalten, um eine neue Wrapper-Klasse zu schreiben, kann dies auch Ihre Konzentration beeinträchtigen. Ich würde jedoch gerne glauben, dass dieser Zustand der Anstrengung normalerweise erst in der ersten Phase des Schreibens von Code auftritt. Normalerweise kann ich schnell eine ziemlich gute Vorstellung davon bekommen, welche Einheiten involviert sein müssen.
Es können viele redundante Setter (oder Konstruktionen) und Getter beteiligt sein . Der Blog-Autor gibt das wirklich hässliche Beispiel von new Point(x(10), y(10))
anstatt new Point(10, 10)
, und ich möchte hinzufügen, dass eine Verwendung auch Dinge wie Math.max(p.x.get(), p.y.get())
statt beinhalten könnte Math.max(p.x, p.y)
. Und langer Code wird oft zu Recht als schwieriger zu lesen angesehen. Um ehrlich zu sein , habe ich das Gefühl, dass viel Code Objekte bewegt und nur mit ausgewählten Methoden erstellt wird, und noch weniger müssen auf die wichtigen Details zugreifen (was ohnehin nicht OOPy ist).
Fraglich
Ich würde sagen, ob dies zur Lesbarkeit von Code beiträgt oder nicht, ist fraglich. Ja, mehr semantische Informationen, aber längerer Code. Ja, es ist einfacher, die Rolle eines jeden Orts zu verstehen, aber es ist schwieriger zu verstehen, was Sie damit machen können, wenn Sie nicht die Dokumentation lesen.
Wie bei den meisten anderen Programmierschulen ist es meines Erachtens ungesund, diese auf die Spitze zu treiben. Ich kann mir nicht vorstellen, dass ich die x- und y-Koordinate je nach Typ trenne. Ich denke nicht, dass Count
es notwendig ist, wenn eine int
ausreicht. Ich mag die unsigned int
Verwendung in C nicht - obwohl es theoretisch gut ist, gibt es Ihnen einfach nicht genug Informationen und es verbietet Ihnen, Ihren Code später zu erweitern, um dieses magische -1 zu unterstützen. Manchmal braucht man Einfachheit.
Ich denke, dieser Blog-Beitrag ist etwas extrem. Aber insgesamt habe ich aus schmerzhaften Erfahrungen gelernt, dass die Grundidee dahinter aus den richtigen Dingen besteht.
Ich habe eine tiefe Abneigung gegen überentwickelten Code. Das tue ich wirklich. Aber richtig eingesetzt, finde ich diese Überentwicklung nicht.