锁定老帖子 主题:在项目架构中如何进行分层才是最合理的?
精华帖 (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对应一个实体,并且首先定义接口,一个实现类,上层应用再通过工厂获取实例。 其实是比较麻烦.. 但从设计角度来讲,是不是好的? 大家讨论。 |
|
返回顶楼 | |
发表时间:2008-09-26
right now 写道 csdn的毛爷爷,我想问一下,很多动态语言中没有接口的概念,请问怎么面向接口编程
他们不用接口记录需求 它们不用编译也不用强类型检查. 所以你写什么都不会有约束作用 |
|
返回顶楼 | |
发表时间:2008-09-26
right now 写道 csdn的毛爷爷,我想问一下,很多动态语言中没有接口的概念,请问怎么面向接口编程
居然被认出.我不上csdn很久了. interface是一个契约, 而契约是一种约束, 弱类型的动态语言, 既给了你自由, 也给了你缺陷. 楼上说的对: 他们不用接口记录需求 它们不用编译也不用强类型检查. 所以你写什么都不会有约束作用 |
|
返回顶楼 | |
发表时间: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设计的粒度。 |
|
返回顶楼 | |
发表时间: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设计的粒度。 有些道理, 這個貼應該長久討論。 |
|
返回顶楼 | |
发表时间:2008-09-26
强烈建议大家读一下《iBATIS in Action》,自然找到答案!
|
|
返回顶楼 | |
发表时间:2008-09-26
ltian 写道 right now 写道 csdn的毛爷爷,我想问一下,很多动态语言中没有接口的概念,请问怎么面向接口编程
此接口非彼接口。 面向对象中方法论中的面向接口编程并不是说语言要有专门的“接口”定义支持。面向接口编程里面的接口是广义的, 虚基类可以充当“接口”,甚至约定好的不做任何实现的暴露公开方法的基类都可以作为“接口”。 colbol的接口是一个字串的第几位到第几位,表示 用户名 从第几位到第几位 是 时间... |
|
返回顶楼 | |
发表时间: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是以完成一个业务逻辑为一个基本单位,这两者完全不该有什么数量上的对应关系。 |
|
返回顶楼 | |
发表时间:2008-09-26
guoping007 写道 mingo 写道 适合的就是最好的。标准做法只能说是参考。
就我个人理解,作三层的目的最大的作用是消除重复代码,同时使项目更容易理解和扩展,当然也有很多教科书的说法,比如说移植性,但实际上真正有用的就是消除重复代码。 另外对于接口的看法,看项目了,如果项目较小,不用接口没什么影响,如果项目比较复杂,接口还是能带来很多好处的。 我觉得说的在理,但是很多事情不能只看眼前,一定从长远来看这个项目以后的扩展性,如果会扩展,我想舍弃眼前的一些利益是必须的 |
|
返回顶楼 | |
发表时间:2008-09-27
大部分人还不了解接口是干嘛的啊..为什么要分那么多层.
|
|
返回顶楼 | |