In den letzten drei Jahren, in denen ich als Entwickler gearbeitet habe, habe ich viele Beispiele gesehen, in denen Benutzer eine switch-Anweisung verwenden, um den Pfad (sowohl im Back-End als auch im Front-End) für eine URL festzulegen. Unten ist ein Beispiel dafür:
Backend-Beispiel (C #):
public static string getHost(EnvironmentEnum environment){
var path = String.Empty;
switch (environment)
{
case EnvironmentEnum.dev:
path = "http://localhost:55793/";
break;
case EnvironmentEnum.uat:
path = "http://dev.yourpath.com/";
break;
case EnvironmentEnum.production:
path = "http://yourpath.com/";
break;
}
return path;
}
Frontend-Beispiel (JavaScript):
(function () {
if (window.location.host.indexOf("localhost") !== -1) {
window.serviceUrl = "http://localhost:57939/";
}
else if (window.location.host.indexOf("qa") !== -1) {
window.serviceUrl = "http://dev.yourpath.com/";
}
else {
window.serviceUrl = "http://yourpath.com/";
}
})();
Es wurde diskutiert, ob es sich um eine gute oder eine schlechte Praxis handelt, und ich denke, es ist eine schlechte Praxis, weil wir diese Art von Code vermeiden und eine richtige Konfiguration festlegen müssen. Aber um ehrlich zu sein, weiß ich wirklich nicht die richtige Antwort und warum wird es nicht empfohlen und was ist der richtige Weg, dies umzusetzen.
Kann jemand das Für und Wider der obigen Praxis erklären?
Dictionary
ist a eine viel sauberere Methode, dies in C # zu codieren. Siehe ideone.com/45g5xO . Oder verwenden Sie in JS ein gutes altes Objekt, siehe jsfiddle.net/1ouhovqq .Antworten:
Code, der für Sie funktioniert und einfach zu warten ist, ist per Definition "gut". Sie sollten niemals Dinge ändern, nur um der Idee einer "guten Praxis" zu gehorchen, wenn diese Person nicht auf das Problem mit Ihrem Code hinweisen kann.
In diesem Fall besteht das offensichtlichste Problem darin, dass Ressourcen in Ihrer Anwendung fest codiert sind - auch wenn sie dynamisch ausgewählt wurden, sind sie immer noch fest codiert. Dies bedeutet, dass Sie diese Ressourcen nicht ändern können, ohne Ihre Anwendung neu zu kompilieren / erneut bereitzustellen. Mit einer externen Konfigurationsdatei müssten Sie nur diese Datei ändern und Ihre Anwendung neu starten / laden.
Ob das ein Problem ist oder nicht, hängt davon ab, was Sie damit machen. In einem JavaScript-Framework, das ohnehin bei jeder Anfrage automatisch neu verteilt wird, ist dies kein Problem - der geänderte Wert wird bei der nächsten Verwendung der Anwendung an alle Benutzer weitergegeben. Bei einer lokalen Bereitstellung in einer kompilierten Sprache an einem unzugänglichen Ort ist dies in der Tat ein sehr großes Problem. Das erneute Installieren der Anwendung kann viel Zeit in Anspruch nehmen, viel Geld kosten oder nachts durchgeführt werden, um die Verfügbarkeit zu gewährleisten.
Ob hartcodierte Werte ein Problem darstellen oder nicht, hängt davon ab, ob Ihre Situation eher dem ersten oder dem zweiten Beispiel entspricht.
quelle
Sie haben absolut Recht, wenn Sie denken, dass dies eine schlechte Praxis ist. Ich habe das im Produktionscode gesehen und es kommt immer wieder, um dich zu beißen.
Was passiert, wenn Sie eine weitere Umgebung hinzufügen möchten? Oder ändern Sie Ihren Entwicklungsserver? Oder müssen Sie an einen anderen Ort wechseln? Dies ist nicht möglich, da Ihre Konfiguration direkt an Code gebunden ist.
Die Konfiguration sollte aus dem Code heraus und in die Umgebung selbst gezwungen werden. Es ist ein Prinzip einer Zwölf-Faktoren-App ( http://12factor.net/config ), aber es ist eine gute Praxis für jede Anwendung. Möglicherweise stellen Sie fest, dass Umgebungsvariablen für Ihre Situation nicht geeignet sind. In diesem Fall würde ich empfehlen, diese Konfiguration in einer Datenbank mit Konfigurationsdateien zusammen mit Code (der jedoch nicht mit Code eingecheckt wurde) zu speichern.
quelle
Zum einen ist dies (wie andere bereits erwähnt haben) eine schlechte Idee, da Sie Implementierungsdetails in Ihren Code einbinden. Dies macht es schwierig, Dinge zu ändern.
Wie in dieser Antwort erwähnt , müssen Sie, wenn Sie jetzt eine neue Umgebung hinzufügen möchten, Ihren Code überall aktualisieren , anstatt Ihr Programm nur einer neuen Umgebung hinzuzufügen.
Es gibt einen weiteren schwerwiegenden Fehler bei der Ausführung in Ihrem Javascript-Code: Sie setzen die Interna Ihres Unternehmens potenziellen Angreifern aus. Sicher, Sie befinden sich möglicherweise hinter einer Firewall, haben jedoch möglicherweise einen verärgerten Mitarbeiter oder jemanden, der einen Virus hereinlässt.
Schlechte Nachrichtenbären.
Das Beste, was Sie tun können, ist, Ihre Konfiguration über die Umgebung festzulegen (wie in der zuvor verknüpften Antwort, hat die Zwölf-Faktoren-App gute Tipps zu diesem Thema). Es gibt verschiedene Möglichkeiten, dies abhängig von Ihrer Sprache zu tun. Eine der einfachsten ist (normalerweise), Umgebungsvariablen festzulegen. Dann ändern Sie einfach die Variablen, je nachdem, wo Sie ausgeführt werden - ob es sich um eine lokale Entwicklungsbox, eine QA-Datei oder eine Produktionsdatei handelt. Eine andere Option ist das Speichern der Werte in einer
.ini
Datei oder JSON. Eine weitere Alternative wäre, Ihre Konfigurationswerte als tatsächlichen Code zu speichern. Je nachdem, welche Sprache oder Umgebung Sie verwenden, ist dies möglicherweise eine gute oder keine gute Idee.Das ultimative Ziel ist es jedoch, dass Sie eine Codebasis verwenden, diese auf jedem Computer ablegen , der über die unterstützte Architektur / Konnektivität verfügt, und sie ausführen können, ohne den Code in irgendeiner Weise zu ändern.
quelle
Was ist, wenn ich das Backend auf meinem eigenen Computer ausführen möchte, aber nicht auf Port 55793, z. B. wenn ich mehrere Versionen gleichzeitig ausgeführt habe, um sie zu vergleichen? Was ist, wenn ich das Anwendungs-Backend auf einem Computer ausführen, aber von einem anderen aus darauf zugreifen möchte? Was ist, wenn ich eine vierte Umgebung hinzufügen möchte? Wie bereits erwähnt, müssen Sie die Kompilierung erneut durchführen, um die Grundkonfiguration zu ändern.
Der Ansatz, den Sie beschrieben haben, hat sich bisher in der Praxis für Ihr Team bewährt, ist aber sinnlos einschränkend. Ein Konfigurationssystem, mit dem Parameter wie dieser Pfad in einer zentralen Konfigurationsdatei willkürlich festgelegt werden können, ist weitaus flexibler als ein System, das nur feste Optionen bereitstellt. Welchen Vorteil bietet der Ansatz mit switch-Anweisungen? Keiner!
quelle
Es ist eine schlechte Praxis .
Ein Grundprinzip des Software-Designs: Codieren Sie Konfigurationswerte nicht in Ihren Programmen. Dies gilt insbesondere für alles, was eine vernünftige Chance hat, sich in Zukunft zu ändern.
Der von Ihnen entwickelte Programmcode sollte mit dem Code identisch sein, der in Umgebungen wie QS-Tests, UATs und Produktionsumgebungen verwendet wird. Wenn jemand die Konfiguration später ändern muss, weil sich die Umgebung geändert hat, oder wenn er sie in einer neuen Umgebung verwenden muss, ist das in Ordnung. Sie sollten jedoch niemals Ihren Programmcode berühren müssen, um dies zu tun. Und Sie sollten nicht für jede Umgebung unterschiedliche Codeversionen haben. Wenn sich Ihr Programm seit dem Testen geändert hat, haben Sie diese Version nicht getestet. Fragen Sie einen Software-Ingenieur, einen Fachmann für Software-Qualitätssicherung, einen Fachmann für IT-Projektmanagement oder einen IT-Auditor.
Jemand könnte das Testen auf einen anderen Server verschieben. Jemand könnte entscheiden, ob er auch eine Anwenderschulungsumgebung oder eine Umgebung für Verkaufsvorführungen haben möchte. Sie sollten nicht zur administrativen Konfiguration zu einem Programmierer gehen müssen.
Software sollte flexibel und robust genug sein, um unerwartete Situationen innerhalb angemessener Grenzen zu bewältigen.
Darüber hinaus sollte Software nicht einfach geschrieben werden, aber im Moment erscheint es Ihnen am einfachsten. Die Kosten für die Softwareentwicklung sind im Vergleich zu den Kosten für die Softwarewartung über die gesamte Lebensdauer gering. Sagen wir, in einem Jahr könnten Sie nicht derjenige sein, der an diesem Code arbeitet. Sie sollten darüber nachdenken, was Sie für den nächsten armen Dummkopf hinterlassen, der alles aufheben muss, was Sie hinterlassen haben, vielleicht Jahre nachdem Sie auf grünere Weiden gegangen sind. Oder Sie sind derjenige, der den Code Jahre später aufgreift und nicht glaubt, was Sie damals getan haben.
Codieren Sie die Dinge richtig, so gut Sie können. Es ist weniger wahrscheinlich, dass es später zu einem Problem wird.
quelle