Re: [問題] MVC程式架構
想了解MVC架構, 很簡單啊
與其在這邊聽著大家如同玄學 嘴砲般的打高空
(我不是說回文的板友在嘴砲,
而是板友們的解釋對於沒經驗的開發者來說真的沒什麼意思)
倒不如挑一個簡單的題目, 例如小blog, 或留言板, xx地圖(把資訊放地圖上的)
然後花一段時間用各種framework去實作它
例如Spring MVC, GWT, Vaadin, Grails, Play
全部玩下來大概可能4, 5個月吧
但是你會發現你對Java web framework以及所謂的MVC已經爐火純青了....
※ 引述《cyclone350 (老子我最神)》之銘言:
: 大家好,因為這幾年遇過幾個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: 36.224.221.207
推
09/02 23:33, , 1F
09/02 23:33, 1F
討論串 (同標題文章)
本文引述了以下文章的的內容:
問題
6
10
以下文章回應了本文:
問題
1
5
完整討論串 (本文為第 5 之 6 篇):
問題
1
5
問題
1
1
問題
1
5
問題
1
6
問題
1
7
問題
6
10