Empfohlene Möglichkeiten, um einige Funktionen in Funktionen, Module und Pakete aufgeteilt?

StackOverflow https://stackoverflow.com/questions/1168565

  •  19-09-2019
  •  | 
  •  

Frage

Es kommt ein Punkt, wo in einem relativ großen Größe Projekt, eine Notwendigkeit, über Aufspaltung der Funktionalität in verschiedenen Funktionen zu denken, und dann verschiedene Module, und dann verschiedene Pakete. Manchmal über verschiedene Source-Distributionen. (ZB: ein gemeinsames Nutzen zu extrahieren, wie optparser, in ein separates Projekt)

Die Frage - wie entscheidet man die Teile im gleichen Modul zu setzen, und die Teile in einem separaten Modul zu setzen? Gleiche Frage für Pakete.

War es hilfreich?

Lösung

Siehe Wie viele Python-Klassen sollte ich in eine Datei?

Skizzieren Sie Ihren allgemeinen Satz von Klassendefinitionen.

diese Klassendefinitionen in "Module" Partition.

Implementieren und testen Sie die Module getrennt voneinander.

Sie die Module miteinander verwachsen Ihre Endanwendung erstellen.

Hinweis: . Es ist fast unmöglich, eine funktionierende Anwendung zu zersetzen, die organisch entwickelt. So tun das nicht.

Zerlege Design früh und häufig. Erstellen Sie separate Module. Integrieren Sie eine Anwendung erstellen.

Andere Tipps

Es ist ein klassisches Papier von David Parnas „Auf den Kriterien bei der Zersetzung Systeme in Module verwendet werden“ genannt. Es ist ein klassisches (und hat ein gewisses Alter, so kann ein wenig veraltet sein).

Vielleicht kann man von dort aus starten, ein PDF zur Verfügung steht hier

http://www.cs.umd.edu/ Klasse / spring2003 / cmsc838p / Design / criteria.pdf

einen Stift und ein Stück Papier herausnehmen. Versuchen Sie, ziehen, wie Sie Ihre Software auf einem hohen Niveau in Wechselwirkung tritt. Zeichnen Sie die verschiedenen Schichten der Software usw. Gruppieren nach Funktionalität und Zweck, vielleicht sogar durch welche Art von Technologie, die sie verwenden. Wenn Ihre Software mehrere Abstraktionsschichten hat, würde ich zu einer Gruppe sagen ihnen, dass. Auf einem hohen Niveau, teilen sich die Elemente einer bestimmten Schicht alle die gleiche allgemeine Zwecke. Nun, da Sie Ihre Software in Schichten haben, können Sie diese Schichten in verschiedenen Projekten auf der Grundlage spezifischer Funktionalität oder Spezialisierung teilen.

Wie bei einer bestimmten Stufe, die Sie erreichen, in dem sollten Sie das tun? Ich würde sagen, wenn Sie mehrere Personen auf der Codebasis arbeiten oder wenn Sie wollen Ihr Projekt so modular wie möglich zu halten. Hoffentlich ist Ihr Code ist modular genug, um dies zu tun, mit. Wenn Sie nicht in der Lage sind, Ihre Software auf einem hohen Niveau zu brechen auseinander, dann ist die Software wahrscheinlich Spaghetti-Code und Sie sollen es auf Refactoring aussehen.

Hoffentlich werden Sie etwas zu arbeiten.

IMHO sollte dies wahrscheinlich eines der Dinge, die man früher in den Entwicklungsprozess zu tun. Ich habe noch nie gearbeitet an einem Großprojekt, aber es wäre sinnvoll, dass Sie einen Fahrplan von dem, was getan werden wird und wo. (Nicht versuchen, Sie RIB fragen darüber, wie Sie einen Fehler gemacht haben: D)

Module werden in der Regel gruppiert irgendwie nach Verwendungszweck oder Funktionalität. Sie könnten jede Implementierung einer Schnittstelle versuchen oder andere Verbindungen.

Ich sympathisiere mit Ihnen. Sie leiden unter Selbstzweifeln. Keine Sorge. Wenn Sie irgendeine Sprache sprechen können, einschließlich Ihrer Muttersprache, sind Sie qualifiziert Modularisierung auf eigene Faust zu tun. Für Beweise, können Sie "The Language Instinct" oder "The Math Instinkt."

lesen

Schauen Sie sich um, aber nicht zu viel. Sie können viel von ihnen lernen, aber man kann von ihnen zu viele schlechte Dinge.

  1. Einige Projekte / Rahmen viel fo Hype bekommen. Doch einige ihrer Gruppierungen von Funktionalität, auch Namen Module gegeben sind irreführend. Sie wissen nicht „offenbare Absicht“ des Programmierers. Sie scheitern, die "hohe Kohäsivität" Test.

  2. Bücher sind nicht besser. Bitte bewerben 80/20 Regel in Ihrem Buch Auswahl. Auch ein gutes, sehr komplett, gut recherchierten Buch wie Capers Jones' 2010 ‚Software Engineering Best Practices‘ ist ahnungslos. Er sagt 10-Mann-Agile / XP-Team 12 Jahre dauern würde, Windows Vista oder 25 Jahre zu tun, um ein ERP-Paket zu tun! Er sagt, es bis 2009 kein Verfahren zur Segmentierung ist, seine Bezeichnung für die Modularisierung. Ich glaube nicht, es wird Ihnen helfen.

Mein Punkt ist: Sie Ihr Modell auswählen müssen / reference / Quelle von Beispielen sehr sorgfältig. Überschätzung nicht bekannte Namen und unterschätzen sich selbst.

Hier ist meine Hilfe, beweist in meiner Erfahrung.

  1. Es ist eine Menge, wie zu entscheiden, welche Attribute geht an die DB-Tabelle, welche Eigenschaften / Methoden gehen zu welcher Klasse / Objekt etc? Auf einer tieferen Ebene, ist es viel wie Möbel zu Hause Vermittlung oder Bücher in einem Regal. Sie haben bereits solche Dinge getan. Software ist die gleiche, keine große Sache!

  2. Worry über "Kohäsion" zuerst. z.B. Bücher (Leo Tolstoi, James Joyce, DE Lawrence) ist choesive. (HTML, CSS, John Keats. JQuery, tinymce) nicht. Und es gibt viele Möglichkeiten, Dinge zu organisieren. Auch Taxonomen sind immer noch in schweren Fehden über diese.

  3. Dann Sorgen darüber, "Kopplung". Schüchtern sein". „Sprich nicht mit Fremden.“ Nicht überfreundlich sein. Versuchen Sie, Ihr Paket / DB-Tabelle / Klasse / Objekt / Modul / Bücherregal als in sich geschlossene zu machen, so unabhängig wie möglich. Joel hat über seine Bewunderung für die Excel-Team gesprochen, die alle externen Abhängigkeiten verabscheuen und dass selbst bauten ihre eigenen Compiler.

Eigentlich ändert es für jedes Projekt, das Sie erstellen, aber hier ist ein Beispiel:

  1. core Paket enthält Module, die Ihr Projekt kann nicht leben ohne sind. dies kann die Hauptfunktionalität der Anwendung enthalten.
  2. ui Paket enthält Module, die mit der Benutzeroberfläche beschäftigt. das heißt, wenn Sie die Benutzeroberfläche von der Konsole geteilt.

Dies ist nur ein Beispiel. und es würde Sie das wäre zu entscheiden, welche und was wirklich zu gehen, wo.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top