[Roast: Day – Mein „utils'-Ordner
Der Großteil der heutigen Arbeit bestand aus Fortsetzungen der Arbeit von gestern, lediglich der Implementierung von Geschäftslogik auf den Routen meiner Anwendung. Also dachte ich mir, ich mache eine Pause, um über drei Funktionen zu sprechen, die ich erstellt habe, um ganz bestimmte Dinge in meiner Anwendung zu tun.
Was ist ein Utils-Ordner?
Dies ist das Verzeichnis, in dem Sie all Ihre kleinen Funktionen ablegen, die nur schwer ein Zuhause finden, ohne die Ihre Anwendung aber nicht leben könnte.
Ein Utils-Ordner ist die Mülldeponie für die unbesungenen Helden vieler Anwendungen.
Wenn Sie eine Transformation Ihrer Daten durchführen müssen, die mehr als ein paar Codezeilen erfordert, die Sie wiederverwenden müssen, ist es eine gute Idee, sie in einer eigenen Datei abzulegen, die Sie exportieren können Rest Ihrer Bewerbung.
Warum kopieren wir nicht einfach und fügen ein? Nun, das würde gegen zwei Programmierprinzipien verstoßen: DRY und Trennung von Belangen.
Wiederholen Sie sich nicht
Es ist nicht nur eintönig, sich zu wiederholen, es ist auch mühsam, etwas zu ändern, wenn man es während der gesamten Bewerbung oft genug getan hat. Stellen Sie sich einen Algorithmus vor, der die prozentuale Regenwahrscheinlichkeit heute berechnet.
Ich weiß nicht, wie die Leute das machen, daher kann ich Ihnen kein Beispiel zeigen. Aber wenn Sie das alles in Ihrem Code an den verschiedenen Stellen kopieren, die Zugriff auf diese Berechnung haben müssen, werden Sie sehr verärgert sein, wenn das Very Smart Scientific Weather Committee mit einem neuen, genaueren Algorithmus zurückkommt.
Nehmen Sie wiederverwendete Teile Ihres Codes und finden Sie Möglichkeiten, sie so zu verpacken, dass sie an mehreren Stellen verwendet werden können, während sie gleichzeitig an einer Stelle aktualisiert werden.
Alle Funktionen in meinem Utils-Ordner werden an vielen Stellen in meiner Anwendung verwendet!
Trennung von Belangen
Als Programmierer möchten wir auch keine Funktionen erstellen, die VIELE verschiedene Dinge tun. Wir hätten lieber VIELE Funktionen, die alle eine Sache tun. Warum? Nun, es macht diese Funktionen wiederverwendbar!
Was hat das mit einem Utils-Ordner zu tun? Nun, die Funktionen, die ich gleich durchgehen werde, haben keinen Platz in Funktionen wie getRoastsById, weil sie das nicht tun! Wenn wir etwas anderes tun müssen, sollten wir eine Funktion dafür erstellen. Aber wenn wir keinen logischen Platz für diese Funktion haben, weil es ein „Helfer“ ist, legen wir sie in unserem Utils-Verzeichnis ab!
Mein Utils-Ordner
Ich habe bisher drei benutzerdefinierte Dienstprogramme:
- Anweisung einfügen
- updateStatement
- objectKeysToCamel
Hoffentlich ist anhand ihrer Namen klar, was sie tun, aber lassen Sie mich kurz das Problem erläutern, das sie lösen, und wie sie funktionieren.
insertStatement
Problem: In vielen der verschiedenen Dienste meiner Anwendung muss ich eine INSERT-Abfrage an meine Datenbank durchführen. Für diese Anweisungen müssen Sie explizit 1) die Namen der Spalten und 2) die Werte auflisten. Ich sollte diese nicht in jeder Route eintippen müssen, also habe ich eine Funktion erstellt, die das für mich erledigt.
Eingabe: Die Funktion benötigt zwei Parameter: table, eine Zeichenfolge, die mit dem Namen einer Tabelle in der Datenbank übereinstimmt, und obj, ein Javascript-Objekt, das das Modell darstellt, das der Benutzer der Datenbank hinzufügen möchte.
Ausgabe: Ein Objekt mit 1) einer eigenschaftsformatierten INSERT-Zeichenfolge mit Platzhalterwerten und 2) einem Array der Werte, die in einer parametrisierten Abfrage verwendet werden sollen.
const { snakeCase } = require('change-case-commonjs'); function insertStatement(table, obj) { const keys = Object.keys(obj); const values = Object.values(obj); let statement = `INSERT INTO ${table} (`; // Add snake_case keys to the statement const keyString = keys.map((key, i) => snakeCase(key)).join(', '); statement += `${keyString}) VALUES (`; // Add placeholders for the values const placeholders = keys.map((_, i) => `$${i + 1}`).join(', '); statement += `${placeholders}) RETURNING *;`; // Return the query string and the values array return { text: statement, values: values }; } module.exports = insertStatement;
updateStatement
Problem: Ähnlich wie bei der INSERT-Anweisung erfordert die UPDATE-Anweisung, dass Sie in Ihrer Abfrage explizit sowohl Spaltennamen als auch Werte angeben. Diese Syntax unterscheidet sich von einer INSERT-Anweisung. Durch bedingte Logik könnte ich eine DatenbankQueryGenerator-Funktion erstellen, aber auch dies verstößt offenbar gegen die Interessenstrennung. Würde eine solche Funktion entscheiden, welche Art von Abfrage Sie möchten, oder eine darauf basierende Syntax generieren?
Eingabe: Die Funktion benötigt drei Parameter. obj, ein JavaScript-Objekt, das den aktualisierten Datensatz darstellt. table , eine Zeichenfolge, die mit einer Tabelle in der Datenbank übereinstimmen sollte. id , eine Ganzzahl, die dem Datensatz entspricht, der mit den neuen Informationen aktualisiert werden soll.
Ausgabe: Ein Objekt mit 1) einer eigenschaftsformatierten UPDATE-Zeichenfolge mit Platzhalterwerten und 2) einem Array der Werte, die in einer parametrisierten Abfrage verwendet werden sollen.
const { snakeCase } = require('change-case-commonjs'); function updateStatement(obj, table, id) { const keys = Object.keys(obj); const values = Object.values(obj); let statement = `UPDATE ${table} SET `; keys.forEach((key, index) => { statement += `${snakeCase(key)} = $${index + 1}, `; }); // Remove the last comma and space statement = statement.slice(0, -2); // Determine the correct ID column based on the table const idColumn = table === 'users' ? 'username' : table === 'roasts' ? 'roast_id' : ''; // Finalize the statement with the WHERE clause statement += ` WHERE ${idColumn} = $${keys.length + 1} RETURNING *;`; return { text: statement, values: [...values, id] }; } module.exports = updateStatement
objectKeysToCamel
Problem: The style of my database is different from the style of my JavaScript. However, I'm not willing to compromise in either area. In my JS files, my naming convention uses camelCase, where in my database it uses snake_case. All property names of returned objects are the same, but formatted differently. To maintain this case standard, I would have to access properties in my JS using snake_case, but I don't like this.
Input: The function takes only one parameter, an obj JavaScript object that should have its keys transformed into camelCase formatting.
Output: The same object, with camelCase formatted keys.
const { camelCase } = require('change-case-commonjs'); function objectKeysToCamel(obj) { // Extract the keys and values const keys = Object.keys(obj); const values = Object.values(obj); let camel = {} // Change the formatting of each key, assigning it the proper value keys.forEach((key, i) => { const camelKey = camelCase(key); camel[camelKey] = values[i] }) // Return the new object return camel; } module.exports = objectKeysToCamel;
Check Out the Project
If you want to keep up with the changes, fork and run locally, or even suggest code changes, here’s a link to the GitHub repo!
https://github.com/nmiller15/roast
The frontend application is currently deployed on Netlify! If you want to mess around with some features and see it in action, view it on a mobile device below.
https://knowyourhomeroast.netlify.app
Note: This deployment has no backend api, so accounts and roasts are not actually saved anywhere between sessions.
Das obige ist der detaillierte Inhalt von[Roast: Day – Mein „utils'-Ordner. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen











Python eignet sich besser für Anfänger mit einer reibungslosen Lernkurve und einer kurzen Syntax. JavaScript ist für die Front-End-Entwicklung mit einer steilen Lernkurve und einer flexiblen Syntax geeignet. 1. Python-Syntax ist intuitiv und für die Entwicklung von Datenwissenschaften und Back-End-Entwicklung geeignet. 2. JavaScript ist flexibel und in Front-End- und serverseitiger Programmierung weit verbreitet.

Die Verschiebung von C/C zu JavaScript erfordert die Anpassung an dynamische Typisierung, Müllsammlung und asynchrone Programmierung. 1) C/C ist eine statisch typisierte Sprache, die eine manuelle Speicherverwaltung erfordert, während JavaScript dynamisch eingegeben und die Müllsammlung automatisch verarbeitet wird. 2) C/C muss in den Maschinencode kompiliert werden, während JavaScript eine interpretierte Sprache ist. 3) JavaScript führt Konzepte wie Verschlüsse, Prototypketten und Versprechen ein, die die Flexibilität und asynchrone Programmierfunktionen verbessern.

