亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 2744 | 回復(fù): 0
打印 上一主題 下一主題

Flex Structure [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2010-01-29 11:31 |只看該作者 |倒序?yàn)g覽
前言
這兩天寫了一個(gè)研究Flex
+ Java的例子,供大家參考,這個(gè)例子主要是出于以下幾點(diǎn)考慮的
1.
系統(tǒng)性能和系統(tǒng)可維護(hù)性上的平衡(Value Object lazy load)
2.
開發(fā)效率和代碼可讀性上的平衡(Command and CommandManager)
3.
如何讓Flex調(diào)用服務(wù)端的Service(AMF3,
Remote Object)
4.
使用Cache Framework提升我們的性能

花絮:其實(shí)做項(xiàng)目和生活,管理等等都是一樣,做到最好是不太現(xiàn)實(shí)的,但要和諧,什么叫和諧?就是在成本,進(jìn)度,質(zhì)量等外在壓力下把代碼寫得最好!所以我下面的例子代碼也是一樣,追求的是一個(gè)平衡J

一.  
系統(tǒng)性能和系統(tǒng)可維護(hù)性上的平衡(Value Object lazy
load)


最佳性能時(shí),系統(tǒng)只在網(wǎng)絡(luò)上傳輸必要的數(shù)據(jù),如顯示用戶清單時(shí)只傳輸user name和department name。
而結(jié)構(gòu)最優(yōu)時(shí),傳輸?shù)膮s是規(guī)范的數(shù)據(jù)結(jié)構(gòu)。

這個(gè)時(shí)候矛盾來了
A.     
傳輸規(guī)范的數(shù)據(jù)結(jié)構(gòu)。這時(shí)候必然會(huì)帶上一些冗余數(shù)據(jù),如顯示用戶清單時(shí)傳輸?shù)腢serVO,而UserVO里同時(shí)也包含了標(biāo)志這個(gè)用戶部門的DepartmentVO,這時(shí)就會(huì)帶來不必要的數(shù)據(jù)傳輸,如果顯示的用戶清單有100條,那么這100個(gè)UserVO里面的DepartmentVO必然會(huì)帶來不小的數(shù)據(jù)冗余。
B.     
只在網(wǎng)絡(luò)上傳輸必要的數(shù)據(jù)。這時(shí)有兩種方法可以做到,設(shè)計(jì)一個(gè)UserListVO,里面包含user name和department name這兩樣field,然后在Business
Logic里組裝這個(gè)UserListVO。但這種方法顯然有個(gè)大的缺點(diǎn),這個(gè)VO或?qū)?yīng)的業(yè)務(wù)邏輯代碼不可以共用,因?yàn)椴煌牡胤綍?huì)有不同的業(yè)務(wù)需求,比如有一個(gè)模塊中會(huì)要顯示用戶的年齡。另一個(gè)方法就是,使用規(guī)范的數(shù)據(jù)結(jié)構(gòu),但只為這些數(shù)據(jù)結(jié)構(gòu)中必要的欄位設(shè)值,如上面所說的,可以只為userVO.departmentVO.name設(shè)值,但其它欄位保持null,顯然,這個(gè)VO的共用性也不好,因?yàn)槲覜]法知道這個(gè)VO里面的欄位是否已經(jīng)被設(shè)值了。

綜上所說,所以我取上面兩種方法的一個(gè)中間點(diǎn)來解決這個(gè)問題(如下圖),即使用完整的數(shù)據(jù)結(jié)構(gòu)來存儲(chǔ)數(shù)據(jù),但不是必要的數(shù)據(jù)不會(huì)被加載上來,如果要用時(shí),可以通過Lazy Load的方式加載。如UserVO里有DepartmentVO,但在顯示清單時(shí)不需要user對(duì)應(yīng)的department信息,在編輯時(shí)才需要,所以我們可以在popup出用戶編輯窗口的時(shí)候才在UserVO的getDepartmentVO()方法中加載相應(yīng)的DepartmentVO。

請(qǐng)參見附件中的class diagram for data model

二.   
開發(fā)效率和代碼可讀性上的平衡(Command and
CommandManager)


