Das Projekt, an dem ich beteiligt war, hat die Datei- / Ordnerstruktur eines architekturorientierten Projekts:
Root
|____ Node1
|____ Event Handlers
| |___ <all event handlers of project>
|____ Events
| |___ <all events of project>
|____ Request Handlers
| |___ <all request handlers of project>
|____ Requests
| |___ <all requests of project>
|____ ...
Es ist ein aus architektonischer Sicht klares System (wurde vom Entwicklerteam vorgeschlagen).
Es ist eine merkmalorientierte Struktur, die vom Designteam vorgeschlagen wurde:
Root
|____ Feature #1
|____ Event Handlers
| |___ <all event handlers of Feature #1>
|____ Events
| |___ <all events of Feature #1>
|____ Request Handlers
| |___ <all request handlers of Feature #1>
|____ Requests
| |___ <all requests of Feature #1>
|____ ...
Diese Variante ist näher an den Designern und beschreibt deutlich ein zu implementierendes Merkmal.
Unsere Teams haben einen heiligen Krieg begonnen: Was ist der beste Ansatz? Könnte uns jemand helfen und die Vor- und Nachteile des ersten und zweiten erklären? Vielleicht gibt es einen dritten, der für uns beide nützlicher und vorteilhafter ist.
Vielen Dank.
Antworten:
Ich würde für den zweiten stimmen. In der ersten Struktur haben Ereignishandler für
FeatureA
keinerlei Beziehung zu Ereignishandlern fürFeatureB
. Es sieht so aus, als würden Entwickler jeweils an einer Funktion arbeiten. Wenn Sie an einerFeatureX
Anfrage arbeiten, ist es weitaus wahrscheinlicher, dass Sie einenFeatureX
Request-Handler anpassen müssen, als beispielsweise eineFeatureZ
Anfrage.Übrigens, ich finde es toll, wie Sie diese Frage aus neutraler Sicht gestellt haben.
quelle
Ich war immer mit dem zweiten Ansatz zufriedener, aber ich habe immer ein "Feature", das als "allgemein" oder "allgemein" für die wirklich gemeinsam genutzten Klassen / Basisklassen bezeichnet wird.
Ansatz zwei trennt wirklich getrennte Dinge, aber ohne den "gemeinsamen" Bereich trennt er Dinge manchmal in Bereiche, die nicht gut passen.
quelle
Warum interessieren sich die Feature-Erfinder für die Implementierungsdetails? Wenn das die Trennung zwischen den Seiten des Arguments ist, dann denke ich, ist die Antwort klar. Leute, die Ideen / Merkmale erfinden, bestimmen nicht die Dateistruktur, die von den Implementierern benötigt wird.
Dies ist besonders wichtig, wenn sich die Implementierung eines Features über mehrere DLLs, Exes, Datenbanken oder andere Softwareteile erstreckt.
quelle
Muss mit dem zweiten Ansatz einverstanden sein, wenn man die beiden Optionen berücksichtigt. Der erste sieht aus wie ein amorpher Klecks. Zumindest der zweite hat eine gewisse Form.
Es kommt wirklich darauf an, wie groß das Projekt ist. Wenn die "Features" groß sind, benötigen sie jeweils einen eigenen Eimer.
quelle
Ich verstehe die von Ihnen verwendete Terminologie nicht, werde aber trotzdem versuchen zu antworten, da beide Strukturen der falsche Ansatz zu sein scheinen.
Sofern Sie nicht nur eine Handvoll Features haben, müssen Sie diese in Kategorien gruppieren - und dies scheint in beiden Designs nicht berücksichtigt zu sein (es sei denn, Node1 ist dafür vorgesehen, aber das "All-X-of-Project" weist darauf hin ansonsten und ich frage mich, ob es WTF ist - gibt es einen Node2?)
Ich könnte so etwas in Betracht ziehen:
Oder dieses:
Aber beide treffen Annahmen, die möglicherweise völlig falsch sind - wenn Sie Ihre Frage mit weiteren Details aktualisieren können, kann ich meine Meinung ändern. :)
quelle