论坛首页 Java企业应用论坛

在项目架构中如何进行分层才是最合理的?

浏览 48530 次
精华帖 (2) :: 良好帖 (0) :: 新手帖 (17) :: 隐藏帖 (1)
作者 正文
   发表时间:2008-09-26  
chenjianjx 写道

我的看法:

  1.如果是用hibernate,可以不用DAO

  2.的确没有必要在每个功能上都用 一个接口 + 一个类 的套子来自虐。
       a.我们做的不是框架,而是具体的应用,在service这里不需要过多考虑灵活性,DAO就更加不需要了,因为更换持久层框架的事情不太可能发生
       b.用接口+类写成的代码,看起来非常累。尤其是想看一个功能的实现时,要很费劲才能找到接口对应的实现类,然后还要在实现类中费劲地找到具体的Method

  3.其实Service层也可以考虑重用--将可重用的业务逻辑定义为XxxService,将具体的,直接对应于USE CASE的功能定义为XxxApplication -- 这就是Core J2EE Partterns中的Application Layer模式
      


1. 不同意。用接口的好处在于当你需要用另一个实现类做实现的时候,上层程序不需做更动,因为使用接口是一致的,只需替换实现类。

2. 没有接口的程序改起来才累。

以上,一点愚见。

本身所处项目做法是,一个DAO对应一个实体,并且首先定义接口,一个实现类,上层应用再通过工厂获取实例。

其实是比较麻烦.. 但从设计角度来讲,是不是好的?

大家讨论。

0 请登录后投票
   发表时间:2008-09-26  
right now 写道
csdn的毛爷爷,我想问一下,很多动态语言中没有接口的概念,请问怎么面向接口编程

他们不用接口记录需求
它们不用编译也不用强类型检查.
所以你写什么都不会有约束作用
0 请登录后投票
   发表时间:2008-09-26  
right now 写道
csdn的毛爷爷,我想问一下,很多动态语言中没有接口的概念,请问怎么面向接口编程

居然被认出.我不上csdn很久了.
interface是一个契约, 而契约是一种约束, 弱类型的动态语言, 既给了你自由, 也给了你缺陷.

楼上说的对:
他们不用接口记录需求
它们不用编译也不用强类型检查.
所以你写什么都不会有约束作用

0 请登录后投票
   发表时间:2008-09-26  
melode11 写道
godoo 写道
我做了多年的软件开发,从我的经历来讲讲我的意见,首先,看看你所说的采用接口的缺点吧
1. 创建的文件数量太多--你做的项目多大,占用了多少开发工作量?请统计一下自己的工作内容和时间,从我的经验看,这个问题几乎可以忽略
2. 增加了开发人员的工作量--同问题1,如果采用自动生成接口文件,那工作量就更少到忽略了
3. 增加了后期维护的复杂性--本质同1
4. 程序调试不方便--有一定道理,但我的情况来看,也不困难;还有些插件可以帮助找到接口的具体实现

优点说个体会最深的
1. 如果你自己写测试(特别是如果你是TDD爱好者),你会体验到接口的威力
2. 接口的确会使你的应用灵活很多;DAO改变实现很少,不管是换DB,还是换框架或实现,业务层换具体实现也不太多,但你测试时会方便很多(这个所有都适用);
其他优点还有不少,可以参考如敏捷软件开发之类的书籍

测试我写的不多,不过我想写测试要替换一个伪DAO的话,使用匿名内部类也能实现这个目的。

用接口最不方便的地方不是要多些这些接口文件,是本来如Eclipse这种IDE可以用Ctrl+点源码,从Service中写的DAO类名直接找到DAO类,用了接口,就必须得自己手工打开这些实现类。
要有修改,也必须得两个文件一起改,真是不胜其烦,感觉这种直接提取所有方法组成Interface的做法,是对Interface功用的扭曲。

Eclipse中早就有插件,可以直接跳转到接口的实现类。

接口定义好后需要不停地修改吗?如果需要,那是设计有问题,没有谁隔三叉五地去修改接口的参数。

另外,个人觉得还是没有必要一个service一个dao,dao是为service服务的,一个service可以调用多个dao,一个dao也可以为多个service服务,到底一个service要多少dao,这要看dao设计的粒度。
0 请登录后投票
   发表时间:2008-09-26  
tibetjungle 写道
melode11 写道
godoo 写道
我做了多年的软件开发,从我的经历来讲讲我的意见,首先,看看你所说的采用接口的缺点吧
1. 创建的文件数量太多--你做的项目多大,占用了多少开发工作量?请统计一下自己的工作内容和时间,从我的经验看,这个问题几乎可以忽略
2. 增加了开发人员的工作量--同问题1,如果采用自动生成接口文件,那工作量就更少到忽略了
3. 增加了后期维护的复杂性--本质同1
4. 程序调试不方便--有一定道理,但我的情况来看,也不困难;还有些插件可以帮助找到接口的具体实现

优点说个体会最深的
1. 如果你自己写测试(特别是如果你是TDD爱好者),你会体验到接口的威力
2. 接口的确会使你的应用灵活很多;DAO改变实现很少,不管是换DB,还是换框架或实现,业务层换具体实现也不太多,但你测试时会方便很多(这个所有都适用);
其他优点还有不少,可以参考如敏捷软件开发之类的书籍

