遇到公司,基本都这么写,我感觉dao这个接口没卵用啊,就是生命一个接口里面的方法,总不会说别人给你写个dao,然后你去实现方法吧
1
ieiayaobb 2015-07-23 14:52:00 +08:00 1
好听点就是分层解耦,层次清晰,利于重构。难听点就是java版本的八股
|
2
chocotan 2015-07-23 15:03:16 +08:00
因为你遇到的只有一个实现
|
4
incompatible 2015-07-23 15:14:27 +08:00
为Dao写接口的确是件然并卵且蛋疼的事情。
为Service写接口还是有必要的。 比如一个调用外部资源的服务,在开发和测试时可以使用MockImpl,在生产环境里可以用ProductionImpl。 再比如当项目规模变大、需要做服务化的时候,要实现RMI,就要有接口。 |
5
qiayue 2015-07-23 15:15:29 +08:00
比如数据库连接,可能有 MySQL 也可能有 Oracle 还可能是直接自己读写文本文件
每一种都是一种实现 |
6
kaedea 2015-07-23 15:20:44 +08:00
如果你只有一个实现方案的话,可以不用接口啊;
但是接口还有个功能就是方便后面的人理解业务。 |
7
ob 2015-07-23 15:21:20 +08:00
等你遇到需要多种实现的时候就知道用处了。
|
8
idamien 2015-07-23 15:51:52 +08:00 1
因为你接触的项目可能在起步阶段, 实现可以使用不同的数据库,另外接口可以方面以后做单元测试 mock.
另外一个比较严重的问题就是你说java mvc, DAO不属于mvc 你们有service 有 dao,所以架构上是mvc 3-tiers,不是单纯的mvc |
9
qw7692336 2015-07-23 15:55:44 +08:00
我觉得有ORM框架的话,就没有必要DAO了。
至于service,其实很多人建议把service的业务逻辑写在domain model。 |
10
powerfj 2015-07-23 16:35:43 +08:00
瞬间创造了无数的工作..
|
11
thinkmore 2015-07-23 17:01:32 +08:00
这样才有工作量嘛。。。其实如果换了数据库实现就需要dao了,毕竟orm不能完全解决我们的问题,当然大部分时候都是可以的
|
12
sjtlqy 2015-07-23 17:14:12 +08:00
装逼用的,呵呵
|
13
sohoer 2015-07-23 17:26:40 +08:00
面向接口,主要也是为了方便以后扩展
|
14
mgcnrx11 2015-07-23 17:36:34 +08:00
有多少项目,会写着写着就换了一个数据库的呢?Dao还真必要性不大
|
15
EVA1992 2015-07-23 17:39:09 +08:00
八股文
|
16
otakustay 2015-07-23 18:21:05 +08:00
直到3年前我也以为是八股
有些事,不是你自己写上百万行代码,删上几十万行代码,别人怎么说你都不会明白的 |
17
FrankFang128 2015-07-23 18:30:18 +08:00 1
这是过早优化或者是恰当优化
|
18
hitsmaxft 2015-07-23 18:53:06 +08:00 via iPhone
是因为你没见过代码崩坏的项目
|
19
happypy1 2015-07-23 19:03:52 +08:00
刚在读effective java,正好讲到了interface与class,我就说说我的感受。
dao和service这些其实都是抽象你的逻辑层从而达到高内聚和低耦合的概念,便于日后的维护。举个生活中的例子,家用电源的三头插口,这是一个业界标准(接口),家电生产商不需要管这个三头插背后是怎么实现的,他们只需要知道,插上这个接口,他们的电器就会有220伏特的电能供应。Java里面的collection也是一个遵循这种设计的典范,List抽象了所有具体List(ArrayList, LinkedList)的接口,当你创建一个List的时候,根据你的需求(性能?容量?唯一性?)赋予它不同的实现,但是变量仍然是List这个类型,这样如果以后你要改动这个变量的实际类型,你就只需要改动赋值的那行,否则的话,你还要到处找到调用这个变量的地方进行修改。 说了这么多话,其实就是方便日后的维护和扩展。 |
20
cloudhunter 2015-07-23 19:34:31 +08:00
对于 spring mvc 来说,interface 规定了方法签名,框架才能放心大胆的把各种 IoC,class 增强的黑魔法玩出花样。
|
21
yakczh 2015-07-23 19:49:19 +08:00
所以说php是最好的语言,就是这么来的
|
22
yakczh 2015-07-23 19:51:45 +08:00
php一样写dao 一样写service,但不用写daoimpl serviceimpl 瞬间让很多java程序员失业了
|
23
vietor 2015-07-23 20:53:22 +08:00 via Android
是一种累赘,十几年前流行的方法论,现在不入流了。
|
24
GeBron 2015-07-23 22:40:49 +08:00
用了 mybatis 之后就不用写 daoimpl 了……
|
25
iyangyuan 2015-07-24 08:38:01 +08:00 via iPhone
都说dao层抽象之后可以无缝切换数据库,什么情况下才会换数据库呢?求教
|
26
li24361 OP 总结了一下答案,90%的项目不需要写,真等到重构了,用ide工具分分钟抽取出来
|
27
phx13ye 2015-07-24 09:32:37 +08:00
Dependency Inversion principle: Depend upon abstractions. Do not depend upon concrete classes.
|
28
donyee 2015-07-24 10:56:02 +08:00
小项目都不需要这么写了吧,数据库一般也不会切换;
|
29
FrankFang128 2015-07-24 11:04:06 +08:00 1
@iyangyuan 基本不会切数据库,就算切,工作量也不在这几个类那里 XD
|
31
RagingSweet 2015-07-24 14:35:22 +08:00
楼上一群人不要误导人好伐,这样提炼接口是为了使用JDK的动态代理
|
32
li24361 OP @RagingSweet 比如?
|
33
RagingSweet 2015-07-27 14:35:17 +08:00
@li24361 比如什么?JDK自带的动态代理必须要接口
|
34
incompatible 2015-07-28 02:35:49 +08:00 via iPhone
@li24361 比如事务的实现啊
|