往往在開發(fā)的時(shí)候,標(biāo)準(zhǔn)的結(jié)構(gòu)會(huì)多寫很多代碼,雖然結(jié)構(gòu)很清晰,但老實(shí)說,對(duì)于我們的項(xiàng)目,好像不需要這樣“清晰”,比如Cairngorm中有command, event, controller等等,這確實(shí)是一種清晰的結(jié)構(gòu),但寫起來很麻煩,所以我下面設(shè)計(jì)了一種簡(jiǎn)化的結(jié)構(gòu)來實(shí)現(xiàn)它(如下圖)。

Class Diagram
請(qǐng)參見附件中的class diagram for command

Sequence Diagram
請(qǐng)參見附件中的sequence diagram for command pattern


關(guān)于Command
Pattern,請(qǐng)參考以下的鏈接
http://www.javaworld.com/javaworld/jw-06-2002/jw-0628-designpatterns.html

這里,CommandManager就是那個(gè)Invoker。而com.novem.farc.command.UserSaveCommand.datagrid就是那個(gè)receiver。


Why not
Cairngorm Event or Command?


我們以查找一個(gè)user為例,來看看Cairngorm是怎么調(diào)用一個(gè)Command并返回結(jié)果的。
1.
創(chuàng)建一個(gè)CairngormEvent,并在這個(gè)Event里要有一個(gè)userId:Number的field。
2.
創(chuàng)建一個(gè)Command,這個(gè)Command要實(shí)現(xiàn)兩個(gè)接口,ICommand和IResponder。
3.
創(chuàng)建一個(gè)FrontController來建立Event和Command的關(guān)連。

然后,在客戶端調(diào)用的時(shí)候,書寫如下的代碼:
var event: EventFindUser = new EventFindUser
();
event.userId = userVO.id;
CairngormEventDispatcher.getInstance().dispatchEvent(
event );

我們現(xiàn)在新的結(jié)構(gòu)是這樣實(shí)現(xiàn)的:
var command:CommandFindUser = new
CommandFindUser();
command.userId = userVO.id;
NovemCommandManager.execute(command);

可以看出來,Cairngorm通過注冊(cè)Event,并通過Event來傳遞輸入?yún)?shù),而我們自己的結(jié)構(gòu)是將參數(shù)直接傳遞給Command,所以Cairngorm并沒有給我們提供特別的方便,反而增加了不少麻煩的Event,而它提供的這種解耦,也并不實(shí)在。


Why not
Cairngorm Model Locator?


Cairngorm Model Locator提供的其實(shí)是一種靜態(tài)全局變量。
那么,誰都可以來改變這個(gè)Model
Locator中的值,這顯然是一個(gè)很危險(xiǎn)的事。
如果大家也和我一樣認(rèn)為Cairngorm
Model Locator就是一種靜態(tài)全局變量的話,我想我在這里不用說得太多,只要去查一下靜態(tài)全局變量的好處壞處就可以了。


三.  
如何讓Flex調(diào)用服務(wù)端的Service(AMF3, Remote Object)

暫且假定,我們的項(xiàng)目使用的Remote
Object方式去訪問服務(wù)端

Why
not Cairngorm Delegate?


老規(guī)矩,我們先來看看Cairngorm是怎么來調(diào)用服務(wù)端的
1.
在service.xml里添加配置項(xiàng)
2.
創(chuàng)建Delegate.as,并為RemoteObject添加對(duì)應(yīng)的方法(這里需要為每個(gè)服務(wù)端對(duì)象都創(chuàng)建對(duì)應(yīng)的Delegate和方法,工作量不但不小,而且很煩哦)

再來看看我們的寫法吧:
1.在ServiceFactory里添加需要調(diào)用的Service和method的名字常量
2.調(diào)用方法
ServiceFactory.getService(ServiceFactory.USER_BIZ)
.callService(ServiceFactory.USER_BIZ_INSERT,
[newVO], this.result);

四.  
使用Cache Framework提升我們的性能

有空再做哦……

但主要的思路是使用第三方的Cache工具在業(yè)務(wù)層做Cache
               
               
               

本文來自ChinaUnix博客,如果查看原文請(qǐng)點(diǎn):http://blog.chinaunix.net/u/21344/showart_2163901.html
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP