【问题标题】:Understanding how to decouple了解如何解耦
【发布时间】:2015-08-25 19:17:08
【问题描述】:

我一直试图在我的代码中保持耦合,但我想我可能无法完全理解它。我的基本理解是,耦合是“依赖类如何相互依赖并了解彼此的行为”。我知道依赖注入是减少耦合和 IoC 的一种方法。

以下是我提出的一个学生、教授和课程的简单示例。一门课程有一个学生名单和一个教授。我有一个注入学生和教授对象的控制器(使用 MVC)。 以下仍然会被认为是耦合的,还是紧密耦合的?这也是 DI 的一个例子,对吗?

学生班

public class Student {
private String firstName;
private String lastName;
private int studentID;
private int address;
private int telephone;
public String getFirstName() {
    return firstName;
}
public void setFirstName(String firstName) {
    this.firstName = firstName;
}
public String getLastName() {
    return lastName;
}
public void setLastName(String lastName) {
    this.lastName = lastName;
}
public int getStudentID() {
    return studentID;
}
public void setStudentID(int studentID) {
    this.studentID = studentID;
}
public int getAddress() {
    return address;
}
public void setAddress(int address) {
    this.address = address;
}
public int getTelephone() {
    return telephone;
}
public void setTelephone(int telephone) {
    this.telephone = telephone;
}
}

教授班

public class Professor {
private String firstName;
private String lastName;
private int professorID;
private int address;
private int telephone;
private int salary;
public String getFirstName() {
    return firstName;
}
public void setFirstName(String firstName) {
    this.firstName = firstName;
}
public String getLastName() {
    return lastName;
}
public void setLastName(String lastName) {
    this.lastName = lastName;
}
public int getProfessorID() {
    return professorID;
}
public void setProfessorID(int professorID) {
    this.professorID = professorID;
}
public int getAddress() {
    return address;
}
public void setAddress(int address) {
    this.address = address;
}
public int getTelephone() {
    return telephone;
}
public void setTelephone(int telephone) {
    this.telephone = telephone;
}
public int getSalary() {
    return salary;
}
public void setSalary(int salary) {
    this.salary = salary;
}
}

课程班

import java.util.List;

public class Course {
private List<Student> students;
private Professor professor;
public Professor getProfessor() {
    return professor;
}
public void setProfessor(Professor professor) {
    this.professor = professor;
}
public List<Student> getStudents() {
    return students;
}
public void setStudents(List<Student> students) {
    this.students = students;
}

}

【问题讨论】:

标签: java oop decoupling


【解决方案1】:

我有一个注入 Student 和 Professor 对象的控制器(使用 MVC)。以下仍然会被认为是耦合的还是紧密耦合的?

由于所有引用都是类,因此您有一个紧密耦合的设计。一个好的方法是在代码中使用接口。这将允许您随时更改实现,并且不会影响应用程序的其余部分。

这也是 DI 的一个例子,对吗?

如果您的 Course、Professor 和 Student 是已配置的 bean,并且您在某处指定了如何在 bean 实例化期间注入实例,那么这将是一个 DI 示例。现在它只有三个 POJO 类。

【讨论】:

    【解决方案2】:

    您放在这里的似乎是 MVC 实现的模型部分,除了 setter-getter 之外,它的功能有限。为了有一个解耦和 DI 的好例子,你可能有实现一些接口的模型、视图和控制器类。它们是解耦的,因为每个类的实现都不知道/不依赖于其他实现。它们仅基于很好地封装和隔离组件的接口相关。

    可能你也有这些接口的一些假/测试实现

    然后,有一个 IoC 设置来控制每个组件的哪些实现将被解析。

    【讨论】:

      猜你喜欢
      • 2023-03-04
      • 1970-01-01
      • 1970-01-01
      • 2016-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-14
      • 2018-05-10
      相关资源
      最近更新 更多