问一个比较傻逼的问题。。。

2015-02-11 14:44:07 +08:00
 jy04149886
请问,在三层架构当中,上一层调用下一层的服务,使用注入模式比使用对象的方法调用,优势在哪呢??
4627 次点击
所在节点    Java
26 条回复
raincious
2015-02-11 14:50:36 +08:00
非Java小能手,可能立即的不对,但是你是不是在说这个?: http://stackoverflow.com/questions/871405/why-do-i-need-an-ioc-container-as-opposed-to-straightforward-di-code
raincious
2015-02-11 14:51:16 +08:00
- 立即
+ 理解
jy04149886
2015-02-11 15:12:20 +08:00
@raincious 太好了,谢谢
tabris17
2015-02-11 15:17:29 +08:00
你在说IoC容器么?

IoC容器获取对象,获取对象后才能“对象的方法调用”啊,两码事儿
jy04149886
2015-02-11 15:21:33 +08:00
@tabris17 直接new,不注入
tabris17
2015-02-11 15:31:02 +08:00
@jy04149886 用IoC就是咱们不用知道对象到底怎么生成的,有些对象是new的,但是有些对象要用build或者factory模式生成。有些对象需要依赖别的服务或组件。而使用IoC容器可以让调用者无需关心这些细节。

比如一个dbconnection对象,你直接new需要传递ip端口用户名密码,你要知道从哪里去读取这些信息,到底是配置文件还是全局变量或者是常量。而是用IoC就只要把这些信息写入配置文件就可以了
jy04149886
2015-02-11 15:34:01 +08:00
@tabris17 这个我知道,比如数据库连接对象通过注入取得是很方便的,但是一个action调用它的service对象通过依赖注入来实现,我感觉好烦琐,但是现在的java三层架构的开发都是这种模式的吧。。。。是不是对这个模式使用的有点不合适。。。
tabris17
2015-02-11 15:38:26 +08:00
@jy04149886 你就姑且认为是一种DI的美学吧……
tabris17
2015-02-11 15:40:04 +08:00
或者说“用new太low了”
jy04149886
2015-02-11 15:44:46 +08:00
@tabris17 好吧。。。
hcymk2
2015-02-11 16:00:24 +08:00
windyboy
2015-02-11 16:01:31 +08:00
注入的优势在于,你只告诉接口你想干什么,至于最后这个事情怎么干,谁来干,可以执行的时候才决定
fangzhzh
2015-02-11 16:04:38 +08:00
注入方便测试
jy04149886
2015-02-11 16:07:26 +08:00
@windyboy 这机制确实很强大,不过超级大项目才体现优势吧。。。做个管理软件什么的,我看貌似没什么必要。。。
jy04149886
2015-02-11 16:08:13 +08:00
@fangzhzh 貌似现在都用注解来实现了,貌似没有xml那么强大?
invite
2015-02-11 16:13:03 +08:00
何必纠结什么模式呢?怎么方便怎么来啊。
raincious
2015-02-11 16:13:18 +08:00
@jy04149886

看你的项目到底要规范化到什么程度。

一般来说通用的代码除非出于冗余性以及组建依赖的考虑,一般还是抽出来做成可复用的流程。使用IoC方法可以轻易地做到这一点,而且可以更加灵活的进行加载(比如你可以决定是否缓存某个对象的实例,来实现比如复用数据库连接的实例),代码量可以更少。

反过来说如果你的代码里都是直接new出来,首先是维护不方便,如果这些被new的组件有更新导致调用方式改变(比如拆分了之类),那么可能需要改的地方就太多了,不便维护。而且代码一长,维护就相对更困难。

代码总归还是给人看的。
caixiexin
2015-02-11 16:13:36 +08:00
解耦,模块化,当然可以不用,自己决定:)
设计模式的问题也争论挺久了
6IbA2bj5ip3tK49j
2015-02-11 17:11:09 +08:00
团队作战,写好接口,各写各的。
kedron
2015-02-11 17:51:51 +08:00
@invite 怎么方便怎么来?垃圾代码就是这么出来的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/170159

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX