Frage

Mir wurde gesagt, dass ich der alleinige Entwickler eines großen neuen Systems sein werde.Unter anderem werde ich eine Benutzeroberfläche und ein Datenbankschema entwerfen.

Ich bin mir sicher, dass ich eine Anleitung erhalten werde, aber ich würde sie gerne aus den Socken hauen können.Was kann ich in der Zwischenzeit tun, um mich vorzubereiten, und was muss ich beachten, wenn ich mich mit der Spezifikation an meinen Computer setze?

Ein paar Dinge, die Sie beachten sollten:Ich bin Student und habe meinen ersten richtigen Job als Programmierer.Ich werde Java verwenden.Wir haben SCM bereits mit automatisierten Tests usw. eingerichtet, sodass Tools kein Problem darstellen.

War es hilfreich?

Lösung

Wissen Sie viel über OOP?Wenn ja, schauen Sie sich Spring und Hibernate an, um Ihre Implementierung sauber und sauber zu halten senkrecht.Wenn Ihnen das gelingt, dürfte TDD für Sie eine gute Möglichkeit sein, Ihr Design kompakt und schlank zu halten, insbesondere da Sie über „automatisierte Tests“ verfügen.

AKTUALISIEREN:Als ich mir die ersten Antworten ansah, konnte ich nicht mehr widersprechen.Insbesondere im Java-Bereich sollten Sie zahlreiche Mentoren/Ressourcen für die Ausarbeitung Ihrer Anwendung mit Objekten finden. kein datenbankzentrierter Ansatz.Das Datenbankdesign ist normalerweise der erste Schritt für Microsoft-Leute (was ich täglich mache, aber in einem Wiederherstellungsprogramm, äh, Alt.Net, arbeite).Wenn Sie sich weiterhin auf das konzentrieren, was Sie einem Kunden liefern müssen, und Ihr ORM herausfinden lässt, wie Ihre Objekte beibehalten werden, sollte Ihr Design besser sein.

Andere Tipps

Das klingt sehr nach meinem ersten Job.Direkt nach dem Studium wurde ich gebeten, die Datenbank und die Geschäftslogikschicht zu entwerfen, während andere Leute sich um die Benutzeroberfläche kümmerten.Währenddessen schaute mir der Chef über die Schulter, da er nicht bereit war, das, was früher sein Baby war und nun meins war, loszulassen, und steckte seinen Finger hinein.Drei Jahre später verließen die Entwickler das Unternehmen und wir waren immer noch X Monate davon entfernt, tatsächlich etwas zu verkaufen.

Der große Fehler bestand darin, zu ehrgeizig zu sein.Wenn dies Ihr erster Job ist, Sie Wille Machen Sie Fehler und Sie Wille Sie müssen ändern, wie Dinge funktionieren, lange nachdem Sie sie geschrieben haben.Wir hatten alle möglichen Funktionen, die das System komplizierter machten, als es sein musste, sowohl auf Datenbankebene als auch in der API, die es anderen Entwicklern präsentierte.Am Ende war das Ganze einfach viel zu kompliziert, um es auf einmal zu unterstützen, und ist einfach gestorben.

Daher mein Rat:

  1. Wenn Sie sich nicht sicher sind, ob Sie einen so großen Auftrag alleine annehmen sollen, dann lassen Sie es bleiben.Informieren Sie Ihren Arbeitgeber darüber und lassen Sie ihn jemanden finden oder einstellen, mit dem Sie zusammenarbeiten können und der Ihnen helfen kann.Wenn dem Projekt Leute hinzugefügt werden müssen, sollte dies gleich zu Beginn erfolgen und nicht erst, wenn etwas schief geht.

  2. Überlegen Sie sich genau, wofür das Produkt gedacht ist, und bringen Sie es auf den Punkt am einfachsten Anforderungen, die Ihnen einfallen.Wenn die Leute, die Ihnen die Spezifikationen geben, nicht technisch versiert sind, versuchen Sie, über das, was sie geschrieben haben, hinauszuschauen und herauszufinden, was tatsächlich funktioniert und Geld verdient.Sprechen Sie mit Kunden und Verkäufern und verstehen Sie den Markt.

  3. Es ist keine Schande, zuzugeben, dass man Unrecht hat.Wenn sich herausstellt, dass das gesamte System neu geschrieben werden muss, weil Sie in Ihrer ersten Version einen Fehler gemacht haben, ist es besser, dies so schnell wie möglich zuzugeben, damit Sie es beheben können.Versuchen Sie daher nicht, in Ihrer ersten Version eine Architektur zu erstellen, die alle möglichen Eventualitäten vorhersehen kann, denn Sie wissen nicht, was alle Eventualitäten sind, und machen einfach einen Fehler.Schreiben Sie einmal und denken Sie daran, es wegzuwerfen und von vorne zu beginnen – das müssen Sie vielleicht nicht, die erste Version ist vielleicht in Ordnung, aber geben Sie es zu, wenn Sie es tun.

