了解如何解耦

时间:2015-06-10 13:36:19

标签: java oop decoupling

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

以下是我提出的学生,教授和课程的简单示例。课程列出了学生和教授。我有一个控制器(使用MVC)注入Student和Professor对象。 以下是否仍然被认为是耦合或紧密耦合?这也是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;
}

}

2 个答案:

答案 0 :(得分:3)

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

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

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

如果您的课程,教授和学生都配置了bean,并且您在bean实例化期间指定了如何注入实例,那么它将是一个DI示例。到目前为止,只有三个POJO课程。

答案 1 :(得分:0)

你在这里放的东西似乎是你的MVC实现的Model部分,它除了setter-getters之外还具有有限的功能。要有一个很好的去耦和DI示例,您可能拥有实现某些接口的Model,View和Controller类。它们是分离的,因为每个类的实现都不知道/依赖于其他实现。它们仅基于很好地封装和隔离组件的接口来关联。

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

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