HintergrundDa das vorherige Datenbank-Firewall-Produkt und das Datenbank-Audit-Produkt denselben Codesatz verwendeten, wurde die Redundanz und Kopplung der Codes mit zunehmenden Funktionsunterschieden der beiden Produkte immer höher. Um die spätere Wartung und das Hinzufügen neuer Funktionen zu erleichtern, wurde die Codestruktur basierend auf dem ursprünglichen Projektcode aufgeteilt.
ZweckNotieren Sie diesen Code-Aufteilungsplan, damit sich nachfolgende Entwickler schnell mit der Projektstruktur vertraut machen können. Vor der SpaltungProzessdesignDer Vorgang der Unterscheidung zwischen Review- und Firewall-Funktionen wurde vor der Projektaufteilung in der Abbildung oben dargestellt. Beim Zugriff auf das System wird zuerst die Einstiegsdatei main.js und dann die Anmeldeseite login.vue geladen. Beim Laden der Anmeldeseite wird der Produktmodus abgerufen und in session.storage.platformType gespeichert. Anschließend meldet sich der Benutzer beim System an und ruft die entsprechende Seite auf. Diese Seite enthält sowohl Datenprüfungs- als auch Firewall-Funktionen. Die anzuzeigende Funktion wird anhand des in session.storage.platformType gespeicherten Werts bestimmt. Entwurf der VerzeichnisstrukturDie Verzeichnisstruktur vor der Projektaufteilung ist in der Abbildung oben dargestellt. Diese Verzeichnisstruktur ist das Basisverzeichnis beim Initialisieren eines Vue-Projekts. Anhand der Verzeichnisstruktur lässt sich grundsätzlich nicht erkennen, dass das Projekt zwei unterschiedliche Produkte enthält, und es ist auch nicht bekannt, welcher Teil der Dateien in unterschiedlichen Produktmodi geladen wird. Die Struktur ist nicht klar. ProblemeDurch Analyse können wir feststellen, dass es mit dem aktuellen Systemprozess und der Verzeichnisstruktur viele Probleme gibt, die wie folgt zusammengefasst werden können:
Nach der SpaltungProzessdesignNachdem das Projekt aufgeteilt wurde, wird der Prozess der Unterscheidung zwischen den Überprüfungs- und Firewall-Funktionen in der obigen Abbildung dargestellt. Laden Sie beim Zugriff auf das System zuerst die Eingabedatei main.js, die die mit der Routenabfangung verbundene Logik enthält. Wenn während der Routenabfangung kein Produktmodus vorhanden ist, müssen Sie zuerst den Produktmodus abrufen, da Sie sonst abgefangen werden und nicht in das System gelangen können. Nach dem Abrufen des Produktmodus werden die entsprechende Anmeldeseite, Routing-Konfiguration, Schnittstellenanforderung usw. entsprechend dem aktuellen Produktmodus registriert. Nach Abschluss der Registrierung sollte jeder Besuch einer bestimmten Seite ein unabhängiges Modul sein. Entwurf der VerzeichnisstrukturDie Verzeichnisstruktur nach der Aufteilung des Projekts ist in den beiden obigen Abbildungen dargestellt. Nachdem die Verzeichnisstruktur aufgeteilt wurde, können Sie die Dateien verschiedener Produkte deutlich getrennt sehen. Beginnend mit der Eingabedatei wird nach dem Abfangen des Routings die angegebene Anmeldeseite geladen und anschließend die vom entsprechenden Produkt benötigten Dateien in die öffentliche Datei zusammengeführt. Zum Beispiel: HTTP-Anfrage, Routing-Konfiguration usw. Dadurch lädt das Programm nur die Dateien, die es benötigt. Gelöste ProblemeNach der Neugestaltung wurden einige im aktuellen Projekt bestehende Probleme gelöst:
Schlüsselcode/** * @Name: main.js * @Autor: cqfeng * @Description: Projekteintrag-JS-Datei* @MainFunction: Einige globale Ressourcen importieren und registrieren**/ //...Code ausgelassen... // Routenabfangen mit globalem Navigationsschutz beforeEach router.beforeEach(async (zu, von, weiter) => { // Wenn kein Produktmodus vorhanden ist, holen Sie sich zuerst den Produktmodus, if (!store.state.productMode.productMode) { warte auf store.dispatch('productMode/SET_PRODUCT_MODE'); } //...Code ausgelassen... /** * @Name: produktmodus.js * @Autor: cqfeng * @Description: Produktmodusbezogene Logikverarbeitungsdatei* @MainFunction: Speichert den aktuellen Produktmodus, konfiguriert die Produktanmeldeseite, HTTP-Anforderung und andere Ressourcen entsprechend den verschiedenen Produktmodi**/ importiere Vue von „vue“; importiere portService von '@/assets/js/service/http/http'; // Axios-Anfrageimportiere Router von '@/router/index'; // Standard-Routingkonfiguration, dynamische Routingkonfigurationimportiere httpAAS von '@/assets/js/service/http/http-aas'; // HTTP-Anfrage eindeutig für Datenprüfungimportiere httpFW von '@/assets/js/service/http/http-fw'; // HTTP-Anfrage eindeutig für Firewallimportiere globalConstant von '@/assets/js/const/global-constant'; // globale Projektkonstanteexportiere Standard { Namespace: wahr, Zustand: { productMode: '', // Produktmodus, der beim Aufrufen des Systems oder Aktualisieren der Seite abgerufen wird}, Mutationen: // Produktmodus ändern changeProductMode: function (state, value) { Status.Produktmodus = Wert; }, }, Aktionen: { asynchron SET_PRODUCT_MODE({ Commit, Status }) { let res = warte auf portService.getProductMode(); wenn (res.data.code === 0) { commit('Produktmodus ändern', res.data.data.produktmodus); } // Wenn es ein digitales Produkt ist, if (state.productMode === globalConstant.COMMON.AAS) { // Richten Sie die Produkt-Anmeldeseite ein router.addRoutes([ { Pfad: '/login', Name: 'Anmelden', Komponente: auflösen => { erfordern(['@/views/login.vue'], lösen); }, } ]); //HTTP-Anfragen zusammenführen und an den Vue-Prototyp anhängen Vue.prototype.portService = Object.assign(portService, httpAAS); } // Wenn es ein Firewall-Produkt ist, sonst wenn (state.productMode === globalConstant.COMMON.DBSG) { // Richten Sie die Produkt-Anmeldeseite ein router.addRoutes([ { Pfad: '/login', Name: 'Anmelden', Komponente: auflösen => { erfordern(['@/views/views-fw/login.vue'], lösen); }, } ]); //HTTP-Anfragen zusammenführen und an den Vue-Prototyp anhängen Vue.prototype.portService = Object.assign(portService, httpFW); } } } }; ZusammenfassenNach der Aufspaltung wurden die Code-Verzeichnisse des Datenaudits und der Firewall grundsätzlich getrennt. Dieser Prozess war mit viel Aufwand verbunden und brachte mich auch zum Nachdenken: Ist es eine gute Idee, einen Codesatz für mehrere Projekte zu haben? Gibt es bessere Lösungen? Wenn das Projekt von Anfang an nach dem Entwurf mehrerer Projekte mit einem Codesatz entwickelt wird, sind dann die späteren Wartungskosten geringer? Ich habe auf diese Fragen keine Antworten, aber ich hoffe, dass zukünftige Generationen die Erfahrungen der Geschichte nutzen und bessere Projekte entwickeln können. Andere ImplementierungenAls der Aufteilungsplan erstmals entworfen wurde, gab es zwei Möglichkeiten: Eine bestand darin, die aktuelle Produktfunktion durch Abrufen des Produktmodells dynamisch zu ändern, und die andere bestand darin, das angegebene Produktpaket während der Verpackung über Verpackungsparameter zu verpacken. Die endgültige Lösung besteht darin, die erste zu wählen. Allerdings haben wir dabei auch auf einige Online-Implementierungslösungen verwiesen, die hier zur zukünftigen Bezugnahme aufgeführt sind. //www.jb51.net/article/188869.htm //www.jb51.net/article/207835.htm Oben finden Sie den detaillierten Inhalt des Vue-Projektcode-Aufteilungsplans. Weitere Informationen zur Vue-Projektcode-Aufteilung finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM! Das könnte Sie auch interessieren:
|
>>: Datenbankübergreifende Assoziationsabfragemethode in MySQL
1. Alipay-Methode: Alipay-Methode: Klicken Sie zu...
Wenn MySQL zu viel CPU beansprucht, wo sollten wi...
Die Wirkung ist wie folgt: Beispiel 1 Beispiel 2:...
Vorwort Aus Kostengründen kaufen die meisten Webm...
Dieser Artikel zeigt Ihnen eine verschiebbare Fot...
Implementieren Sie den Nginx-Lastausgleich basier...
<br />Der Autor war früher ein Anfänger im W...
In diesem Artikel wird eine detaillierte Erläuter...
Vorwort Ich habe vor Kurzem :first-child in einem...
Code kopieren Der Code lautet wie folgt: <Kopf...
Was ist ein Generator? Ein Generator ist ein Code...
1. Konfigurieren Sie den Docker-Remoteverbindungs...
In diesem Artikelbeispiel wird der spezifische Co...
So funktioniert Nginx Nginx besteht aus einem Ker...
Win10-Installation (überspringen, falls bereits i...