05 | Spring DI容器:如何分析一个软件的模型?
耦合的依赖
- 深入了解
- 翻译
- 解释
- 总结
Spring DI容器是软件设计中的重要模型之一,它解决了组件创建和组装的问题。文章以Spring的DI容器为例,介绍了软件模型的理解方法。作者通过讲解一个查询场景,展示了在软件设计中组件依赖的问题,并提出了依赖注入的解决方案。通过实例分析,读者可以了解DI容器的作用和设计原理,以及在软件设计中的重要性。文章通过具体的代码示例,生动地展现了DI容器的价值和应用场景,为读者提供了深入理解软件模型的方法和思路。 文章以Spring的DI容器为例,介绍了软件模型的理解方法。作者通过讲解一个查询场景,展示了在软件设计中组件依赖的问题,并提出了依赖注入的解决方案。通过实例分析,读者可以了解DI容器的作用和设计原理,以及在软件设计中的重要性。文章通过具体的代码示例,生动地展现了DI容器的价值和应用场景,为读者提供了深入理解软件模型的方法和思路。 DI容器的引入有效地解决了对象的创建和组装的问题,让程序员们拥有了一个新的编程模型。按照这个编程模型去写代码,整体的质量会得到大幅度的提升,也会规避掉之前的许多问题。这也是一个好的模型对项目起到的促进作用。文章通过对DI容器的介绍,引导读者理解设计模型的来龙去脉,从而更好地运用这个模型去解决后面遇到的问题。 DI容器的流行对于提升Java世界整体编程的质量是大有助益的。因为它引导的设计方向是一个好的方向,一个普通的Java程序员写出来的程序只要符合Spring引导的方向,那么它的基本质量就是有保障的,远超那个随意写程序的年代。 通过对DI容器的介绍,读者可以了解DI容器的作用和设计原理,以及在软件设计中的重要性。文章通过具体的代码示例,生动地展现了DI容器的价值和应用场景,为读者提供了深入理解软件模型的方法和思路。
《软件设计之美》,新⼈⾸单¥59
全部留言(38)
- 最新
- 精选
- Moonus我觉得最根本原因是大多数开发不写测试,所以不会考虑依赖问题,大多数方法都是面向实现而不是接口,使用DI容器反而增加了工作量。 目前所在小组偏向于外包,代码只有一层,不是单列,就是静态方法;为了达到快速交付,基本没有设计,不管怎么说这都是不合理的。是前人挖,后人跳。
作者回复: 唉,你说的现状,我非常理解。所谓的“快”,只是从当前一个时点上看,放在长期,就是越跑越慢。
2020-06-03923 - 阳仔理解软件设计中模型首先要理解模型解决的核心问题是什么,然后抽丝剥茧了解模型的来龙去脉,深入理解模型解决问题的过程。 spring中的di模型是为了解决对象的创建和组装的问题。 那为什么创建对象和组装要用di来解决? 一个重要的原因是为了解耦。分离接口与实现的强依赖,也就是软件设计第一步分离关注点。 而这个恰恰就是为了可测试性,当一个代码是可测的,其实就是说明它是比较灵活的,修改起来不会牵一发而动全身,提高开发的体验,减少因修改引入的额外问题
作者回复: 很好的总结。
2020-06-0318 - keep_curiosity为什么不建议使用静态方法?如果只是简单的模型转换,用静态方法不是更好吗?
作者回复: 静态方法,没法去模拟它的行为,所以,要做测试的话,遇到静态方法,你必须关注它的实现,而不是它的接口。总的来说,静态方法是写着爽,但测着不方便。
2020-06-04213 - 刘丹container.bind(Connection.class).to(connection); container.bind(ArticleReposistory.class).to(DBArticleRepository.class); container.bind(ArticleService.class).to(ArticleService.class) 请问这3行代码的具体含义是啥?
作者回复: 将 Connection 这个类绑定在 connection 这个对象上,当需要一个 Connection 对象时,返回 connection 这个对象。 将 ArticleReposistory 这个接口绑定在 DBArticleRepository 这个类上,当需要一个 ArticleReposistory 对象时,返回 DBArticleRepository 这个类的一个对象。 将 ArticleService 这个类就绑定在其自身,当需要一个 ArticleService 对象时,返回这个类的一个对象。
2020-06-03710 - JohnnyB0Y回答作业: 1,Java有反射,其他语言不一定有; 2,Java生态比较完善,大神比较多,有模版可以学; 3,前端开发集中在UI界面和数据解析,需求变更快,用DI容器去做有点吃力;(UI大多是包含的方式,很难把子控件拎出来初始化) 4,DI容器的AOP可能更适合后端,突如其来的统计、归档之类的需求。而前端的应用生命周期和页面生命周期都由UI框架提供了,AOP自然用的少。 总结:我觉得AOP可能才是开发者爱用DI的主要原因,加上Java生态的繁荣最终流行起来。(个人看法)
作者回复: AOP 早在 DI 之前就有了,它并没有那么大的推动作用,DI 兴起之后,它才有了更多的用武之地。
2020-06-0339 - 骨汤鸡蛋面接触spring 七八年, 一直在学习BeanFactory 和 ApplicationContext 上打转,今天才算对容器这个概念有一个直觉性的认识,感谢老师!
作者回复: 学习一个软件,要从基础模型开始。
2020-06-037 - 六一王我是一个两年的前端程序媛,不太了解 java。面向对象编程时,你只想要一颗树,却得到整个森林,于是有些人就觉得面向对象编程是不好的,所以认为函数式编程的方式更好,不过文章提到的组件创建和组合放入到一个容器中,也就是说将所有依赖都放入都一个地方,提供业务需要的接口,而不写到业务中,那么为啥没有在前端火起来呢?函数式编程是不是就是面向接口编程的一种呢?
作者回复: 后面会讲到函数式编程,简单来说,面向对象提供了组织类的能力,函数式编程提供了组织动作的能力,二者可以混合使用。
2020-06-075 - 业余爱好者一个框架的流行根本原因不是它简化了开发,而是导致了问题的简化的那个开发模型。像spring 提供的di 模型,你甚至感受不到它的存在。它更像是一种理念,而这是一个模型的最高级形态。在di的核心模型之上,又出现了starter,auto configuration 等理念,这就是spring boot 的模型创新。在springboot 之上,又有springcloud..... Spring 这个框架,真的是,,,牛逼(找不到合适的词了)
作者回复: 没错,简化开发是结果,模型才是动因。 Spring Boot 是在 Spring 出现好多年之后才出现的。
2020-06-0325 - 小鱼儿放下历史长河之中去看问题,比如 现在去看几年前甚至10年前的代码,才知道这样做的好处,分离关注点,可测试性是多么需要,不然真的改不动。
作者回复: 这是我在开篇词里的立论,软件设计是一门关注长期变化的学问。
2020-06-0434 - Geek_3b1096你只是在了解别人设计的结果... 这就是我最欠缺的
作者回复: 往前一步,你就成长了。
2020-06-034