zoukankan      html  css  js  c++  java
  • Spring 耦合与内聚

    什么是耦合

      在软件工程中,耦合指的就是就是程序之间的依赖性。

      包括:类之间的依赖,方法之间的依赖。

    什么是内聚

      内聚标志一个模块内各个元素彼此结合的紧密程度,它是信息隐蔽和局部化概念的自然扩展。

      内聚和耦合是密切相关的,同其他模块存在高耦合的模块意味着低内聚,而高内聚的模块意味着该模块同其他模块之间是低耦合。在进行软件设计时,应力争做到高内聚,低耦合。

    解耦

      降低程序之间的依赖关系。

      我们要知道依赖关系是不可能完全消除的,那么我们该降低哪些依赖关系呢?

      实际开发中应该做到:编译期不依赖,运行时才依赖

    解耦的思路

      第一步——使用反射来创建对象,从而避免使用new关键字

      第二步——通过读取配置文件来获取要创建对象的全限定类名

    实例

      这是jdbc的获取连接的两个步骤,我们可以看到注册驱动这里,对com.mysql.jdbc.Driver()类有依赖

      这样的代码同样也能注册驱动,但并不会产生依赖,在这里com.mysql.jdbc.Driver只是一个字符串。

      我们先来看第一种,第一种方法就是实例化Driver类,并通过调用registerDriver()方法完成注册。

      可以看到它是把要注册的驱动程序信息封装到了DriverInfo中,然后放进了一个List中。

       第二种方法是怎么通过只要获得Driver的Class对象就可以完成注册呢,我们来看下Driver的源码

       可以看到它是通过静态代码块实现的,根据类加载机制当执行 Class.forName(driverClass) 获取其Class对象时, com.mysql.jdbc.Driver 就会被JVM加载,连接,并进行初始化,初始化就会执行静态代码块,也就会执行下边这句代码:

       使用第二种方式的好处就是,我们的类不在依赖具体的类,此时就算删除mysql驱动的jar包,依然可以编译(不能运行),同时也产生了另一个问题mysql 驱动的全限定类名字符串是在 java 类中写死的,一旦要改还是要修改源码。

     

  • 相关阅读:
    Seq命令的用法
    Vsftp的PASV mode(被动模式传送)和Port模式及 Linux下VsFTP配置全方案
    PHP网页截图网页快照实现
    MimeType资料
    SQl 周报表 周统计
    IsolatedStorageFile 配额等
    SQL 月报表
    参数编码 完全解决方案
    File,FileStream,byte[]3者互相转换总结(转)
    SL 在 IE8下显示的高度变小 解决方法
  • 原文地址:https://www.cnblogs.com/qq2210446939/p/13672488.html
Copyright © 2011-2022 走看看