背景従来のデータベース ファイアウォール製品とデータベース監査製品は、同じコード セットを使用していたため、両製品の機能の違いが大きくなるにつれて、コードの冗長性と結合性がますます高まりました。その後の保守や新機能の追加を容易にするために、元のプロジェクト コードに基づいてコード構造を分割しました。
目的このコード分割計画を記録しておくと、後続の開発者がプロジェクト構造にすぐに慣れることができます。 分割前プロセス設計プロジェクトが分割される前、レビュー機能とファイアウォール機能を区別するプロセスは上の図に示されていました。 システムにアクセスするときは、まずエントリファイル main.js をロードし、次にログインページ login.vue をロードします。ログインページをロードしている間に、製品モードを取得し、session.storage.platformType に保存します。次に、ユーザーはシステムにログインし、特定のページに入ります。このページには、データ監査機能とファイアウォール機能の両方が含まれています。表示される特定の機能は、session.storage.platformType に保存された値に基づいて決定されます。 ディレクトリ構造の設計プロジェクト分割前のディレクトリ構造を上図に示します。 このディレクトリ構造は、Vue プロジェクトを初期化する際の基本ディレクトリです。ディレクトリ構造に基づいて、プロジェクトに 2 つの異なる製品が含まれていることを知ることは基本的に不可能であり、異なる製品モードでファイルのどの部分が読み込まれるかを知ることもできません。構造が明確ではありません。 問題分析により、現在のシステム プロセスとディレクトリ構造に多くの問題があることがわかりました。これは次のようにまとめることができます。
分割後プロセス設計プロジェクトを分割した後、レビュー機能とファイアウォール機能を区別するプロセスを上図に示します。 システムにアクセスするときは、まずルート傍受に関連するロジックを含むエントリ ファイル main.js を読み込みます。ルート傍受中に製品モードがない場合は、まず製品モードを取得する必要があります。そうしないと、傍受され、システムに入ることができません。製品モードを取得すると、現在の製品モードに応じて、対応するログイン ページ、ルーティング構成、インターフェイス要求などが登録されます。登録が完了すると、特定のページへの各アクセスは独立したモジュールになります。 ディレクトリ構造の設計プロジェクトを分割した後のディレクトリ構造は、上の 2 つの図に示されています。 ディレクトリ構造が分割されると、異なる製品から分離されたファイルが明確に表示されます。エントリ ファイルから開始し、ルーティングをインターセプトした後、指定されたログイン ページが読み込まれ、対応する製品に必要なファイルがパブリック ファイルにマージされます。例: http リクエスト、ルーティング構成など。その結果、プログラムは必要なファイルのみをロードします。 問題は解決した再設計後、現在のプロジェクトに存在するいくつかの問題が解決されました。
キーコード/** * @名前: main.js * @著者: cqfeng * @Description: プロジェクトエントリ js ファイル* @MainFunction: いくつかのグローバルリソースをインポートして登録する**/ //...コードは省略... // グローバルナビゲーションガードbeforeEachを使用したルートインターセプション router.beforeEach(非同期(to, from, next) => { // 製品モードがない場合は、まず製品モードを取得します if (!store.state.productMode.productMode) { ストアのディスパッチを待機します('productMode/SET_PRODUCT_MODE'); } //...コードは省略... /** * @名前: product-mode.js * @著者: cqfeng * @Description: 製品モード関連のロジック処理ファイル* @MainFunction: 現在の製品モードを保存し、さまざまな製品モードに応じて製品ログインページ、HTTP リクエスト、およびその他のリソースを構成します**/ 'vue' から Vue をインポートします。 import portService from '@/assets/js/service/http/http'; // axios リクエストimport router from '@/router/index'; // デフォルトのルーティング構成、動的ルーティング構成import httpAAS from '@/assets/js/service/http/http-aas'; // データ監査に固有の http リクエストimport httpFW from '@/assets/js/service/http/http-fw'; // ファイアウォールに固有の http リクエストimport globalConstant from '@/assets/js/const/global-constant'; // プロジェクトのグローバル定数export default { 名前空間: true、 州: { productMode: '', // 製品モード、システムに入るときまたはページを更新するときに取得されます}, 突然変異: // 製品モードを変更する changeProductMode: function (state, value) { 状態.productMode = 値; }, }, アクション: { 非同期SET_PRODUCT_MODE({コミット、状態}) { res = portService.getProductMode() を待機します。 (res.data.code === 0)の場合{ コミット('changeProductMode', res.data.data.productMode); } // デジタル製品の場合 if (state.productMode === globalConstant.COMMON.AAS) { // 製品ログインページを設定する router.addRoutes([ { パス: '/login', 名前: 'ログイン', コンポーネント: 解決 => { 必要(['@/views/login.vue']、解決)。 }, } ]); //http リクエストをマージして Vue プロトタイプに添付します。Vue.prototype.portService = Object.assign(portService, httpAAS); } // ファイアウォール製品の場合 else if (state.productMode === globalConstant.COMMON.DBSG) { // 製品ログインページを設定する router.addRoutes([ { パス: '/login', 名前: 'ログイン', コンポーネント: 解決 => { 必要(['@/views/views-fw/login.vue']、解決)。 }, } ]); //http リクエストをマージし、Vue プロトタイプに添付します。Vue.prototype.portService = Object.assign(portService, httpFW); } } } }; 要約する分割後、データ監査とファイアウォールのコード ディレクトリは基本的に分離されました。このプロセスには多大な労力がかかり、いくつかの考えも浮かびました。複数のプロジェクトに 1 セットのコードを使用するのは良い考えでしょうか。もっと良い解決策はあるでしょうか。最初から1セットのコードで複数のプロジェクトの設計に従ってプロジェクトを開発すると、その後のメンテナンスコストは低くなりますか?これらの質問に対する答えは私にはわかりませんが、将来の世代が歴史的経験を受け継ぎ、より良いプロジェクトを開発できることを願っています。 その他の実装分割計画が最初に設計されたとき、2 つのオプションがありました。1 つは、製品モデルを取得して現在の製品機能を動的に変更することであり、もう 1 つは、パッケージング中にパッケージング パラメータを通じて指定された製品パッケージをパッケージ化することです。最終的な解決策は最初のものを選択することです。ただし、このプロセスでは、いくつかのオンライン実装ソリューションも参照しました。これらは、今後の参考のためにここにリストされています。 //www.jb51.net/article/188869.htm //www.jb51.net/article/207835.htm 以上がVueプロジェクトコード分割計画の詳しい内容です。Vueプロジェクトコード分割の詳細については、123WORDPRESS.COMの他の関連記事に注目してください! 以下もご興味があるかもしれません:
|
<<: MYSQLは継続サインイン機能を実装しており、サインイン後1日経過すると最初から開始します(SQL文)
>>: Linux で scp コマンドを使用してファイルをリモートでコピーする方法の詳細な説明
このチュートリアルの動作環境: Windows 7 システム、MySQL 8 バージョン、Dell ...
ページ内にはjs、cssなどの外部ファイルが導入されており、外部ファイルのエンコードが現在のページフ...
多くの場合、 Web デザインが完成した後でデザイナーの無知が露呈し、批判されることがあります。彼ら...
1. MySQL 5.7を解凍する2. 新しい設定ファイルmy.iniを作成し、 D:\Free\m...
退屈だったので、ループに関する簡単な演習をいくつかまとめてみました。JS を学び始めたばかりの方に役...
1 背景JDK1.8-u181とTomcat8.5.53がインストールされました。インストール後、環...
CSSは複数のクラスにマッチする次の HTML タグ li、クラスはオープン スタイルです。私の要件...
目次1. CDNの紹介1.1 react (最初にインポート) 1.2 react-dom(後ほど紹...
コードをコピーコードは次のとおりです。 <!DOCTYPE html PUBLIC "...
CSS の優先順位について話す前に、CSS とは何か、CSS が何に使用されるのかを理解する必要があ...
MySQLへのリモートアクセスを有効にするデフォルトでは、MySQL ユーザーにはリモート アクセス...
目次1. Vueルーター1. 説明2. 選択したルートのレンダリング: 3. 基本的な動作原理2. ...
この記事ではMySQL 5.7.16のインストールと設定方法を記録します。具体的な内容は以下のとおり...
この記事は主にMybatisでの動的SQL文の解析について紹介します。この記事のサンプルコードは非常...
この記事はCentOS 7.3システム環境をベースに、MySQLとRedisのインストールと使用につ...