我一直在阅读Robert C. Martin 的Clean Code,并看到了臭名昭著的声明:
避免使用类名称中的 Manager、Processor、Data 或Info之类的词。
所以,自然地,我试图-Info
从我的一个类名中提取出来。现在,我看到了各种各样的 StackOverflow 问题,询问在-Manager
or的情况下该怎么做-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
但我看不出它与ServerData
or有何不同ServerInfo
。
我可以Server
在不同的命名空间中重新定义,并只给它这些成员,但这似乎更令人困惑。
对此的最佳实践解决方案是什么?