Ist es beim Entwerfen eines Systems empfehlenswert, das Design auf das zu verwendende Framework abzustimmen?

37

Wenn Sie ein System oder eine Anwendung entwickeln, die Sie mit einem bestimmten Framework verwenden möchten, ist es empfehlenswert, das System ohne das Framework zu entwerfen, oder es ist besser, das System mit der richtigen Einstellung zu entwerfen mit diesem".

Robert Pounder
quelle
4
Über was für einen Rahmen sprichst du? Meinen Sie ein unternehmensspezifisches Nischen-Framework, mit dem sich sehr domänenspezifische Probleme für eine bestimmte Branche lösen lassen? (z. B. Medizin, Nuklear, Verteidigung, Luftfahrt usw.). Oder sprechen Sie von Allzweck-Frameworks zur Lösung technischer Probleme?
Ben Cottrell
1
Allzweck-Frameworks zur Lösung technischer Probleme
Robert Pounder
2
Kleiner Maßstab aus Zeitmangel (ich bin in der Arbeit, kann später näher darauf eingehen): Ich schreibe ein System, das E-Mails basierend auf Designs generiert. - Wenn ich dies in Laravel schreiben würde, würde ich wahrscheinlich ihre Template-Engine "Blade" zum Entwerfen der E-Mails verwenden, was das Entwerfen des Systems in Bezug auf den Fluss viel einfacher machen würde. Allerdings müsste ich eine Templating-Engine schreiben, wenn ich es mit Vanilla PHP machen würde, oder ein anderes geeignetes alternatives Templating-System finden. Dies würde den Entwurfsprozess ergänzen, auf den sich die Frage ebenfalls bezieht.
Robert Pounder
3
Diese Frage wird eine Reihe sehr unterschiedlicher Antworten hervorbringen, da sowohl "Framework" als auch "Design" Wörter sind, die in unserer Branche mit mehreren Bedeutungen überladen sind. Sogar für eine einzige Definition des Frameworks als "Allzweck-Frameworks zur Lösung technischer Probleme" wird es außerdem von dem spezifischen Framework abhängen - einige Frameworks sind mehr mit der Meinung als andere.
Stannius
1
Es wäre zu schade, von einem Bus angefahren zu werden, während man sich in Gedanken verspürt, ein fahrbares Fahrzeug für den öffentlichen Nahverkehr zu entwerfen.

Antworten:

51

Ihr Design sollte den Kundenbedürfnissen so gut wie möglich entsprechen. Denken Sie daran, dass Design kleine Dinge beinhaltet wie:

  • Benutzererfahrung
  • Funktionalität
  • Wie Teile Ihrer Anwendung kommunizieren (entweder mit sich selbst oder mit externen Entitäten)

Keines dieser Dinge sollte durch das Framework vorgegeben werden. Wenn klar ist, dass Sie mit Ihrem Framework kämpfen, um diese Ziele zu erreichen, wählen Sie ein neues Framework, mit dem Sie diese Ziele erreichen können, bevor Sie mit dem Schreiben von Code beginnen.

Sobald Sie ein geeignetes Toolset ausgewählt haben (das Framework ist ein Tool), empfehle ich, die Tools so zu verwenden, wie sie entwickelt wurden. Je weiter Sie vom Framework-Design abweichen, desto größer ist die Lernkurve für Ihr Team und desto größer ist die Wahrscheinlichkeit, dass etwas schief geht.

Zusamenfassend

  • Design für Ihre Benutzer
  • Wählen Sie die geeigneten Werkzeuge, um Ihr Design zu erreichen
  • Verwenden Sie Ihre Werkzeuge so, wie sie verwendet werden sollen

Weitere Gedanken:

Nach mehr als 20 Jahren in der Softwareentwicklung und unter Verwendung mehrerer Frameworks habe ich einige Lektionen gelernt. Alle Frameworks sind ein zweischneidiges Schwert: Sie beschränken und ermöglichen beide. Das Problem bei der Entscheidung Ihres Frameworks, bevor Sie sich die oben erwähnten großen 3 ansehen, ist, dass Sie möglicherweise eine gute Benutzererfahrung für eine mittelmäßige (bestenfalls) beeinträchtigen. Oder Sie müssen möglicherweise vom Framework-Design abweichen, um bestimmte Funktionen auszuführen.

