目前,較主流flex框架大致可分為兩大類,一類是正規軍mvc--cairngorm&puremvc,一類是自由軍mvc兼ioc--swiz、mate、parsley、spring as。
正規軍的mvc是在既定模式下運作整個流程,而這個模式的形成是以解耦為原則的職責劃分,優點自然是權責清晰,而其不足在於過於正規化使得工作量或效率被轉嫁,乙個看似小小的需求,也要動輒整個流程,使得小需求付出過多(即程式設計師編碼量過大)。
在這裡,簡單認識一下正規軍中的puremvc,認識她的一般處理流程、她的優缺點以及她可能的折中。
puremvc一般處理流程如下圖:
特點:①mediator耦合view在於解耦view與其它部分的耦合性,通過mediator直接對view資料收集與更新負責;
②mediator、command以及proxy直接通過通知解耦,並合理完成後台呼叫後反饋資料更新;
代價:①強鬆耦合加重通訊次數;②帶反饋資料的通訊加重通訊負擔;
折中:採用面向介面程式設計/依賴注入,變強松耦合為松耦合,同時可減少通訊次數;
接下來,用**陳列的方式來感性認識puremvc的一般處理流程(樣例主線:model-view-mediator-command-proxy-other command):
example
使用者與view component和mediator的互動
假如有乙個含表單的loginpanel元件。對應有乙個loginpanelmediator,負責與loginpanel互動並響應它的輸入資訊傳送登入請求。
loginpanel和loginpanelmediator之間的協作表現為:loginpanel在使用者輸入完資訊要登入時傳送乙個try_login的事件,loginpanelmediator處理這個事件,處理方法是傳送乙個以元件包含的loginvo為「報體」的notification(通知)。
loginvo.as }
loginpanel.mxml:
<?xml version="1.0" encoding="utf-8"?>loginpanel元件包含有乙個用使用者表單輸入新建立的loginvo物件,當使用者單擊「login」按鈕時觸發乙個事件,接下來的事情由loginpanelmediator接管。[event('trylogin')];
這樣view component的角色就是簡單收集資料,收集完資料通知系統。
可以完善的地方是只有當username和password都有內容時才讓login按鈕可用(enable),這樣可以避免惡意登入。
view component對外隱藏自己的內部實現,它由mediator使用的整個api包括:乙個try_login事件,乙個loginvo屬性和panel的狀態屬性。
loginpanelmediator會對login_failed和login_success通知做出反應,設定loginpanel的狀態。
loginpanelmediator.as:
// 列出該mediator關心的notification
override public function listnotificationinterests( ) : array
// 處理notification
override public function handlenotification( note:inotification ):void
} // 戶單擊用login鈕嘗試錄按,登。
private function ontrylogin ( event:event ) : void
// 把viewcomponent轉類化成它真正的型。
protected function get loginpanel() : loginpanel
} }
注意loginpanelmediator在構造方法中給loginpanel註冊了乙個偵聽方法——ontrylogin,當使用者單擊login按鈕時這個方法會被執行。在ontrylogin方法裡傳送了乙個login的notification(通知,攜帶引數loginvo物件)。
loginpanelmediator把login_success和login_failed註冊自己的關心的notification,當這兩個notification被傳送時,mediaotr作為響應把loginpanel的loginstatus設定為logged_in(登入成功時)或not_logged_in(登入失敗時),並清除loginvo物件。
logincommand.as
import org.puremvc.as3.inte***ces.*;
import org.puremvc.as3.patterns.command.*;
public class logincommand extends ******command
} }
loginproxy.as
// 隱式getter,轉化data的型別
public function get loginvo( ) : loginvo
//如果logivvo中包含了authtoken(授權標識)表示使用者登入成功
public function get loggedin():boolean
// 取得authtoken
public function get authtoken():string
//置用的限設戶權標識,登入,退出,或登繼續嘗試錄。
public login( trylogin:loginvo ) : void else
} // 退出,地清空簡單loginvo
public function logout( ) : void
//通知系登成功統錄
private function onresult( event:resultevent ) : void
//通知系登失統錄敗
private function onfault( event:faultevent) : void }
} 乙個logincommand會獲取loginproxy,設定登入的資料,呼叫登入函式,呼叫登入服務。
接下來,可能乙個getprefscommand會響應login_success(登入成功)這個notification,從notificaiton的「報體」中獲取authtoken(授權標識),接著呼叫下乙個服務,獲取使用者的(比如)配置資訊(preferences)。
getprefscommand.as
import org.puremvc.as3.inte***ces.*;
import org.puremvc.as3.patterns.command.*;
public class getprefscommand extends ******command
} }
由於此次給出的感性認識在於puremvc的處理流程,因此,關於整個流程流轉的配置略,若您有興趣或者期望更進一步了解puremvc,了解mediator、command、proxy各自的職責等,可參見附件的那份中文文件或訪問官網。
測試一般流程
目錄 一 測試準備階段 1.1 需求評審 1.2 測試計畫 1.3 測試用例 二 測試階段 2.1 開發自測 2.2 產品設計走查 2.3 測試接入測試 2.4 產品驗收階段 三 上線階段 3.1 與專案人員確認上線時間與策略 3.2 準備線上回歸的賬號,資料等 3.3 執行緊急回滾的策略 3.4開...
專案的一般流程
軟體專案一般流程可分為3大段 需求設計 編碼測試 執行除錯。一 需求設計 1.首先要做需求報告,和使用者溝通需要實現的功能,以及相關的資料和業務邏輯。然後做er圖 cdm和pdm,再做類圖,用軟體直接生成相關 專案組成員需要反覆論證邏輯是否正確,需要吵架吵架再吵架!否則以後就要麻煩。2.將前期所用 ...
TensorFlow演算法一般流程
匯入 生成要本資料集 轉換和歸一化資料 data tf.nn.batch norm with global normalization 劃分訓練集 測試集 驗證集 設定超引數,一次性初始化 初始化和佔位 定義模型結構 y pred tf.add tf.mul x input,weight matri...