java 板


LINE

想了解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







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Tech_Job站内搜寻

TOP