在現(xiàn)在的軟件業(yè)界,我認為很大的問題是開發(fā)人員甚至是公司從來都沒有真正的把用戶當成上帝,當然,這和目前業(yè)界的項目有很大的關(guān)系,例如項目通常都是時間非常的緊張,N多開發(fā)人員投入只能盡量去保證功能、需求的實現(xiàn),在界面以及交互上往往不是那么的重視,但其實業(yè)界很多成功的產(chǎn)品都證明,功能往往不是決定性的因素,界面和交互才是用戶最為重視的,而且通常也是打敗對手的重要地方,為什么項目中不在重視功能的同時去重視界面和交互呢,大都是因為現(xiàn)在的框架在界面和交互變化的支撐上都不是很好,導(dǎo)致了每次界面的改動都要花費很大的成本,而交互上則一方面是現(xiàn)在交互設(shè)計師急為的缺少,另一方面是還沒引起企業(yè)足夠的重視,所以其實我覺得在web應(yīng)用開發(fā)框架上最大的目標就是為“把用戶當上帝”提供足夠的支持。
遵循“把用戶當上帝,重界面和交互”的原則,本文從愿景角度闡述對于Web應(yīng)用開發(fā)框架的期望,同時從框架角度的基礎(chǔ)設(shè)施以及非功能性需求上對整個Web應(yīng)用開發(fā)框架給予說明,最后簡要的說說在架構(gòu)層次的關(guān)注點以及可選擇的技術(shù)體系。
1. 愿景?
?? ★ Html的純潔性?
???? 這點就是體現(xiàn)“把用戶當上帝,重界面和交互”的原則,在保證了Html的純潔性的情況下,就可以在功能和頁面交互未改變的情況下無需編碼直接使用UI Design形成的html,形象的一個例子就是可以在用戶僅僅需要改變頁面的顯示樣式、布局的情況下,只需要直接讓UI工程師設(shè)計然后切割形成html放到系統(tǒng)中就可以直接用了,^_^
?? ★ 無編碼的實現(xiàn)CRUD型的應(yīng)用
??? 可以直接通過簡單的配置生成CRUD形式的應(yīng)用,這點還是從一個快速開發(fā)的角度來考慮的。
2. 基礎(chǔ)設(shè)施?
? 基礎(chǔ)設(shè)施是框架的重要組成部分,作為框架就需要提供一定程度的基礎(chǔ)設(shè)施。
? 從愿景角度去看,Web應(yīng)用開發(fā)框架應(yīng)提供可綁定數(shù)據(jù)源的Web控件、對綁定的數(shù)據(jù)的操作的支持、頁面元素交互行為的支持、IDE/Web管理端。
? 首先說下幾個概念,數(shù)據(jù)源是指持久化性質(zhì)的源,如數(shù)據(jù)庫、文件;頁面元素大可以是頁面,小則可以到頁面上的任意域,如文本框;交互則是指用戶與界面產(chǎn)生的互動。
? ★ 提供基礎(chǔ)的可綁定數(shù)據(jù)源web控件?
????? 在這點上至少要提供樹控件、豐富的表格控件、Tab頁控件以及菜單控件,這些控件綁定的數(shù)據(jù)源既可是文件、也可以是jdbc形式的數(shù)據(jù)源、同樣還可以是ORM形式的數(shù)據(jù)源。???
? ★ 提供對綁定的數(shù)據(jù)源的操作的支持
????? 提供對綁定的數(shù)據(jù)源的通用操作的支持,減少重復(fù)勞動,如支持新增、編輯、刪除、分頁、查詢、統(tǒng)計分析、數(shù)據(jù)校驗以及數(shù)據(jù)實例的權(quán)限控制。?
? ★ 提供基礎(chǔ)的頁面元素交互行為的實現(xiàn)?
????? 提供對頁面元素交互行為的支持,如下拉時需要下拉出綁定了數(shù)據(jù)源的web控件等等,根據(jù)之上定義的一個觀點,元素可大至一個頁面,小至一個文本框,也就是說可以隨意定義頁面中的交互行為,在交互行為上至少支持下拉、彈出、鏈接以及Continuation四種形式。??
?? ★ 提供IDE/Web管理端?
???? IDE/Web管理端的提供主要是為了提高框架的可用性,通過管理端可導(dǎo)入一個html,對html中元素進行動態(tài)元素的綁定設(shè)置以及交互定義的設(shè)置。
? 在提供了這些基礎(chǔ)設(shè)施后就可以通過這套框架的快速的將UI Design產(chǎn)生html轉(zhuǎn)化為具備一定功能的系統(tǒng)運行界面,并且不對HTML產(chǎn)生任何的污染。
3. 非功能需求?
? 作為框架而言,非功能需求也是非常重要的部分,尤其是象框架的擴展性、開放性、智能性、穩(wěn)定性以及高效性方面。
? ★ 擴展性?
??? 在擴展性上采用插件以及擴展點兩種策略來提供足夠的支撐,插件為框架的基礎(chǔ)設(shè)施的擴充提供支撐,擴展點為基礎(chǔ)設(shè)施本身的擴展以及靈活提供支撐。
? ★ 開放性
???? 在系統(tǒng)的開放性上一方面采取提供AOP的機制,使得對于系統(tǒng)的流程過程可控。
???? 另一方面由于元數(shù)據(jù)表達往往容易造成信息不完整的情況,在擴展性上特別要保證系統(tǒng)各層次的可替換性,這樣即使在框架無法支撐的應(yīng)用中也是可以在使用框架的基礎(chǔ)設(shè)施的同時自主開發(fā)部分的功能。
? ★ 智能性?
??? 智能性主要在元數(shù)據(jù)的智能性上以及框架擁有學(xué)習(xí)和記憶的功能上。智能性已經(jīng)逐步的成為了框架的重要考評點,越智能的框架用起來必然也就最為方便,而擁有學(xué)習(xí)和記憶能力的框架就更強了,^_^
? ★ 穩(wěn)定性?
??? 在穩(wěn)定性上采用微核機制來提供保證,在插件崩潰的情況下仍然保證系統(tǒng)核心的穩(wěn)定運行。?
? ★ 高效性?
??? 高效性方面主要采用緩存機制加以實現(xiàn),同時需要考慮框架在可伸縮性方面的支持。?
4. 架構(gòu)關(guān)注點?
? 根據(jù)框架的基礎(chǔ)設(shè)施以及非功能需求的簡單描述,在框架的架構(gòu)層次最需要解決的是這么一些問題:
? ★ 微核機制?
???? 微核機制在目前已經(jīng)有N多的方案,在目前考察的情況下決定采用eclipse的equinox。
? ★ 插件策略
???? 在采用equinox的情況下這個問題自然解決。?
? ★ 擴展點策略?
???? 在采用equinox的情況下這個問題自然解決,只是在設(shè)計時也仔細的考慮基礎(chǔ)設(shè)施的擴展點的定義。?
? ★ 元數(shù)據(jù)的定義
???? 元數(shù)據(jù)的定義需要圍繞基礎(chǔ)設(shè)施而進行,同時重點在于保持元數(shù)據(jù)的可擴充性,另外在系統(tǒng)的層次的開放上也需要定義到元數(shù)據(jù)級別,也就是說假設(shè)現(xiàn)在系統(tǒng)的層次為command--service,那么開發(fā)人員可以選擇在某個模塊中替換command或者service的實現(xiàn)。?
? ★ 緩存機制策略?
???? 緩存機制著眼于前端的頁面緩存、后端的處理緩存和數(shù)據(jù)緩存。
? ★ Html無污染實現(xiàn)策略?
???? Html無污染的實現(xiàn)策略采用Decorator Html的方式,采用xml描述html中元素的方式,引擎解析形成最后的頁面的形式。
? ★ 控件綁定數(shù)據(jù)源的策略?
???? 控件在綁定數(shù)據(jù)源上著眼于提供對于數(shù)據(jù)獲取形式的支持,文件形式、jdbc形式、orm形式等等,另外則是在控件對于數(shù)據(jù)源的展現(xiàn)以及控件本身的交互控制上,同時要特別注意控件的擴展性以及開放性。
? ★ 數(shù)據(jù)源操作統(tǒng)一實現(xiàn)的策略
???? 形成統(tǒng)一實現(xiàn)的策略,同樣的需要考慮擴展性和開放性。?
? ★ 交互行為實現(xiàn)的策略?
???? 在下拉、彈出、鏈接以及Continuation的實現(xiàn)上考慮采用適當?shù)牟呗裕瑯拥囊攸c考慮擴展性以及開放性。
這個框架有人感興趣嗎?如有志同道合的人的話準備拉起隊伍,^_^