Ich bin auch nicht damit einverstanden, mit der Datenbank zu beginnen.Die Datenbank ist lediglich ein Artefakt der Art und Weise, wie Ihre Geschäftsobjekte beibehalten werden.Ich kenne kein Äquivalent in Java, aber .Net verfügt über hervorragende Tools wie SubSonic Dadurch bleibt Ihr DB-Design flüssig, während Sie das Design Ihrer Geschäftsobjekte durchlaufen.Ich würde sagen, dass Sie sich in erster Linie (noch bevor Sie sich für die Einführung der Technologien entscheiden) auf den Prozess konzentrieren und Ihre Substantive und Verben identifizieren ...Dann bauen Sie auf diesen Abstraktionen auf.Hey, es funktioniert wirklich in der „realen Welt“, genau wie OOP 101 es Ihnen beigebracht hat!

Bevor Sie mit dem Codieren beginnen, planen Sie Ihr Datenbankschema – alles Weitere ergibt sich daraus.Wenn Sie die Datenbank schon frühzeitig einigermaßen korrekt haben, ersparen Sie sich später Zeit und Kopfschmerzen.

Die Hauptsache ist, dass man die Komplexität des Systems abstrahieren kann, damit man nicht gleich zu Beginn darin steckenbleibt.

  • Lesen Sie die Spezifikation zunächst wie eine Geschichte (überfliegen Sie sie).Bleiben Sie nicht bei jeder Anforderung stehen, um sie sofort zu analysieren.Dadurch erhalten Sie einen Gesamtüberblick über das System ohne zu viele Details.An diesem Punkt beginnen Sie mit der Identifizierung der wichtigsten Funktionskomponenten des Systems.Beginnen Sie damit, diese aufzuschreiben (verwenden Sie ggf. ein Mindmap-Tool).

  • Nehmen Sie dann jede Komponente und beginnen Sie mit der Explosionszeichnung (und verknüpfen Sie jedes Detail mit den Anforderungen im Spezifikationsdokument).Machen Sie dies für alle Komponenten, bis Sie alle Anforderungen abgedeckt haben.

  • Jetzt sollten Sie damit beginnen, die Beziehungen zwischen den Komponenten zu untersuchen und festzustellen, ob es Wiederholungen von Features oder Funktionen in den verschiedenen Komponenten gibt (die Sie dann herausziehen können, um Dienstprogrammkomponenten oder ähnliches zu erstellen).Mittlerweile haben Sie eine gute, detaillierte Karte Ihrer Anforderungen im Kopf.

  • JETZT sollten Sie an den Entwurf der Datenbank, ER-Diagramme, Klassendesign, DFDs, Bereitstellung usw. denken.

Das Problem, wenn Sie zuerst den letzten Schritt ausführen, besteht darin, dass Sie sich in der Komplexität Ihres Systems verlieren können, ohne überhaupt ein Gesamtverständnis zu erlangen.

Ich mache es umgekehrt.Ich finde, dass das System, wenn man zuerst das Datenbankschema anwendet, in einem datengesteuerten Design stecken bleibt, das nur schwer von der Persistenz zu abstrahieren ist.Wir versuchen zunächst, Domänenmodellentwürfe zu erstellen und dann Basieren Sie das Datenbankschema darauf.

