Durchsetzungsfähig Programmierung mit JavaScript
Weiß ich, warum durchsetzungsfähig Programmierung ist gut, so will ich es mit JavaScript. Aber ich will nicht, um dem Benutzer anzuzeigen, Fehler-Boxen, und es ist unüblich. Ignorieren Sie es einfach und machen Sie wiederholen könnte besser sein.
Beispiel: dieser code wird einen Fehler machen, box und Benutzer unterbrochen.
function getDomainFromURL(url) {
assertTrue(url, 'URL should not be null');
...parsing
}
So, ich würde wie dieser.
function getDomainFromURL(url) {
if (!url) return;
...parsing
}
Zweite ist gut für die usability, denke ich, und der erste ist gut für die Entwicklung.
Also, IMO wäre es das beste, kombinieren diese und stellen Sie die assert
verschwinden Produktion von code.
Frage 1
Denken Sie so? Oder haben Sie eine andere Idee?
Frage 2
Wenn Sie so denken, ist es eine gute Möglichkeit, es zu tun mit Spring3 Rahmen?
- Hast du dies gelesen? stackoverflow.com/questions/3269802/...
- Diese Frage ist schon ein bisschen älter, aber Leser können daran interessiert sein, im Rahmen der Jasmine-Test-framework - pivotal.github.com/jasmine, das normalerweise erwarten, dass in einer ähnlichen Weise zu dem, was Sie beschrieben haben.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Glaube ich nicht, das zweite ist besonders gut. Wenn Sie nichts zurückgeben, von einer Methode, die immer erwartet, dass etwas von dem zurückgeben, wird der code wahrscheinlich nur fail woanders, statt in der Nähe, wo das eigentliche problem ist also im
getDomainFromURL
Funktion.Wenn auf der anderen Seite, ist es völlig in Ordnung für diese Methode nichts zurückgeben, wenn der parameter null ist, dann hat es keinen Sinn machen, fügen Sie die Behauptung.
Persönlich würde ich die erste form, die überall, sowohl in Entwicklung und Produktion. Falls die assertion fehlschlägt, in der Produktion, dann bekommst du sehr nützliche feedback (im browser, Protokolle, etc.) über die Ursache des Problems. Wenn Sie entfernen die Behauptung, Sie haben immer noch einen bug, aber es werde nur mehr schwer auf die Spur
Beiseite
Diese Art der Programmierung - prüfen der Voraussetzungen - ist Teil von dem, was ist bekannt als contract-basierte Programmierung. Ich habe noch nie gehört, den Begriff "assertive Programmierung" vor.
Assertive programming
aus Die Programmatische Programmer. Sehen: pragprog.com/the-pragmatic-programmer/extracts/toc. Trotzdem, vielen Dank für deine Antwort.Behauptet sollte nicht verwendet werden, die für die Validierung jeder Art von Benutzer eingegebenen Daten. Sie sollte nicht verwendet werden für die Fehlerprüfung entweder. Geltend machen, ist der Weg, um das Debuggen für Programmierer einfacher, falls tests fehlschlagen. Auch ist es ein Weg, um Ihren code leichter zu verstehen.
Betrachten Sie dieses Beispiel:
Meine Formel, indem es die Spezifikation versichert, dass k nie 0 sein. Hier habe ich noch geltend machen, fast wie ein Kommentar in meinem code. Es überprüft nicht die Logik - es ist völlig das Gegenteil. Mit behauptet ich überprüfen, ob meine Umsetzung, die komplexe Logik korrekt ist. Später, wenn ich komme zurück zu meinem code und sehen Sie
l = d/k
ich nicht misstrauisch über das, was passiert, wenn k 0 ist, denn ich sehe meineassert
es und verstehen, dass0
sollte das nie passieren.Auch, wenn es einen Fehler irgendwo und
0
passiert, Sie sehen in der Regel etwas tiefer Fehler. Zum Beispiel:Ohne geltend macht, erhalten Sie das falsche Ergebnis dieser Funktion. Sie haben keine Ahnung, warum Sie erhalten dann 0, wenn es 1 sein soll. Sie haben, um Debuggen zu starten, den code Zeile für Zeile und zu verstehen, was falsch gelaufen ist.
Mit versichert, allerdings werden Sie sofort bemerken, dass das "assertion failed" Fehler und wird sofort minimieren Sie den Umfang, um nach dem problem zu suchen.
Behauptet nützlich sind, in einer beliebigen Programmiersprache, wie Javascript, aber Sie sollten nicht dort sein in der Live-Umgebung. Daher werden einige Postprozessor-system sollte entfernen Sie alle Bestätigungen aus Ihrem code vor dem release.
user input
Daten mit behauptet.Ich glaube nicht, dass es gut zu haben, durchsetzungsfähig Programmierung in Javascript für ein paar Gründe:
Der beste Weg, dies zu tun ist, zu schreiben, "unittests". Auf diese Weise können Sie sicherstellen, dass Ihr code nicht zu brechen, wenn Sie es aktualisieren, und auch es bedeutet, die behaupten, erscheinen nicht in Ihrem Produktionscode. Zugegeben, Sie BENÖTIGEN, um Dinge wie
if (condition) error();
als die Bedingung abhängen kann der Benutzer, anstatt die Entwickler. Diese wird unvermeidbar sein, und Sie müssen code von hand.Faustregel:
if (condition) error();
wenn die Bedingung hängt von der user -Schließlich mit unittesting, können Sie überprüfen, ob Ihr code Fehler richtig. Ich bin mir nicht sicher über JsUnit, aber Sie könnten wahrscheinlich etwas zu tun, wie dies in Ihren tests:
zu gehen zusammen mit Ihren
if (condition) error();
im code// Is never zero
. Problem ist manchmal, dass die Programmierer falsch ist, und es sogar zu null wird, am Freitag. Aber die Fehler bekommst du mit unit-Tests werden einige tiefer "NullPointer-exception", während assers wird Ihnen genau zeigen, was falsch gelaufen ist. Auch in JS behauptet sollte entfernt werden, durch einen Postprozessor.Es gibt immer einen Bedarf für eine bedingte Fehlerbehandlung beim Umgang mit asynchronen und Benutzer-gesteuerte Daten. Passiert es. Benutzer und Netzwerk vermasseln. So ist das Leben. Ihre beste Wette ist, um auf ein minimum das zweite Beispiel , wenn, und nur wenn es ist vernünftig zu erwarten, können die Daten beschädigt sein. Wenn Sie sind verantwortlich für die Bereitstellung der Daten, die Sie testen, dann müssen Sie sicherstellen, dass vor der hand, dass die Daten gültig sind.
Warum nicht eine Kombination:
Tatsächlich, kommen, daran zu denken, ich benutze das genaue Muster Recht Häufig.
console
ist zu still. Darüber hinaus IEs sind nicht zu unterstützenconsole
.Schweigend Versagen ist keine gute Idee. Aus einer usability-Perspektive, die Nutzer sollten ein unmittelbares feedback auf Ihre Aktionen, auch im Falle von Fehlern. Sollten Sie zeigen, eine einfache Fehler-Seite, wenn etwas außergewöhnliches passiert in deinem code. Die Idee hier ist, scheitern schnell.
Ich würde Ihren assert-Funktion Umleitung auf eine Fehler-Seite, wenn die Bedingung nicht erfüllt ist, und melden Sie es. Sie können dies in Javascript durch Einstellung
window.location.href
und melden Sie Ihren Fehler durch die Veröffentlichung mit einem XHR.Könnten Sie es so:
Würden einige Leute anders sehen, aber ich würde versuchen, einen Weg finden, entfernen von assert-Anweisungen in der Produktion code, vielleicht durch die Verwendung eines Präprozessors oder als Teil einer Verschleierung Schritt, wenn Sie eine haben. Dies könnte die Leistung zu verbessern und die Größe des Programmcodes, aber würden Sie brauchen, um stellen Sie sicher, dass der code, den Sie anrufen innerhalb der assert nicht ändern den Zustand des Programms. Dies könnte schwierig sein, wie gut. Mein Fazit ist, dass das schreiben großer und robuster Programme, die in javascript erfordert Disziplin.
Als bonus, haben Sie einen Blick auf die geltend machen, dass kann hier gefunden werden:
http://aymanh.com/9-javascript-tips-you-may-not-know/