Zu den Hauptanwendungen von JavaScript in der Webentwicklung gehören die Interaktion der Clients, die Formüberprüfung und die asynchrone Kommunikation. 1) Dynamisches Inhaltsaktualisierung und Benutzerinteraktion durch DOM -Operationen; 2) Die Kundenüberprüfung erfolgt vor dem Einreichung von Daten, um die Benutzererfahrung zu verbessern. 3) Die Aktualisierung der Kommunikation mit dem Server wird durch AJAX -Technologie erreicht.

Die Anwendung von JavaScript in der realen Welt umfasst Front-End- und Back-End-Entwicklung. 1) Zeigen Sie Front-End-Anwendungen an, indem Sie eine TODO-Listanwendung erstellen, die DOM-Operationen und Ereignisverarbeitung umfasst. 2) Erstellen Sie RESTFUFFUPI über Node.js und express, um Back-End-Anwendungen zu demonstrieren.

Es ist für Entwickler wichtig, zu verstehen, wie die JavaScript -Engine intern funktioniert, da sie effizientere Code schreibt und Leistungs Engpässe und Optimierungsstrategien verstehen kann. 1) Der Workflow der Engine umfasst drei Phasen: Parsen, Kompilieren und Ausführung; 2) Während des Ausführungsprozesses führt die Engine dynamische Optimierung durch, wie z. B. Inline -Cache und versteckte Klassen. 3) Zu Best Practices gehören die Vermeidung globaler Variablen, die Optimierung von Schleifen, die Verwendung von const und lass und die Vermeidung übermäßiger Verwendung von Schließungen.

