一种方法的重点责任

时间:2016-09-23 15:25:20

标签: java methods refactoring solid-principles

我已经阅读了几本OOP书籍,其中强调规则来定义具有集中责任的课程。在我工作的许多应用程序中,大部分时间都遵循这一点。但是我看到很多情况下很多逻辑被转储到单个方法中,使得难以理解/单元测试。在定义方法时需要遵循哪些最佳实践?

2 个答案:

答案 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;

当然,在我看来这一切都是如此。