Gibt es irgendwelche negativen Nebenwirkungen beim Aufteilen großer Module? [geschlossen]

21

Ich habe ein Github-Projekt durchsucht und dieses Modul gefunden, das mehr als zehntausend Zeilen enthält.

Ist es üblich, so viel Code in einem einzigen Modul zu haben?

Es scheint mir, dass dies über mehrere Module aufgeteilt werden sollte. Vielleicht eine für jeden DB-Motor.

Welchen Vorteil hat der Entwickler, wenn er ein großes Modul wie dieses erstellt (außer "alles an einem Ort") oder welchen Nachteil hat es, wenn er es aufteilt (außer "Komplexität")?

Mahmoud Hossam
quelle
Keine 8k Linien - auf jeden Fall!
BЈови12
4
Es ist nicht die Größe des Moduls, es ist, wie Sie es verwenden ...
JMQ
4
Programme sollen von Menschen gelesen werden und nur nebenbei von Computern ausgeführt werden - Donald Knuth.
Mahmoud Hossam
1
Ein Modul / Submodul soll eine bestimmte Aufgabe erfüllen. Ein (albernes) Modul zum Hinzufügen von 2 Zahlen in Python besteht nur aus 2 Zeilen. Ein Modul für etwas Komplizierteres wird definitiv größer sein. Ich sage, beschränke das Modul / Submodul auf nur eine Funktion. Machen Sie das zu Ihrem Maßstab.
16.
Der bei weitem wichtigere Punkt für objektorientierten Code ist eine gut organisierte Klassenstruktur mit getrennten Bedenken und extremer Trockenheit. Das Aufteilen des Moduls ist dann der einfache Teil.
Acumenus

Antworten:

14

Was Ihnen begegnet ist das sogenannte " Gott-Objekt ", weil es alles tut oder alles weiß. Lauf davon weg (wenn du kannst).

Es gibt keine definierte Anzahl von LOC pro Modul, aber es sollte etwas sein, das es einfach macht, den Code zu durchsuchen und leicht zu verstehen, was die Methoden tun. Nach meiner persönlichen Erfahrung machen Sie etwas falsch , wenn Ihr Modul mehr als 1k Zeilen * umfasst .

* Auch ein 1k-Line-Modul ist sehr groß.

BЈовић
quelle
9
Das angegebene Beispiel ist kein Gott-Objekt , sondern eine ganze Klassenhierarchie, einschließlich der doctest , die sich zufällig in einer einzelnen .py-Datei befindet. Dies mag nicht ideal sein, aber es gibt pragmatische Gründe, warum Sie dies tun möchten, und wie BillThor vorschlägt, ist der Code selbst ansonsten recht gut strukturiert. Es passt sicherlich nicht zur klassischen Definition eines Gott-Objekts , nur eines, das eine ziemlich komplexe Aufgabe hat und an eine Reihe verschiedener Szenarien angepasst werden muss.
Mark Booth
6

Dies scheint ein Modul zu sein, für das möglicherweise keine typischen Größenbeschränkungen gelten. Der Großteil der Funktionen befindet sich in den ersten 2 KB Code- und Kommentarzeilen. Der Rest der Datei scheint aus vielen Adapterklassen und anderen Unterstützungsklassen zu bestehen, die eng mit dem Modul verbunden zu sein scheinen. In anderen Sprachen befinden sich die Klassen in separaten Dateien mit einer angemessenen Größe.

Einige weitere Dokumentzeichenfolgen könnten nützlich sein, würden jedoch die Größe eines bereits großen Moduls erhöhen. Der Code ist klar und selbsterklärend und enthält bei Bedarf entsprechende Kommentare.

BillThor
quelle
5

Das tatsächliche "Limit" hängt natürlich von Ihrem Projekt und einer Vielzahl von Faktoren ab.

Aber ich stimme der Faustregel zu: 200 Zeilen anständiges Python. Das heißt, kein in Python geschriebener C- oder Java-Code, sondern gutes Python in Python.

unperson325680
quelle
1

Wow.

Ich glaube, ich weiß nicht die vollständige Antwort auf diese Frage, aber ich denke gerne als Antwort auf die Titelfrage "Wie groß sollte ein Python-Modul sein?" als das Konzept von Parnas, ein Geheimnis zu verbergen. In diesem Fall scheint das Modul das richtig zu machen (und das ist ein so großes Geheimnis, das es verbirgt).

Ich habe mich später mit Papieren befasst, die viel über Kopplung und Zusammenhalt erzählen. Vielleicht würden zu viele db-Module zu vielen Aufrufen zwischen den Modulen führen, was zu einer Erhöhung der als schlecht geltenden Praxis führt, d. H. Einer geringeren Kohäsion und einer höheren Kopplung?

Ich habe experimentelle Daten gesehen, in denen davon die Rede war, dass sich Programmierer dazu entschlossen hatten, gute Praktiken zu opfern, um die Sache zu vereinfachen und zu verstehen, ungeachtet dessen, was gute Praktiken vorschreiben. Tatsächlich könnte es auch zu einem Konflikt zwischen bewährten Praktiken kommen. Nehmen wir an, die Leistung macht die Leute, die später Wartungsarbeiten durchführen, normalerweise nicht glücklich. Ich bin mir nicht ganz sicher, wie sich die Lesbarkeit in diesem Fall mit einem so großen Modul verbessern würde.

Eine andere Sache, die mir aufgefallen ist, ist, dass ein Teil des Codes als generisch angegeben ist und der Rest der DBS daraus erweitert wird. Ich bin kein Python-Programmierer, aber vielleicht könnte dies etwas rechtfertigen?

Also, ich habe keine endgültige Antwort, aber ich hoffe, dass jemand diese Punkte auch hervorhebt!

Oeufcoque Penteano
quelle