QQ个性网:专注于分享免费的QQ个性内容

关于我们| 网站公告| 广告服务| 联系我们| 网站地图

搜索
编程 JavaScript Java C++ Python SQL C Io ML COBOL Racket APL OCaml ABC Sed Bash Visual Basic Modula-2 Logo Delphi IDL Groovy Julia REXX Chapel X10 Forth Eiffel C# Go Rust PHP Swift Kotlin R Dart Perl Ruby TypeScript MATLAB Shell Lua Scala Objective-C F# Haskell Elixir Lisp Prolog Ada Fortran Erlang Scheme Smalltalk ABAP D ActionScript Tcl AWK IDL J PostScript IDL PL/SQL PowerShell

JavaWeb——分层解耦(2/5):分层解耦(IOC-DI引入)

日期:2025/04/04 19:52来源:未知 人气:62

导读:内聚与耦合概念介绍内聚指软件中各个功能模块内部的功能联系。例如员工管理的 Service 类中仅编写与员工相关的逻辑处理,就叫内聚程度高(高内聚)。耦合用来衡量各个层或模块之间的依赖关联程度。在三层架构程序中,Controller 层调用 Service 层,Service 层又调用 DAO 层,且在 Controller 中实例化 Service 层实现类,在 Service......

内聚与耦合概念介绍

内聚

  • 指软件中各个功能模块内部的功能联系。

例如员工管理的 Service 类中仅编写与员工相关的逻辑处理,就叫内聚程度高(高内聚 )。

耦合

  • 用来衡量各个层或模块之间的依赖关联程度。

在三层架构程序中,Controller 层调用 Service 层,Service 层又调用 DAO 层,且在 Controller 中实例化 Service 层实现类,在 Service 中实例化 DAO 层实现类,导致 Controller 与 Service 层、Service 与 DAO 层之间存在耦合。

例如,若 Service 层类名变化或切换实现类,Controller 代码需改动。

软件设计原则:高内聚低耦合

编辑

分层解耦分析

耦合问题示例

在当前三层架构程序中,Controller 需要调用 Service,直接实例化了 EmpServiceA。若要切换为EmpServiceB,Controller 代码需改动,这表明 Controller 与 Service 层之间代码耦合。

解耦思路

不能直接实例化 Service 层实现类。若删除实例化代码,直接运行会报错(空指针异常)。可提供一个容器来存储对象。

比如存储 EmpServiceA 创建的对象,Controller 运行时从容器中查找 EmpService类型的对象并赋值,若切换实现类为 B,将B创建的对象放入容器,Controller 同样从容器获取对象,这样实现类变化时 Controller 代码无需改动。

IOC与 DI概念介绍

IOC(控制反转)

  • 英文为 I nversion O f C ontrol,简称 IOC ,是 Spring 框架的第一大核心。

其含义是对象创建的控制权由应用程序 转移到外部容器 。原来的应用程序自身控制对象创建,现在交给容器管理。这个容器也叫 IOC容器 或 Spring容器。

DI(依赖注入)

  • 英文为 D ependency I njection,简称 DI

其含义是容器为应用程序提供运行时所需要依赖的资源。

例如 Controller 程序运行时需要依赖 EmpService资源,容器为其提供的过程就叫依赖注入 。在 IOC容器 中创建管理的对象称为Bean

Bean对象:lOC容器中创建、管理的对象,称之为 bean。

END

学习自:黑马程序员——JavaWeb课程

关于我们|网站公告|广告服务|联系我们| 网站地图

Copyright © 2002-2023 某某QQ个性网 版权所有 | 备案号:粤ICP备xxxxxxxx号

声明: 本站非腾讯QQ官方网站 所有软件和文章来自互联网 如有异议 请与本站联系 本站为非赢利性网站 不接受任何赞助和广告