JWorld@TW the best professional Java site in Taiwan
      註冊 | 登入 | 全文檢索 | 排行榜  

» JWorld@TW » Software Design  

按列印兼容模式列印這個話題 列印話題    把這個話題寄給朋友 寄給朋友    訂閱主題
reply to topicthreaded modego to previous topicgo to next topic
本主題所含的標籤
無標籤
作者 請問大家一個design問題....
tanym





發文: 54
積分: 0
於 2005-03-15 18:05 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
大家好, .請教大家一個設計問題, 如果我有一個state machine, 每個state之間會因某種action而造成state的轉移, 有點像簡單的workflow, 一個action驅動目前state轉換到下個state, 我的問題是哪一種設計方式比較好, 利弊各是什麼, 如果大家有其他idea更好, ^^

1) 每個state知道自己有哪些action, 每個action知道自己的下個state

State current = new State(...);
Action action = state.getActions(index);
State next = action.getNextState();
current = next;

2) 有一個StateManager知道所有的state diagram, 各state class之間根本不知道自己有哪些action, 每個action也不知道自己的下個state是誰, 完全由StateManager來完成state轉移動作

StateManager stateMgr = new StateManager(...);
State current = stateMgr.getCurrentState();
Action action = stateMgr.getAction(current,index);
stateMgr.performStateTransition(action);
current = stateMgr.getCurrentState();

ps: 不知大家有迷有懂偶***意思....小***筆拙....如有不清楚....還請大家指教...謝謝..


reply to postreply to post
有交流才有進步, 不該把自己埋在象牙塔內
作者 Re:請問大家一個design問題.... [Re:tanym]
tanym





發文: 54
積分: 0
於 2005-03-15 18:12 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
附註我的意見

方法1)
好處: 設計直覺, 該有的information都有, 每個class(不管是state, action)都知道自己該知道的事, 不多也不少
壞處: state跟action的互相dependence高

方法2)
好處: state跟action之間的dependence沒有
壞處: manager class負責所有的事情

備註, 我是被mediator pattern和state pattern搞的不知哪一種好, 有人會說用state pattern比較好阿, 我也不知道, 還請各位指教一下...^^


reply to postreply to post
有交流才有進步, 不該把自己埋在象牙塔內
作者 Re:請問大家一個design問題.... [Re:tanym]
Kirin_Lin





發文: 130
積分: 0
於 2005-03-15 18:15 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
有manager 應該不是太壞的事情... 我在Eclipse裡面看到很類似這樣的設計.

reply to postreply to post
http://kirin-lin.idv.tw/
Eclipse, WordPress.
Java, PHP.
作者 Re:請問大家一個design問題.... [Re:tanym]
tanym





發文: 54
積分: 0
於 2005-03-18 09:39 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
沒人對這有心得或意見阿.....嗚嗚嗚....可能是這問題太蠢了吧......

reply to postreply to post
有交流才有進步, 不該把自己埋在象牙塔內
作者 Re:請問大家一個design問題.... [Re:tanym]
koji

秒速5センチメートル

站長

發文: 8415
積分: 19
於 2005-03-18 10:21 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
好吧既然都沒人出來,我出來露露臉..
Design方面還不算上手..加減一起討論Smile
我比較好奇是你第二個設計方法,
你的state跟action真的切的乾淨嗎?

因為如果state跟action要獨立,那麼應該就是有可能action會被不同state使用.
那你的action實行結果會不會影響下一個state?
或者需要取得現在的state狀態.

那感覺上state跟action好像還是有關係吧!?

koji


koji edited on 2005-03-18 10:29
reply to postreply to post
JCConf Taiwan 2015 開始售票了!!
Facebook上的TWJUG社團,歡迎加入
作者 Re:請問大家一個design問題.... [Re:koji]
tanym





發文: 54
積分: 0
於 2005-03-18 10:49 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
關於這問題是這樣的....
實際上action執行結果會傳回一個result class, 然後根據result去dispatch到應該的state, 實際design是比我提出的問題複雜一丁點(也沒有很多啦)而且這都還是未知數, 重點是可以把她們切的很乾淨, 也可以不用切(就是第一種和第二種), 我有想到很多好處及壞處, 例如當有很多instance時候要如何管理讓performance不會down下來, 兩種方法對performance有不一樣的處理方式(也許我搞錯了...^^||Sleepy

第一種方法, state跟action的關係他們彼此間都知道有哪些關係存在, 所以應該還ok
第二種方法, 由於state跟action不知道彼此關係, 所以必須由stateManager去維護這種關係, manager知道每個state有哪些action, 每個action會轉到哪一個state, 基本上action instance不會被不同state使用(這算回答你的問題嗎..^^||Sleepy, 如果有兩個action功能是一樣的但會被不同state使用, 我覺得要兩個action instance. 目前想法是醬

請大家指教, 只要有想法不管對或不對都歡迎討論, 畢竟設計沒有對錯問題, 必須看需求而定, 我目前是沒有說一定要弄成怎樣怎樣的或一定要implement出來, 只是提出大家討論, 各位可以針對不同需求, 提出自己看法阿.....^^
歡迎喔........


reply to postreply to post
有交流才有進步, 不該把自己埋在象牙塔內
作者 Re:請問大家一個design問題.... [Re:tanym]
koji

秒速5センチメートル

站長

發文: 8415
積分: 19
於 2005-03-18 11:53 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
我的意思就是
其實第二種方法依照你說的
"如果有兩個action功能是一樣的但會被不同state使用, 我覺得要兩個action instance."
那麼何必將state跟action切開呢?
這個action幾乎是專屬於state的了.

如果使用這種設計方式
反而造成更多程式碼,更多管理過程
切了更多class出來.

不如直接用第一種,讓使用你寫的api使用者可以用的更輕鬆

koji


koji edited on 2005-03-18 12:00
reply to postreply to post
JCConf Taiwan 2015 開始售票了!!
Facebook上的TWJUG社團,歡迎加入
作者 Re:請問大家一個design問題.... [Re:tanym]
Kirin_Lin





發文: 130
積分: 0
於 2005-03-18 17:35 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
就如同你所說的,要看需求而定。
如果只是一個簡單的state machine,一個人怎麼用都不會有太多performance or complex 的issue,那第一種就可以。
如果scope比較大…例如要拿來做server之類的,我認為要以第二種的想法下去延伸。


reply to postreply to post
http://kirin-lin.idv.tw/
Eclipse, WordPress.
Java, PHP.
作者 Re:請問大家一個design問題.... [Re:Kirin_Lin]
tanym





發文: 54
積分: 0
於 2005-03-18 17:47 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
可不可以請教一下, 為什麼你認為scope大的時候, 以第二種比較好....

reply to postreply to post
有交流才有進步, 不該把自己埋在象牙塔內
作者 Re:請問大家一個design問題.... [Re:tanym]
Kirin_Lin





發文: 130
積分: 0
於 2005-03-22 14:12 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
scope 小的時候,state 以及action 可能就固定那麼些個,所以相互依存或許複雜度並不高,一些互相需要的資訊就直接 hard code 在 class 裡面。當 scope 一大起來就會想說那這些資訊是不是可以動態的被載入?被管理?

reply to postreply to post
http://kirin-lin.idv.tw/
Eclipse, WordPress.
Java, PHP.
» JWorld@TW »  Software Design

reply to topicthreaded modego to previous topicgo to next topic
  已讀文章
  新的文章
  被刪除的文章
Jump to the top of page

JWorld@TW 本站商標資訊

Powered by Powerful JuteForum® Version Jute 1.5.8