我已经阅读了几本OOP书籍,其中强调规则来定义具有集中责任的课程。在我工作的许多应用程序中,大部分时间都遵循这一点。但是我看到很多情况下很多逻辑被转储到单个方法中,使得难以理解/单元测试。在定义方法时需要遵循哪些最佳实践?
答案 0 :(得分:2)
普遍的共识是,决定方法应该做什么的最佳方法是遵循Do One Thing哲学。
每种方法都应该做一件事,一件事。
答案 1 :(得分:1)
作为示例,让我们看看以下方法:
public static void printDetails() {
System.out.println("Current time: " + LocalTime.now());
System.out.println("Current date: " + LocalDate.now());
System.out.println("Available processors: " + Runtime.getRuntime().availableProcessors());
System.out.println("Max memory: " + Runtime.getRuntime().maxMemory());
System.out.println("Free memory: " + Runtime.getRuntime().freeMemory());
}
经过一些重构后,我们的版本更具可读性和可维护性:
public static void printDetails() {
printDateTimeDetails();
printProcessorDetails();
printMemoryDetails();
}
更容易阅读。更重要的是 - 它更容易测试。 当你阅读这种方法的主体时,你清楚地了解它的目的。如果您需要更多详细信息,可以直接查看代码并查看每种方法的用途。
public static void printProcessorDetails() {
System.out.println("Available processors: " + getAvailableProcessors());
}
public static int getAvailableProcessors() {
return Runtime.getRuntime().availableProcessors();
}
public static void printMemoryDetails() {
System.out.println("Max memory: " + getMaxMemory());
System.out.println("Free memory: " + getFreeMemory());
}
public static long getFreeMemory() {
return Runtime.getRuntime().freeMemory();
}
public static long getMaxMemory() {
return Runtime.getRuntime().maxMemory();
}
private static void printDateTimeDetails() {
System.out.println("Current time: " + LocalTime.now());
System.out.println("Current date: " + LocalDate.now());
}
此类代码也可以重复使用。
童子军有一条规则:"总是离开露营地比你发现它更干净。"实际上,由侦察之父罗伯特·斯蒂芬森·史密斯·巴登 - 鲍威尔撰写的该规则的原始形式是“试着让这个世界比你发现它好一点。”#34;
当然,在我看来这一切都是如此。