Berin Loritsch
quelle
3
Dann müssen Sie mit dem Kunden verhandeln. Erklären Sie, was Sie mit den auferlegten Einschränkungen tun können und was nicht. Schlagen Sie vor, wie sich dies ändern kann, wenn Sie das X- Framework auswählen . Sie sind möglicherweise nicht bereit, sich zu ändern, und sind bereit, mit einer herabgesetzten Erfahrung zu leben. Oder sie entscheiden, dass Sie wissen, was Sie tun und Ihnen vertrauen. Das hängt vom Kunden ab. Am Ende des Tages verwalten Sie ihre Erwartungen.
Berin Loritsch
4
Hier scheint es eine gewisse Verwechslung zwischen verschiedenen Designebenen zu geben: Systemdesign und detailliertes Design. Bei dieser Frage ging es mir eher um das detaillierte Design (die Implementierungsmethode) als um das System (Schnittstellen, Parallelität, Datenvolumen, Benutzeroberfläche, Benutzertyp).
Gusdor
2
Wenn sich die Frage um "technisches Design" dreht, können Sprache und Betriebssystem einige Rückschlüsse auf das Design haben. Design ist jedoch keine Implementierung. Wenn Sie an Frameworks-Funktionen denken, dann ist es nicht Design, sondern Implementierung. Wenn Sie Ihre Entwurfsentscheidungen auf die Rahmenstärken stützen, bereiten Sie sich darauf vor, deren Schwäche zu erleiden. Und wenn Schwächen Anforderungen erfüllen, haben Sie ein großes Problem. Die größten Unternehmen bauten ihre eigenen Frameworks nicht zum Vergnügen.
Laiv
1
@Laiv Großartiger Kommentar! Wirklich, es ist "einiges und einiges". Eine Nagelpistole und eine Schraubpistole können beide Sachen befestigen, eine ist reversibler als die andere und arbeitet auch langsamer und komplexer. Jede Wahl, die Menschen treffen, ist unvermeidlich ein Kompromiss. Sie bezahlen Ihr Geld und Sie gehen Ihr Risiko ein.
1
@RobertPounder, Es ist ein Werkzeug, die Angemessenheit ist für eine Lösung entschieden werden muss , während das System zu entwerfen. Ich verstehe, wie Frameworks das Design beeinflussen können, aber sie sollten es nicht diktieren.
Berin Loritsch
27

Frameworks beeinflussen natürlich das Design bestimmter Module und Subsysteme (z. B. eines GUI-Frontends). Wie in der anderen Antwort bereits erwähnt, werden Sie Schwierigkeiten haben, wenn Sie gegen die von Ihnen gewählten Frameworks kämpfen.

Generell sollten Sie jedoch vermeiden, dass ein einzelnes Framework oder eine einzelne Technologie das "Gesamtbild" Ihrer gesamten Systemarchitektur diktiert oder bestimmt. Die meisten allgemeinen Anwendungs-Frameworks unterstützen dies nicht. Wenn Sie also Ihr gesamtes System um ein Framework herum schreiben, tun Sie wahrscheinlich etwas, das die Autoren dieses Frameworks nicht beabsichtigt haben.

Sie werden wahrscheinlich viele verschiedene Frameworks verwenden, um verschiedene Probleme zu lösen. Wenn Ihr System komplexer wird, müssen Sie vorsichtig sein, um The Big Ball Of Mud nicht zu bauen . Halten Sie Ihr System nach Möglichkeit modular und lose gekoppelt. Einige Frameworks könnten besser hinter Abstraktionen zurückgehalten werden, indem Wrapper und Adapter geschrieben werden, die die Framework-spezifischen Workflows vor anderen Komponenten verbergen. GUI-Toolkits dienen in der Regel nur der Front-End-GUI-Funktionalität. Daher sollten diese GUI-Module vom Rest des Systems ferngehalten werden.

Allgemeine Frameworks (z. B. UI-Frameworks, Data-Layer-Frameworks usw.) beschreiben nicht die gesamte Architektur Ihres Systems - höchstens das Design einer Komponente oder eines Moduls. Beispielsweise sind einige GUI-Technologien auf bestimmte MV * -Muster ausgerichtet.

Die Gesamtarchitektur Ihres Systems sollte in erster Linie von Ihren Geschäftsanforderungen bestimmt werden . Möglicherweise stützen Sie sich stark auf ein bestimmtes Tool (z. B. ein Messaging-Middleware-Tool oder ein ORM-Framework), um alles miteinander zu verknüpfen. Wenn Sie das Framework jedoch in einer Abstraktion wie einer Serviceklasse zusammengefasst haben, müssen Sie dies tun Es ist weniger wahrscheinlich, dass Sie von diesem Framework eingeschränkt werden, wenn Sie auf dessen Grenzen stoßen.

Versuchen Sie, Folgendes für Ihr Gesamtbild zu berücksichtigen:

