作者NewSpec (新规格)
看板java
标题Re: [问题] MVC程式架构
时间Mon Sep 2 23:06:44 2013
想了解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
1F:推 cyclone350:我认为是你做完那些之後才会产生这些问题~ 09/02 23:33