Ist es möglich, eine Anwendung lose mit ihrem Framework zu koppeln?

14

Angenommen, ich entwickle eine Webanwendung. Meine erste Wahl ist die Verwendung von PHP mit Fat-Free Framework (F3) und MVC-Pattern. Nächstes Jahr möchte ich vielleicht zu Zend Framework oder sogar zu ASP.NET MVC wechseln. Ist es sinnvoll, meine Anwendung so zu gestalten, dass sie lose mit ihrem Framework verbunden ist, oder ist das Framework zu vollständig, um dies realistisch zu machen?

Der einzige Grund, den ich frage, ist, dass ich mich kürzlich mit einem Kollegen unterhalten habe, der meine Idee kritisiert hat, meine Bewerbung locker an F3 zu koppeln.

David Kennedy
quelle
2
Abstrahieren Ihre eigene Anwendung Konzepte .
Vaughan Hilts
@ VaughanHilts Leute scheinen dir zuzustimmen, aber ich bin mir nicht sicher, was du meinst. Können Sie näher darauf eingehen?
David Kennedy
Hah: sitepoint.com/…
David Kennedy

Antworten:

29

Wenn Sie Ihre Anwendung lose an das Framework koppeln, schreiben Sie im Wesentlichen ein Proxy-Framework. Das Schreiben dieses Proxy-Frameworks ist sehr aufwändig, und wenn Sie jemals zu einem neuen Framework wechseln, müssen Sie viel Arbeit leisten, damit das Proxy-Framework das neue Framework unterstützt. Natürlich verwenden unterschiedliche Frameworks unterschiedliche Redewendungen und Muster, wodurch das Proxy-Framework entweder sehr komplex wird (wenn Sie versuchen, es auf alles abzustimmen) oder sehr begrenzt wird (wenn Sie den kleinsten gemeinsamen Nenner wählen). In beiden Fällen müssen Sie mit diesem Proxy-Framework zu kämpfen haben.

Ist die Fähigkeit, Frameworks aus einer Laune heraus zu ändern, all diese Mühe wert? Wie ich bereits sagte, können Sie es nicht aus einer Laune heraus ändern, da Sie das Proxy-Framework anpassen müssen. Dies ist möglicherweise aufwändiger als das direkte Anpassen des Anwendungscodes.

Idan Arye
quelle
4
Ihre Verwendung des Begriffs "Proxy-Framework" hat mir geholfen, das Problem zu klären.
David Kennedy
1
+1 auf diese Antwort. Es gibt viele Fälle, in denen das Neukodieren gegen das neue Framework viel billiger sein kann als das Erstellen des Proxy-Frameworks - was auch spekulativ ist. Abgesehen davon denke ich, dass die ganze Framework-Switching-Sache definitiv möglich und sinnvoll ist, wenn Sie 1) wenige Berührungspunkte mit der API und 2) Gemeinsamkeiten zwischen APIs verschiedener Frameworks haben - aber ich würde argumentieren, dass dies definitiv nicht der Fall ist der allgemeine Fall.
J Trana
5

Geht nicht.

Sie können auf eine Weise entwerfen , die über Frameworks hinweg portierbar ist. MVC ist MVC, und die Prinzipien sind in etwa gleich, unabhängig von der verwendeten Sprache oder Plattform.

Der eigentliche Code wird jedoch sehr rahmen- oder sprachabhängig sein. Der einzige Weg, sich davon zu abstrahieren, wäre Code auf der Basis eines Zwischengerüsts. Dann können Sie die Zwischenimplementierung ändern (von F3 auf .NET?), Ohne die Anwendung zu ändern. Das ist viel Arbeit, setzt nicht-undichte Abstraktionen voraus und verschiebt das Problem nur, ohne es zu lösen: Sie sind jetzt an Ihr Zwischengerüst gebunden.

Positiver: Erwägen Sie, einige Ihrer Tests (BDD-Stil) auf einer Plattform auszudrücken, die von Ihrer Implementierung unabhängig ist. Diese könnten größere Umschreibungen überleben.

ptyx
quelle
Der Wechsel von PHP zu .NET ist wahrscheinlich nicht realistisch, wie Sie betont haben. Ich denke auf sehr hohem Niveau, abstrakt, möglicherweise klar.
David Kennedy
5

Ich habe einmal gesehen, wie Robert C. Martin einen Vortrag hielt, in dem er sagte, dass "die erste Entscheidung, die Sie treffen, die schwerste ist, die Sie später ändern können".

Mein Rat ist daher, diese Entscheidung zu verzögern, wenn Sie nicht genau wissen, was Sie noch verwenden möchten. Identifizieren Sie Teile, die Sie jetzt definieren können und die leicht unabhängig von dem Framework bleiben, das Sie letztendlich verwenden.

M. Scott Ford
quelle
Das ist wirklich ein guter Rat!
David Kennedy
5

Framework Lock-In kann ein ernstes Problem sein, aber es hilft, das Problem als eines der Portabilität zu betrachten. Portabilität ist kein absolutes Attribut, sondern relativ zu Ihrem Ausgangspunkt und dem Ziel, zu dem Sie möglicherweise möchten. Analog dazu ist Software nur insoweit portierbar, als Sie sie bereits auf andere Umgebungen portiert haben.

Die meiste Entwicklung einer Anwendung innerhalb eines Frameworks besteht in der Regel aus Glue-Code, dem Material, das die Komponenten Ihres Frameworks miteinander verbindet. Konfigurationsdateien können in einigen Systemen eine bestimmte Menge des Klebstoffs abstrahieren, aber viele der feinen Details müssen im Code ausgeführt werden.

Andererseits können Geschäftsregeln und -prozesse von der Anwendung abstrahiert werden. Der schwierige Teil der Abstraktion besteht darin, dass die Regeln direkt vom Framework implementiert werden. Sicherheit, Zugänglichkeit und Prozessabfolge werden in der Regel von Ihrem Framework erzwungen und sind möglicherweise am schwierigsten zu erkennen.

Wenn Sie den Klebeteil Ihrer Anwendung von den Geschäftsregeln und dem Teil der Geschäftsprozesse und Geschäftsdaten trennen können, können Sie einige Teile Ihrer Lösung portabel machen.

BobDalgleish
quelle
+1. Indem Sie Ihre Geschäftslogik in einen (Web-) Service extrahieren, können Sie es jeder Anwendung überlassen, diese zu konsumieren. Dadurch wird die PHP-MVC-App zu einer Web-GUI für Ihre Geschäftslogik, die es einfacher macht, sie als Ganzes zu ersetzen.
CodeCaster
Das Entwerfen eines Webdienstes ähnelt dem Entwerfen eines eigenen Frameworks. Darüber hinaus muss eine erhebliche Anzahl Ihrer Geschäftsregeln, insbesondere der Information Engineering-Teil, in der GUI enthalten sein.
BobDalgleish