The problem is a design problem in Object-Oriented Programming that I'm trying to find or think of the best solution for, And not sure of the solutions I have thought of so far.
The problem:
I wrote a class called ComponentsHub whose idea is to store within it all the main objects that are essential for running the program. Each object is static, final, and public. I use a public access modifier to make it easy to access an object via static import or just to access it statically.
package com.rtransfer.net.components;
import java.io.IOException;
import java.util.logging.FileHandler;
import java.util.logging.Logger;
import com.rtransfer.net.system.StorageManager;
public class ComponentsHub {
public static final Logger logger;
public static final Server server;
public static final StorageManager storageManager;
public static final SecurityManager securityManager;
public static final RequestForwarder requestForwarder;
public static final Authenticator authenticator;
public static final Uploader uploader;
public static final ConnectionHandler connectionHandler;
public static final Listener listener;
static {
logger = Logger.getLogger("rtransfer.net");
try {
FileHandler handler = new FileHandler("logs/logs.txt");
logger.addHandler(handler);
} catch (SecurityException | IOException e) {
e.printStackTrace();
}
server = new Server();
storageManager = new StorageManager();
securityManager = new SecurityManager();
requestForwarder = new RequestForwarder();
authenticator = new Authenticator();
uploader = new Uploader();
connectionHandler = new ConnectionHandler();
listener = new Listener();
}
}
It's pretty obvious that there are some issues with this code/design (Hope you can tell me some of them). For example not separating concerns. I do not feel comfortable with this architecture so much, I think I have created some kind of a "God Class".
Solutions I thought of:
-
Create classes that will build these objects, such as Builders or Factories, and so I will remove from ComponentsHub the responsibility for the construction and initialization of these objects.
-
Create classes that will centralize these objects in a more categorical way. Or in other words, create sub-ComponentsHubs.
I know this is a pretty common type of problem in designing object-oriented systems. I want to solve this so that I do not have to live in nightmares in the further development of my software.
Are the solutions I proposed solves part of the problem? Are there alternatives? I would be happy if you would recommend me suitable design patterns or other techniques that will allow me to solve this problem. How and where should I create objects and allow fairly simple access to them?
Aucun commentaire:
Enregistrer un commentaire