Ben Cottrell
quelle
Manchmal scheint es einigen Framework-Autoren egal zu sein, dass ihre Benutzer Anwendungscode eng mit dem Framework verbunden schreiben.
KOMMEN SIE VOM
2
@COMEFROM - Die Entwickler raten dazu, Ihren Code eng an ein Framework zu koppeln, da sie davon ausgehen, dass Sie ihr Framework ausgewählt haben, um dieselben Probleme zu lösen, für die sie es ursprünglich entworfen haben.
JeffO
Sie sind ein wenig vom Thema abgewichen und haben sich von Designprinzipien zu Codierungsprinzipien gewandelt, aber ich verstehe, was Sie sagen, was ist, wenn die geschäftliche Anforderung ist, dass ein bestimmtes Framework verwendet wird? (Ich denke, das Outsourcing von Unternehmen und die internen Entwickler kennen nur eine Sprache.) Ich denke, ich sollte dies im ursprünglichen Beitrag klarer machen.
Robert Pounder
1
@RobertPounder Der eigentliche Punkt, auf den ich versucht habe (vielleicht nicht sehr gut) zu kommen, ist, dass manchmal die Tendenz besteht, bestimmte Frameworks als Grundlage für ihre gesamte Anwendung zu verwenden - was unweigerlich zu Geschäftslogik und anderem führt Nicht verwandter Code wurde unangemessen mit diesem Framework verschmolzen - z. B. Geschäftslogik wurde mit UI-Steuerelementen gekoppelt, nur weil es zu der Zeit schnell und einfach war. Es ist sehr einfach, das zu tun, also ist es etwas, vor dem man vorsichtig sein muss
Ben Cottrell,
2
Ich muss mit @nocomprende hier nicht einverstanden sein; Es können nicht alle zukünftigen Anforderungen vorhergesagt werden, aber manchmal werden Systeme einfach umgeschrieben, weil die vorherige Software zu schwierig zu erweitern / zu warten ist .
SeldomNeedy
7

Ja, Sie sollten sich so genau wie möglich an die Vorgaben des Frameworks halten.

Der Grund ist einfach, dass Sie mit anderen Entwicklern umso leichter über Ihre Probleme / Ideen sprechen können, die ebenfalls dieses Framework verwenden, je näher Sie sich an die Framework-Denkweise halten.

Sie verbessern die Interoperabilität und Benutzerfreundlichkeit für andere Benutzer, die sie später verwenden. Sie werden Lernprogramme oder allgemeine Lösungen besser verstehen und einbeziehen, wenn Sie sich an die zugrunde liegende Philosophie halten, was auch immer Sie verwenden.

Der einzige gute Grund, warum Sie das Framework "brechen", ist, dass Sie unbedingt etwas benötigen, das es aufgrund seiner "Standard" -Konfiguration / -anwendung von Prinzipien nicht bereitstellen kann. Aber dann ist es vielleicht nicht der richtige Rahmen für den Anfang.

Grundsätzlich kann dies auch für andere Entscheidungen gelten. Sie sollten die Sprache, die Sie verwenden, so genau verwenden, wie sie verwendet werden soll, da es einfacher ist, wenn Sie dieselbe Sprache sprechen wie alle anderen.

FP
quelle
Möglicherweise sollten Sie Ihre Antwort aufgrund der Änderungen der Frage überprüfen. Ihre Antwort beantwortet eigentlich nicht die Frage des OP.
Laiv
1
@Laiv Ich verstehe nicht, wie die Frage nicht beantwortet wird, auch wenn sie möglicherweise nicht Ihrer Meinung zu dem Thema entspricht, ist sie dennoch eine Antwort. Sie können gerne Ihre eigene Antwort schreiben, um die Widersprüchlichkeit des betreffenden Themas zu verdeutlichen.
FP
Entschuldigung, wenn ich es mir nicht gut erklärt habe. Ich spreche nicht so fließend Englisch, wie ich es gerne hätte. Ich wollte nur sagen, IMO, die Frage und Ihre Antwort sprechen über verschiedene Dinge. Wenn Sie denken, dass sie es nicht tun, ist es in Ordnung. Ich werde das nicht bestreiten. Das ist es.
Laiv
1
Das ist absolut alles. Es ähnelt der Funktionsweise domänenspezifischer Sprachen und ähnlicher Ideen. Ihre Produkte werden durch das Tool (Framework) geformt, nicht umgekehrt. Das Framework "gewinnt". Wenn Sie es nicht heiraten können, wählen Sie eine andere. (Hinweis: Es gibt kein ideales Framework. Sagen Sie es einfach.)
1
Ihr Design sollte Einfluss darauf haben, welchen Rahmen Sie wählen (falls vorhanden!), Nicht umgekehrt.
RubberDuck