Я читал Чистый код Роберта С. Мартина и наткнулся на печально известное утверждение:
Избегайте таких слов, как Manager, Processor, Data или Info в названии класса.
Итак, естественно, я попытался выделить -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() { /* ... */ }
}
На другом удаленном сервере хранится 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
или ServerInfo
.
Я мог бы переопределить Server
в другом пространстве имен и дать ему только эти члены, но это кажется еще более запутанным.
Каково лучшее решение решения этой проблемы?
Server
? Можете ли вы привести больше примеров о них? - person Genzer   schedule 30.07.2013Server
. Они не используются картой, содержащей информацию о каждомServer
. Только переменные вServerInfo
должны быть известны/сохраненыServerMap
. - person crush   schedule 30.07.2013