Четох Чист код от Робърт К. Мартин и попаднах на скандалното изявление:
Избягвайте думи като мениджър, процесор, данни или информация в името на клас.
Така че, естествено, се опитах да отделя -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
по-горе. Не е нужно да губи памет чрез съхраняване на куп променливи, които никога няма да използва. И така, клас данни е необходим за съхраняване на тези променливи.
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>
.
Проблемът е, че това очевидно нарушава правилото от Чист код. Бих могъл да променя -Info
с някакъв синоним, но тогава не е ли това наистина да реши проблема? Например, бих могъл да го нарека ServerDetails
, но не виждам как това е различно от ServerData
или ServerInfo
.
Бих могъл да предефинирам Server
в различно пространство от имена и да му дам само тези членове, но това изглежда още по-объркващо.
Какво е най-доброто практическо решение за това?
Server
? Можете ли да дадете повече примери за тях? - person Genzer   schedule 30.07.2013Server
. Те не се използват от картата, която съдържа информация за всякоServer
. Само променливите вServerInfo
трябва да бъдат известни/съхранени отServerMap
. - person crush   schedule 30.07.2013