测试我写的不多,不过我想写测试要替换一个伪DAO的话,使用匿名内部类也能实现这个目的。

用接口最不方便的地方不是要多些这些接口文件,是本来如Eclipse这种IDE可以用Ctrl+点源码,从Service中写的DAO类名直接找到DAO类,用了接口,就必须得自己手工打开这些实现类。
要有修改,也必须得两个文件一起改,真是不胜其烦,感觉这种直接提取所有方法组成Interface的做法,是对Interface功用的扭曲。

Eclipse中早就有插件,可以直接跳转到接口的实现类。

接口定义好后需要不停地修改吗?如果需要,那是设计有问题,没有谁隔三叉五地去修改接口的参数。

另外,个人觉得还是没有必要一个service一个dao,dao是为service服务的,一个service可以调用多个dao,一个dao也可以为多个service服务,到底一个service要多少dao,这要看dao设计的粒度。


有些道理,
這個貼應該長久討論。
0 请登录后投票
   发表时间:2008-09-26  
强烈建议大家读一下《iBATIS in Action》,自然找到答案!
0 请登录后投票
   发表时间:2008-09-26  
ltian 写道
right now 写道
csdn的毛爷爷,我想问一下,很多动态语言中没有接口的概念,请问怎么面向接口编程


此接口非彼接口。
面向对象中方法论中的面向接口编程并不是说语言要有专门的“接口”定义支持。面向接口编程里面的接口是广义的,
虚基类可以充当“接口”,甚至约定好的不做任何实现的暴露公开方法的基类都可以作为“接口”。


colbol的接口是一个字串的第几位到第几位,表示 用户名 从第几位到第几位 是 时间...
0 请登录后投票
   发表时间:2008-09-26  
tibetjungle 写道
melode11 写道
godoo 写道
我做了多年的软件开发,从我的经历来讲讲我的意见,首先,看看你所说的采用接口的缺点吧
1. 创建的文件数量太多--你做的项目多大,占用了多少开发工作量?请统计一下自己的工作内容和时间,从我的经验看,这个问题几乎可以忽略
2. 增加了开发人员的工作量--同问题1,如果采用自动生成接口文件,那工作量就更少到忽略了
3. 增加了后期维护的复杂性--本质同1
4. 程序调试不方便--有一定道理,但我的情况来看,也不困难;还有些插件可以帮助找到接口的具体实现

优点说个体会最深的
1. 如果你自己写测试(特别是如果你是TDD爱好者),你会体验到接口的威力
2. 接口的确会使你的应用灵活很多;DAO改变实现很少,不管是换DB,还是换框架或实现,业务层换具体实现也不太多,但你测试时会方便很多(这个所有都适用);
其他优点还有不少,可以参考如敏捷软件开发之类的书籍

测试我写的不多,不过我想写测试要替换一个伪DAO的话,使用匿名内部类也能实现这个目的。

用接口最不方便的地方不是要多些这些接口文件,是本来如Eclipse这种IDE可以用Ctrl+点源码,从Service中写的DAO类名直接找到DAO类,用了接口,就必须得自己手工打开这些实现类。
要有修改,也必须得两个文件一起改,真是不胜其烦,感觉这种直接提取所有方法组成Interface的做法,是对Interface功用的扭曲。

Eclipse中早就有插件,可以直接跳转到接口的实现类。

接口定义好后需要不停地修改吗?如果需要,那是设计有问题,没有谁隔三叉五地去修改接口的参数。

另外,个人觉得还是没有必要一个service一个dao,dao是为service服务的,一个service可以调用多个dao,一个dao也可以为多个service服务,到底一个service要多少dao,这要看dao设计的粒度。

只有实现类跳到接口,哪有接口跳到实现类?
古板的web项目和很多产品类项目又不同,模块无数多,互相关系却不大,谁有空靠YY就能把需要的接口给写全了,都是按需增加的。
说就事论事嘛,总是要牵扯到设计上去,CRUD项目需要这么多设计么?

不必要一个service一个dao倒没错,哪有人规定过一个service要对应一个dao的.dao是以一个数据库操作为基本单位,service是以完成一个业务逻辑为一个基本单位,这两者完全不该有什么数量上的对应关系。
0 请登录后投票
   发表时间:2008-09-26  
guoping007 写道
mingo 写道
适合的就是最好的。标准做法只能说是参考。

就我个人理解,作三层的目的最大的作用是消除重复代码,同时使项目更容易理解和扩展,当然也有很多教科书的说法,比如说移植性,但实际上真正有用的就是消除重复代码。
  另外对于接口的看法,看项目了,如果项目较小,不用接口没什么影响,如果项目比较复杂,接口还是能带来很多好处的。

我觉得说的在理,但是很多事情不能只看眼前,一定从长远来看这个项目以后的扩展性,如果会扩展,我想舍弃眼前的一些利益是必须的
0 请登录后投票
   发表时间:2008-09-27  
大部分人还不了解接口是干嘛的啊..为什么要分那么多层.
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics