我正在用服務器構建一個使用Java的多人遊戲。目前,我正在使用單個類文件來存儲播放器數據並處理數據。我是初學者,所以我不知道這是一個不好的習慣。 http://howtodoinjava.com/best-practices/5-class-design-principles-solid-in-java/這篇文章幫助我理解我打破了「單一責任原則」的規則。如何在java中分離數據和行爲對象?
這就是我的代碼現在的樣子。
public class PlayerSession{
String playerId;
String playerName;
// 20+ player data fields, which I am trying to reduce
// and keep only the most used data
public void messageProcessor(JSONObject clientRequest) throws JSONException{
switch(clientRequest.getString("task")){
case "login": loginProcess(); break;
case "logout": logoutProcess(); break;
//50+ different actions
}
}
public void populateSessionData(String playerId){
// populate player data from database
}
private void loginProcess(){
//Process login
}
private void logoutProcess(){
//Process logout
}
//20+ other methods which do entirely different tasks.
}
隨着我們添加更多功能,該類將變得極其難以維護和修改。現在我正試圖將這個類分成兩個不同的類。一個是存儲玩家數據,另一個是處理行爲,如下所示。
public class PlayerSession {
final TaskHandler taskHandler = new TaskHandler();
public void messageProcessor(JSONObject clientRequest) throws JSONException {
switch (clientRequest.getString("task")) {
case "login":
taskHandler.loginProcess();
break;
case "logout":
taskHandler.logoutProcess();
break;
// 50+ different actions
}
}
}
public class PlayerData {
String playerId;
String playerName;
// 20+ player data fields, which I am trying to reduce
// and keep only the most used data
public void populateSessionData(String playerId) {
// populate player data from database
}
}
public class TaskHandler {
final PlayerData player = new PlayerData();
private void loginProcess() {
// Process login
}
private void logoutProcess() {
// Process logout
}
// 20+ other methods which do entirely different tasks.
}
而且這個設計爲單個客戶端創建了2個額外的對象,即PlayerData和TaskHandler。對於10,000個併發客戶端的服務器,這會成爲一個問題嗎?這是做到這一點的正確方法嗎?如果不是,這樣的場景的最佳方法是什麼?
某處我讀到的對象只是爲了保存數據不是一個好方法。是對的嗎?
你是否在使用像spring這樣的框架? –
@AshutoshJha我正在使用netty和websockets。這不是基於REST的應用程序。這是一個需要全雙工,實時通信的Web應用程序。 –