Python und JavaScript haben ihre eigenen Vor- und Nachteile in Bezug auf Gemeinschaft, Bibliotheken und Ressourcen. 1) Die Python-Community ist freundlich und für Anfänger geeignet, aber die Front-End-Entwicklungsressourcen sind nicht so reich wie JavaScript. 2) Python ist leistungsstark in Bibliotheken für Datenwissenschaft und maschinelles Lernen, während JavaScript in Bibliotheken und Front-End-Entwicklungsbibliotheken und Frameworks besser ist. 3) Beide haben reichhaltige Lernressourcen, aber Python eignet sich zum Beginn der offiziellen Dokumente, während JavaScript mit Mdnwebdocs besser ist. Die Wahl sollte auf Projektbedürfnissen und persönlichen Interessen beruhen.

Sowohl Python als auch JavaScripts Entscheidungen in Entwicklungsumgebungen sind wichtig. 1) Die Entwicklungsumgebung von Python umfasst Pycharm, Jupyternotebook und Anaconda, die für Datenwissenschaft und schnelles Prototyping geeignet sind. 2) Die Entwicklungsumgebung von JavaScript umfasst Node.JS, VSCODE und WebPack, die für die Entwicklung von Front-End- und Back-End-Entwicklung geeignet sind. Durch die Auswahl der richtigen Tools nach den Projektbedürfnissen kann die Entwicklung der Entwicklung und die Erfolgsquote der Projekte verbessert werden.

C und C spielen eine wichtige Rolle in der JavaScript -Engine, die hauptsächlich zur Implementierung von Dolmetschern und JIT -Compilern verwendet wird. 1) C wird verwendet, um JavaScript -Quellcode zu analysieren und einen abstrakten Syntaxbaum zu generieren. 2) C ist für die Generierung und Ausführung von Bytecode verantwortlich. 3) C implementiert den JIT-Compiler, optimiert und kompiliert Hot-Spot-Code zur Laufzeit und verbessert die Ausführungseffizienz von JavaScript erheblich.
