Java中的开发原则详解:DRY、YAGNI、单一职责
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);
}
通过这样的重构,我们可以大大减少代码量,提高代码的可读性和可维护性。
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这四个方法就可以了,其他的方法是没有必要实现的。如果我们过度设计,实现了所有的方法,那么会导致代码冗余,增加代码维护的难度。
单一职责原则即一个类或者函数只负责一件事情。这个原则告诉我们在设计类或者函数时,要尽量将功能拆分成多个小的部分,每个部分只负责一个功能。
我们来看一个例子:
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: 实现修改密码
}
}
通过这样的拆分,我们可以让每个类只负责一个功能,提高代码的可读性和可维护性。
本文为翻滚的胖子原创文章,转载无需和我联系,但请注明来自猿教程iskeys.com
