我一直在阅读Robert C. Martin 的Clean Code,并看到了臭名昭著的声明:
避免使用类名称中的 Manager、Processor、Data 或Info之类的词。
所以,自然地,我试图-Info从我的一个类名中提取出来。现在,我看到了各种各样的 StackOverflow 问题,询问在-Manageror的情况下该怎么做-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() { /* ... */ }
}
HashMap这些服务器的信息存储在另一个远程服务器上,如下所示:
public class ServerMap {
ConcurrentHashMap<Integer, Server> serverMap = /* ... */;
}
但是,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;
}
而ServerMap现在变成ConcurrentHashMap<Integer, ServerInfo>.
问题是这显然违反了Clean Code的规则。我可以更改-Info为一些同义词,但是,这不是真正解决问题吗?例如,我可以调用它,ServerDetails但我看不出它与ServerDataor有何不同ServerInfo。
我可以Server在不同的命名空间中重新定义,并只给它这些成员,但这似乎更令人困惑。
对此的最佳实践解决方案是什么?