-Info类名后缀的替代方法

cru*_*ush 6 java naming-conventions code-cleanup

我一直在读Robert C. Martin的清洁代码,并且发现了臭名昭着的声明:

避免使用类名称中的管理器,处理器,数据或信息等字样.

所以,很自然地,我试图-Info从我的一个班级名称中分解出来.现在,我已经看到了各种StackOverflow问题,询问在-Manager或的情况下该怎么做-Processor.我看到评论表明他们无法想象-Data一个好的班级名称.嗯,在我看来,-Data-Info似乎更难分解出.特别是,例如在下面的类中.

我有一个Server类如下:

public class Server {
    //What I would call ServerInfo
    private int id;
    private String name;
    private String address;
    private int port;
    private int connections;
    private int maxConnections;
    private int status;

    //Bunch of members that aren't ServerInfo, for example:
    private ConcurrentHashMap<String, File> files = new ConcurrentHashMap<String, File>();
    private List<String> filePaths = new List<String>();
    /* ... */

    public void start() { /* ... */ }
    public void stop()  { /* ... */ }
}
Run Code Online (Sandbox Code Playgroud)

还有就是HashMap存储的像另一个远程服务器上的以下这些服务器的信息:

public class ServerMap {
    ConcurrentHashMap<Integer, Server> serverMap = /* ... */;
}
Run Code Online (Sandbox Code Playgroud)

但是,HashMap这只需要了解我所说的内容ServerInfo.它不需要通过存储一堆永远不会使用的变量来浪费内存.因此,需要一个Data类来容纳这些变量.

public class ServerInfo {
    private int id;
    private String name;
    private String address;
    private int port;
    private int connections;
    private int maxConnections;
    private int status;
}
Run Code Online (Sandbox Code Playgroud)

ServerMap现在变成ConcurrentHashMap<Integer, ServerInfo>.

问题是这显然违反了清洁法典的规定.我可以换成-Info某个同义词,但那么,是不是真的没有解决问题呢?例如,我可以调用它,ServerDetails但我没有看到它与ServerDataor 有什么不同ServerInfo.

我可以Server在不同的命名空间中重新定义,并给它只是这些成员,但这似乎更令人困惑.

这是什么最佳实践解决方案?

Niz*_*zzo 7

我认为该声明的重点是避免在类命名时使用像-Data和-Info这样的重载术语.我不认为使用像ServerDetails这样的东西来命名你正在命名的对象.毕竟,那就是它们不是吗?

如果ServerDetails过于通用,请问自己它们是什么类型的信息/细节......在这种情况下,它们都看起来与网络或连接相关.ServerConnectionProperties或类似的东西怎么样?

使用作者提出的准则就是这样; 准则.请记住,有很多人有很多意见,很少有人适用100%的时间.你会疯狂地试图在信中应用每一个"最佳实践".