Und dann ist da noch das Infrastrukturdesign:Das Team sollte sich in erster Linie auf Konventionen zur Strukturierung des Programms einigen.Und dann arbeiten wir zusammen, um uns zunächst auf ein Design für die gemeinsame Funktionalität des Systems zu einigen (z. B. Dinge, die jeder braucht, wie Persistenz, Protokollierung usw.).Dies wird zum Rahmen des Systems.

Daran arbeiten wir zunächst alle gemeinsam, bevor wir die restlichen Funktionalitäten unter uns aufteilen.

Ich habe die Erfahrung gemacht, dass Java-Anwendungen (auch .NET), die die Datenbank als letztes berücksichtigen, höchstwahrscheinlich eine schlechte Leistung erbringen, wenn sie in einer Unternehmensumgebung platziert werden.Sie müssen wirklich an Ihr Publikum denken.Sie haben nicht gesagt, ob es sich um eine Web-App handelt oder nicht.In jedem Fall ist die Infrastruktur, auf der Sie implementieren, wichtig, wenn Sie überlegen, wie Sie mit Ihren Daten umgehen.

Ganz gleich, welche Methodik Sie in Betracht ziehen, die Art und Weise, wie Sie Ihre Daten abrufen und speichern und welche Auswirkungen sie auf die Leistung hat, sollte ganz oben eine Ihrer obersten Prioritäten sein.

Ich würde vorschlagen, darüber nachzudenken, wie diese Anwendung verwendet werden soll.Wie werden zukünftige Benutzer damit arbeiten?Ich bin mir sicher, dass Sie zumindest ein paar Dinge darüber wissen, was diese Anwendung verarbeiten muss, aber mein erster Rat ist: „Denken Sie an den Benutzer und was er oder sie braucht.“

Zeichnen Sie es auf Normalpapier auf und überlegen Sie, wo Sie den Code abschneiden.Denken Sie daran, Logik nicht mit GUI-Code zu vermischen (häufiger Fehler).Auf diese Weise können Sie die Reichweite Ihrer Anwendungen in Zukunft auf Servlets und/oder Applets oder jede andere Plattform erweitern.Schneiden Sie in Ebenen, damit Sie schneller auf große Änderungen reagieren können, ohne alles neu erstellen zu müssen.Ebenen sollten keine anderen Ebenen als ihre nächstgelegenen Nachbarebenen sehen.

Beginnen Sie mit der wahren Kernfunktionalität.Der ganze zeitraubende Aufwand (der dazu führt, dass sich Ihr Projekt um vier Wochen verspätet) wird für die meisten Benutzer kaum von Bedeutung sein.Es kann später hinzugefügt werden, sobald Sie sicher sind, dass Sie pünktlich liefern können.

Übrigens.Auch wenn das nichts mit Design zu tun hat, möchte ich nur sagen, dass man nicht pünktlich liefert.Schätzen Sie den Zeitaufwand realistisch ein und verdoppeln Sie ihn dann :-) Ich gehe hier davon aus, dass Sie mit diesem Projekt nicht allein sind und im Laufe des Projekts Leute kommen und gehen.Möglicherweise müssen Sie die Leute in der Mitte des Projekts schulen, Leute fahren in den Urlaub, müssen operiert werden usw.

Teilen Sie das große System in kleinere Teile auf.Und denken Sie nicht, dass es so komplex ist, denn das ist es normalerweise nicht.Wenn Sie zu komplex denken, ruiniert es nur Ihre Gedanken und letztendlich das Design.Irgendwann merkt man einfach, dass man das Gleiche auch einfacher machen könnte, und dann entwirft man es neu.

Zumindest war dies mein größter Fehler beim Entwerfen.

Halte es einfach!

Ich fand sehr aufschlussreiche Ideen zum Starten eines neuen großen Projekts, basierend auf

  • gemeinsame gute Praktiken
  • Testgetriebene Entwicklung
  • und pragmatischer Ansatz

im Buch Wachsende objektorientierte Software, geleitet von Tests.

Es befindet sich noch in der Entwicklung, aber die ersten drei Kapitel könnten das sein, was Sie suchen und meiner Meinung nach lesenswert sein.

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