Sto facendo un gioco online e ha un server che gestisce un server di gioco più piccolo. Lo chiamiamo "MasterServer". Questo MasterServer ascolta i comandi sia da TCP che HTTP e risponde a loro utilizzando i propri servizi. Il fatto è che il numero di servizi è in crescita e sono preoccupato che potrebbe raggiungere un punto in cui avere come campi semplici sarebbe troppo.
Ecco come appare
public class MasterServerImpl implements MasterServer
{
private final Logger logger;
private final LevelService levelService;
private final LevelStatsService levelStatsService;
private final ScoreService scoreService;
private final AccountService accountService;
private final FriendService friendService;
private final GameHostingService gameHostingService;
private final CosmeticService cosmeticService;
private final MessageService messageService;
private final ConfigService configService;
private final VersionService versionService;
private final CrashReportService crashReportService;
private final ShopService shopService;
private final DatabaseConnection dbConnection;
private final QueryProvider queryProvider;
private final HttpCommandReceiver httpCommandReceiver;
private final TCPCommandReceiver tcpCommandReceiver;
private final ChatServer chatServer;
// ...
// in constructor
dbConnection = new DatabaseConnection(configService.getDatabaseURL(), configService.getDatabaseUsername(), configService.getDatabasePassword());
try
{
dbConnection.testConnect();
}
catch(SQLException ex)
{
throw new InvalidConfigException("Could not connect to database", ex);
}
queryProvider = new QueryProviderImpl();
levelService = new LevelServiceImpl(dbConnection, queryProvider, baseDir);
levelStatsService = new LevelStatsServiceImpl(dbConnection, queryProvider);
scoreService = new ScoreServiceImpl(dbConnection, queryProvider, baseDir);
accountService = new AccountServiceImpl(dbConnection, queryProvider);
friendService = new FriendServiceImpl(dbConnection, queryProvider);
gameHostingService = new GameHostingServiceImpl(this, logger, port + 2);
cosmeticService = new CosmeticServiceImpl(dbConnection, queryProvider);
messageService = new MessageServiceImpl(dbConnection, queryProvider);
versionService = new GameVersionService(versionRange, configService.getUpdateURL());
crashReportService = new CrashReportServiceImpl(baseDir);
shopService = new ShopServiceImpl(dbConnection, queryProvider);
httpCommandReceiver = new HttpCommandReceiver(this, logger, configService.getHttpPort());
tcpCommandReceiver = new TCPCommandReceiver(this, logger);
chatServer = new ChatServerImpl(accountService, messageService, logger);
Perché i comandi funzionino, passo loro un'istanza MasterServer che è un'interfaccia con le specifiche per ciascun servizio. Fondamentalmente è un'interfaccia di getter per tutti i servizi. Quindi ho anche molti getter in quella classe.
Esiste un design migliore rispetto alla semplice aggiunta di materiale senza attenzione? Un sacco di servizio potrebbe essere aggiunto in futuro. Ogni servizio è abbastanza lungo e unirli perderebbe un po 'di chiarezza nella struttura.