锁定老帖子 主题:编程中一个很常见的问题,有帮助的
精华帖 (1) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (17)
|
|
---|---|
作者 | 正文 |
发表时间:2008-12-12
frogfool 写道 能否给个应用场景?否则就是完全无意义的讨论。
这是需要根据应用需求决定方法划分的粒度问题,而且LZ给的例子也有误导性。 “第一个”testX()都缺少自己的logicCode 第一个 public void test1() throws E2,E3,E4,E5,E6{ test2(); logicCode1(); } 第二个 public void test1() throws E2,E3,E4,E5,E6{ logicCode1(); } 问题不在于test()该怎么调用下层方法, 而在于test1()是否要包含调用test2()?! test1是否要被其他上层代码调用 为什么楼主不回答frogfoo1的问题呢? |
|
返回顶楼 | |
发表时间:2008-12-12
这个还是要看具体的业务
第一种利于分层,如传统的ssh层次: action-->service-->dao |
|
返回顶楼 | |
发表时间:2008-12-12
我也来回答一下,我看了之后好像想起点什么??....如果把第一中的五个text分别放在五个类中,不第二中的五个方法放在一个类中,
第一种不是分层吗?? 第二中不是pojo类吗??? 好像讨论两种架构的问题啊, 呵呵随便说说, |
|
返回顶楼 | |
发表时间:2008-12-12
fhjxp 写道 frogfool 写道 能否给个应用场景?否则就是完全无意义的讨论。
这是需要根据应用需求决定方法划分的粒度问题,而且LZ给的例子也有误导性。 “第一个”testX()都缺少自己的logicCode 第一个 public void test1() throws E2,E3,E4,E5,E6{ test2(); logicCode1(); } 第二个 public void test1() throws E2,E3,E4,E5,E6{ logicCode1(); } 问题不在于test()该怎么调用下层方法, 而在于test1()是否要包含调用test2()?! test1是否要被其他上层代码调用 为什么楼主不回答frogfoo1的问题呢? 已经给出一个背景了,就是 根据用户输入--》组装SQL-》执行数据库操作-》返回结果(解析结果) |
|
返回顶楼 | |
发表时间:2008-12-12
个人觉得还是di4二种比较好,比如说我们使用DAO层的目的不就是为了使每个DAO只是针对某一个pojo类的接口,这样在service层再根据自己的需要来进行相关逻辑的组织。我们可以这样来看待楼主列举的例子,test1到test4每一个是一个DAO接口,而TEST方法是service层的一个接口这样不就是在service层中来调用的不同的DAO来实现自己的逻辑吗,如果是第一种方法不就是让每个DAO之间进行了耦合吗这也不符合MVC分层实现的目的啊。个人看法。
|
|
返回顶楼 | |
发表时间:2008-12-12
难道就是想说策略模式的多用组合少用继承这个原则?
|
|
返回顶楼 | |
发表时间:2008-12-12
我想说lz的问题很无聊,而且还有点自大,没有最好的模式,只有最好的架构,任何技术的出现都是要解决实际的业务问题,你冠冕堂皇问的这个问题,实在是......
|
|
返回顶楼 | |
发表时间:2008-12-12
补充一下
按照你这简单的逻辑 “A调用B B调用C C调用D 还是由A同一去调用B C D的问题。” 第一 ,方法之间的调用方式 不是一个简单的技术问题,跟架构有关,跟代码覆盖率有关,跟业务需求有关,跟代码的易变性有关,也跟代码通用度有关..... 第二 ,你什么时候(需求,设计,编码,重构?),如何保证 A调用B B调用C C调用D 跟 A同一去调用B C D 时参数的稳定性(即BCD参数 不变) 第三 ,本事我想回帖,但看到你好像对二楼的回帖中包含 "小菜"之类的字眼 所以忍不住回帖,不排除打抱不平的心理,或许 第三条才是第一条 |
|
返回顶楼 | |
发表时间:2008-12-12
v861 写道 补充一下
第三 ,本事我想回帖,但看到你好像对二楼的回帖中包含 "小菜"之类的字眼 所以忍不住回帖,不排除打抱不平的心理,或许 第三条才是第一条 so do I |
|
返回顶楼 | |
发表时间:2008-12-12
最后修改:2008-12-12
fjlyxx 写道 已经给出一个背景了,就是 根据用户输入--》组装SQL-》执行数据库操作-》返回结果(解析结果) 问题已经很清楚了 public Object findUser(final Map parameters) { return this.getSqlMapClientTemplate().queryForObject("findUser", parameters); // | | | // 返回结果 组装SQL并执行数据库操作 根据用户输入 } |
|
返回顶楼 | |