[問題] MVC程式架構

看板java作者 (老子我最神)時間12年前 (2013/09/01 19:00), 編輯推噓6(604)
留言10則, 6人參與, 最新討論串1/6 (看更多)
大家好,因為這幾年遇過幾個web專案,有幾個問題想起教大家 當然,我知道什麼是MVC,我也會用spring,也可能是我只懂皮毛,所以才會有以下問題 我會先分析專案所使用的程式架構,並嘗試說明使用每個元件(如Dao)的原因 最後問一些問題,當中如果有錯請指正,謝謝 首先資料是存在Database或是檔案裡面,為了方便(或是抽象),我們將結構化 的資料一對一對稱到Java Bean,通常被稱為是Entity,例如 資料庫欄位跟值如下 id | name | age | ---------------------------- 5566 | google | 10 | ---------------------------- 會對應到以下Java Bean public class Tablex { public int id; public String google; public int age; } 為了簡化資料存取的邏輯,通常一個Entity會對應一個Dao class 例如要select資料只需要下列語法大概就能使用 tablexDao.selectByPK(5566); 再來是 MVC,優點不贅述 首先 view 一定是 JSP controller 是一般的 Java class model 是 view 跟 controller 來互傳的 Java Bean 以 Struts2 來舉例好了,Controller 是 Action class, 也就是說在Action 我們必須做一連串的動作來完成事情, 舉一個例子,我要從tablex檢查特定id資料有無資料 Action 可以寫成如下: public class testPageAction { TablexDao tablexDao; testPageFormBean formBean; ... ... ... //假設Dao跟FormBean都設定完傳好值開始跑 public void run() { int pk = formBean.getId(); Collection resultSet = TablexDao.selectByPK(pk); if (resultSet.isEmpty()) { Page.forward("fail"); } else { Page.forward("success"); } } ... ... ... } 對我而言,Action class 只是一個 workflow, 一連串的行為都必須到對應的Action 完成,當然為了 clean code 我們可以 設定一些 private method 來避免程式碼重複等問題 有人可能會多寫一個Function,例如 private boolean doSomething(int id) { ... ... return false; } 然後再 run 裡面呼叫 public void run() { ... ... x = doSomething(4); y = doSomething2(1,x); if(x || y) Page.forward("success"); Page.forward("fail"); } 以上,是我所認識的 MVC 架構 問題來了,我待過的每一個Web專案理,都會在Action 跟 Dao 中間夾帶一層 Service 或是 manager... 而規定幾乎是 "一個Action對應一個manager" 而 manager 所做的事,就像是把Action 的 private method 移到 manager 變成 public method ... 我完全找不到理由可以說明為啥要特地開一個 manager, manager的工作事項模糊不清 一個寫在 manager 的 public method 完全可以改到自身 Action class 的 private method 而實際情況是,在寫method時,有些程式設計師會寫到 Action ,有些會寫到 Manager 這完全沒有意義,假設有 10 個 method,兩位程式設計師可能寫完全不一樣 例如 程式設計師A: 1,2,4,5,6 寫到 Action, 3,7,8,9,10寫到 Manager 程式設計師B: 2,6,7,5,8,10 寫到Action, 1,3,4,9寫到 Manager 我所遇到的專案就是如此,有沒有人能夠解釋 Service 或 Manager 的必要,以及它們 真正存在的意義在哪裡? 苦惱很久了 謝謝大家看完 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.193.205.223

09/02 08:12, , 1F
看完之後覺得MVC大方向沒錯,只是C怎麼寫而已
09/02 08:12, 1F

09/02 13:37, , 2F
樓上已經變成板標了... ^_^
09/02 13:37, 2F

09/02 13:48, , 3F
對喔~超好笑的啦~應該要水桶阿~這裡是JAVA版不是C版~XDDDD
09/02 13:48, 3F

09/02 13:53, , 4F
XDDD 我自己去水桶裡面等...
09/02 13:53, 4F

09/02 18:29, , 5F
我是dfd,不是ddd拉
09/02 18:29, 5F

09/03 02:59, , 6F
以前的經驗,Service或Manager會做transaction control
09/03 02:59, 6F

09/03 12:29, , 7F
推樓上.. 那是和那個案子的架構的transaction控制有關...
09/03 12:29, 7F

09/03 12:31, , 8F
你可以把transaction都改成手動控制..然後在幹掉這層XDD
09/03 12:31, 8F

09/03 16:40, , 9F
我怎麼記得是多個Action對應一個manager,magnager在web
09/03 16:40, 9F

09/03 16:42, , 10F
專案中只會有一個,所有的Action都會去問Manager
09/03 16:42, 10F
文章代碼(AID): #1I8nutgg (java)
討論串 (同標題文章)
文章代碼(AID): #1I8nutgg (java)