シナリオ現在、ビジネスにはシナリオがあります。ビジネスの動作が変化すると、各モジュールの動作に関するデータを収集する必要があります。データは、レビューや監視などのシナリオに使用できます。 中核問題簡単に言えば、この要件は、各モジュールのステータスの変更を記録し、それをフォーマットしてサーバーにアップロードすることです。 ステータス監視状態監視の利点状態管理とウォッチングメカニズムの使用を迅速に実現して、さまざまなモジュールの状態の変化を迅速に把握し、データを取得してフォーマットし、サーバーに送信できます。 国家監視の欠点
関数useA(){ 見る(新しい、古い){ if(開始){ if(new.type == 'need') 定数a = { a:新しいa } 定数aa = { aa:新しい.aa } アップロード(a) アップロード(aa) } } } // 複数データ分散関数 useB(){ // 繰り返し監視 watch(new,old){ // グローバル判定 if(start){ // 異なる状態の判断 if(new.type =='need') 定数b = { b:新しい.b } //繰り返しデータ形式 const aa = { b:new.aa } アップロード(b) アップロード(aa) } } } 復興実行のアイデア
依存関係の収集
/* * @Description: パブリッククラスを収集 * @version: 1.0.0 * @著者: 呉文州* @日付: 2021-04-20 19:44:35 * @LastEditors: 呉文州* @LastEditTime: 2021-04-22 15:20:50 */ /** * @name: 退会 * @msg: 依存関係コレクションオブジェクト */ クラス Dep { プライベートサブ: any = [] // オブザーバーを追加 public addSub(sub: any) { if (sub && sub.update) { this.subs.push(サブ) } } //通知を送信する public notify(content: any) { this.subs.forEach((sub: any) => { sub.update(コンテンツ) }) } } /** * @name: ウォッチャー * @msg: オブザーバー オブジェクト*/ クラスウォッチャー{ プライベート cb!: (引数: 任意) => void コンストラクタ(cb: (arg: any) => void) { // コールバック関数は this.cb = cb の更新を担当します } // データが変更されたら更新する update(content: any) { this.cb(コンテンツ) } } /** * @name: チャンネル * @msg: キャッシュメッセージパイプライン*/ クラスチャンネル{ //パイプラインストレージ配列のプライベートキュー: any = [] // パイプラインサイズ private limitSize = 1 //パイプライン名 public name: 文字列 コンストラクター(名前: 文字列、制限サイズ = 1) { this.name = 名前 // 最小サイズは1です 制限サイズ = 制限サイズ >= 1 ? 制限サイズ: 1 this.limitSize = 制限サイズ } /** * @名前: プッシュ * @msg: データを追加しました*/ プッシュ(アイテム: 任意) { // 制限サイズを超えた場合は最初のものを削除します if (this.limitSize == this.queue.length) { this.queue.shift() } this.queue.push(アイテム) } /** * @name: 最終取得 * @msg: 最後に追加されたデータを取得します*/ 最後の値を取得します(){ (このキューの長さ>0)の場合{ this.queue[this.queue.length - 1]を返す } それ以外 { 新しいエラーをスローします('アイテムが返されません') } } /** * @name: 最終インデックスを取得する * @msg: 最後のカウントダウンデータを取得します*/ getLastIndex(インデックス: 数値) { 試す { this.queue[this.queue.length - index - 1]を返します } キャッチ(エラー){ 新しいエラーをスローします('アイテムが返されません') } } /** * @name: 空です * @msg: パイプは空ですか? */ 空です() { this.queue.length == 0 を返す } } エクスポートクラスコレクション{ //依存関係コレクションオブジェクト private dep = new Dep() // 各データチャネルの分類 private dataQueue = ['A', 'B', 'C'] // チャンネルコレクション private channelMap = new Map() // アップロードキュープライベート MQ!: LiveCollectionMQ // 戦略モード: 異なるデータ型は異なる処理メカニズムに対応します private strategies = { 答え: () => { // 異なる論理処理ごとに異なるパイプラインで対応するデータを取得できます}, B: () => { }, C: () => { }, } として Record<NotifyType, any> コンストラクタ() { この.init() } プライベートinit() { // ウォッチャーを初期化する this.intウォッチャー() // チャネルを初期化する this.initChannel() // データを初期化する this.initData() // キューを初期化する this.initMQ() } /** * @name:intウォッチャー * @msg: リスナーを初期化します */ プライベートintWatcher() { this.dep.addSub( 新しいウォッチャー((type: NotificationType) => { const ハンドラバック = this.getHandler(type) ハンドラバック() })、 ) } /** * @名前: initChannel * @msg: チャネルを初期化します */ プライベートinitChannel() { this.dataQueue.forEach(item => { this.channelMap.set(item, 新しいチャンネル(item, 3)) }) } /** * @名前: initData * @msg: チャネルデータを初期化します * @param {*} */ プライベートinitData() { } /** * @名前: initMQ * @msg: アップロードキューを初期化します*/ プライベートinitMQ() { } /** * @名前: getMQ * @msg: メッセージキューを取得します */ パブリック getMQ() { これを返す.MQ } /** * @name:getChannel * @msg: チャンネル名に基づいてチャンネルインスタンスを取得します * @param {name} チャンネル名 */ プライベートgetChannel(名前:NotifyType) { if (this.channelMap.get(name)) { this.channelMap.get(name) を返します。 } それ以外 { 新しいエラーをスローします('チャンネルがありません') } } /** * @名前:通知 * @msg: 依存通知方法 * @param {NotifyType} タイプ * @param {any} メス */ パブリック通知(タイプ: 通知タイプ、メッセージ: 任意) { // パイプラインキャッシュを設定する this.setChannel(type, mes) // データを配布するかどうかを決定するグローバル統一判定状態 if (state.value.type) { this.dep.notify(タイプ) } } /** * @名前: setChannel * @msg: チャネルキャッシュを設定 * @param {NotifyType} name * @param {any} メス */ プライベートsetChannel(名前:NotifyType、mes:任意) { 定数チャンネル = this.getChannel(名前) チャンネル.push(mes) } /** * @name:getHandler * @msg: 取得 * @param {NotifyType} 名 */ プライベートgetHandler(名前:NotifyType) { this.strategies[name]を返す } /** * @name: getChannelLast * @msg: 指定されたパイプラインの最新データを取得します * @param {NotifyType} name * @戻る {*} */ パブリック getChannelLast(名前: 通知タイプ) { 試す { 定数チャンネル = this.getChannel(名前) channel.getLast() を返す } キャッチ(エラー){ 新しいエラー(error)をスローします } } /** * @name: getChannelLast * @msg: 指定されたパイプラインの逆順データを取得します * @param {NotifyType} name * @param {数値} インデックス */ パブリック getChannelItemByLastIndex(名前: 通知タイプ、インデックス: 数値) { 試す { 定数チャンネル = this.getChannel(名前) channel.getLastIndex(index) を返します。 } キャッチ(エラー){ 新しいエラー(error)をスローします } } /** * @名前: generateA * @msg: A データメソッドを生成します */ パブリックgenerateA() { } /** * @名前: 生成B * @msg: B データ生成メソッド */ パブリック生成B() { } /** * @名前: 生成C * @msg: C データ メソッドを生成します */ パブリックgenerateC() { } } エクスポート const CollectionHelper = new Collection() 要約する
以上がVueを使ったデータコレクターの設計の詳細です。Vueを使ったデータコレクターの設計の詳細については、123WORDPRESS.COMの他の関連記事にも注目してください。 以下もご興味があるかもしれません:
|
<<: Mac OS に MySQL 5.7.20 をインストールするための詳細なグラフィックとテキストの説明
>>: Linux コマンド クエリ アプレットでの WePY クラウド開発の実践
Windowsオペレーティングシステムでは、ポートの占有状況を照会し、ポートの占有状況をクリアするプ...
以下はcentos7での設定方法ですsystemc ソース パッケージをダウンロード: System...
【著者】 Liu Bo: Ctrip テクニカル サポート センターのシニア データベース マネージ...
これまでのブログ投稿では、HTML 5 ではあまり使われていないが注目すべき API やヒントに焦点...
1. 準備1.1 Pythonインストールパッケージをダウンロードします(注:Pythonバージョン...
目次SQL実行順序ビンログ何ですかいつ生産されるのか何の役に立つんだディスクはいつドロップされますか...
「脳が多数の領域間の関係を処理できるように、入力は論理的なグループに分割する必要があります。」 – ...
序文私は、Web サイトのフロントエンド パフォーマンス最適化のための JavaScript と C...
ユーザーが登録すると、ラベルをクリックして確認コードを変更します。クリックするとラベルに影の部分がで...
序文この友人がどれくらいDockerを使っていなかったのかは分かりませんが、突然Dockerコマンド...
MySQL ログイン パスワードを忘れた場合、解決方法は実はとても簡単です。MySQL メイン構成フ...
404 を避けるべきだとどうして言えるのでしょうか? その理由は、ほとんどの 404 ページが粗雑す...
作業開発プロセス中に、顧客の名前、携帯電話番号、ID カード、およびドキュメントの種類を動的に保存す...
1. Dockerサーバーへのリモートアクセスを有効にするdocker が配置されているリモート サ...
Vue の紹介現在のビッグフロントエンドの時代は、混乱と衝突の時代です。世界は多くの派閥に分かれてお...