Java中的开发原则详解:DRY、YAGNI、单一职责


Java中的开发原则详解:DRY、YAGNI、单一职责

1. DRY原则

DRY即Don't Repeat Yourself,即不要重复自己。这个原则告诉我们尽量避免重复的代码,将重复的代码抽象成函数或者类,让它们可以在多个地方被调用。

我们来看一个例子:

public void printUserInfo(String name, String age, String gender) {
    System.out.println("Name: " + name);
    System.out.println("Age: " + age);
    System.out.println("Gender: " + gender);
}

public void printTeacherInfo(String name, String age, String gender, String subject) {
    System.out.println("Name: " + name);
    System.out.println("Age: " + age);
    System.out.println("Gender: " + gender);
    System.out.println("Subject: " + subject);
}

可以发现,在这两个函数中,有大量的重复代码,而且它们的功能非常相似。我们可以将它们抽象成一个通用的函数:

public void printInfo(String name, String age, String gender) {
    System.out.println("Name: " + name);
    System.out.println("Age: " + age);
    System.out.println("Gender: " + gender);
}

public void printTeacherInfo(String name, String age, String gender, String subject) {
    printInfo(name, age, gender);
    System.out.println("Subject: " + subject);
}

通过这样的重构,我们可以大大减少代码量,提高代码的可读性和可维护性。

2. YAGNI原则

YAGNI即You Ain't Gonna Need It,即你不会需要它。这个原则告诉我们在编写代码时,不要过度设计,不要去实现一些当前不需要的功能。

我们来看一个例子:

public class Calculator {
    public int add(int a, int b) {
        // TODO: 实现加法
    }
    
    public int subtract(int a, int b) {
        // TODO: 实现减法
    }
    
    public int multiply(int a, int b) {
        // TODO: 实现乘法
    }
    
    public int divide(int a, int b) {
        // TODO: 实现除法
    }
    
    public int square(int a) {
        // TODO: 实现平方
    }
    
    public int cube(int a) {
        // TODO: 实现立方
    }
    
    // ...省略其他方法
}

在这个例子中,我们可以看到Calculator类中有大量的TODO注释,这些注释表示这些方法还没有被实现。但是,实际上,在这个类中,我们只需要实现add、subtract、multiply和divide这四个方法就可以了,其他的方法是没有必要实现的。如果我们过度设计,实现了所有的方法,那么会导致代码冗余,增加代码维护的难度。

3. 单一职责原则

单一职责原则即一个类或者函数只负责一件事情。这个原则告诉我们在设计类或者函数时,要尽量将功能拆分成多个小的部分,每个部分只负责一个功能。

我们来看一个例子:

public class UserService {
    public void register(String username, String password) {
        // TODO: 实现用户注册
    }
    
    public void login(String username, String password) {
        // TODO: 实现用户登录
    }
    
    public void changePassword(String username, String oldPassword, String newPassword) {
        // TODO: 实现修改密码
    }
    
    // ...省略其他方法
}

在这个例子中,UserService类中有三个方法:register、login和changePassword。这三个方法虽然都与用户相关,但是它们的功能并不是非常相似,我们可以将它们拆分成三个独立的类:UserRegisterService、UserLoginService和UserPasswordService。

public class UserRegisterService {
    public void register(String username, String password) {
        // TODO: 实现用户注册
    }
}

public class UserLoginService {
    public void login(String username, String password) {
        // TODO: 实现用户登录
    }
}

public class UserPasswordService {
    public void changePassword(String username, String oldPassword, String newPassword) {
        // TODO: 实现修改密码
    }
}

通过这样的拆分,我们可以让每个类只负责一个功能,提高代码的可读性和可维护性。

猿教程
请先登录后发表评论
  • 最新评论
  • 总共0条评论