Ho un progetto Java la cui architettura è piuttosto orientata ai componenti, e mi chiedo
- se questo è un modo comune per organizzare il codice
- quali regole / modelli sono usati,
- se esiste un nome per questo stile di codifica.
Pacchetti di componenti
src/namespace/component1
src/namespace/component1/error
src/namespace/component1/impl
src/namespace/component1/data
src/namespace/component2
...
Ogni componente è un po 'come un servizio. Alcuni lanciano una discussione, alcuni aprono alcuni socket per le connessioni, ecc.
Struttura del componente
// "Root" of the package : Interfaces + InterfaceCoordinator
src/componentx/componentx/ComponentXInterfaceCoordinator.java
src/namespace/componentx/IStartup.java
src/namespace/componentx/IinterfaceFoo.java
// Implementation of the component
src/namespace/componentx/impl/Startup.java
src/namespace/componentx/impl/Foo.java
...
// Exceptions this component can throw
src/namespace/componentx/error/SomeError.java
...
// Data (not really sure exactly what we can call data or not)
src/namespace/componentx/data/SomeConfiguration.java
src/namespace/componentx/data/SomePersistedEntity.java
src/namespace/componentx/data/SomeNonPersistedEntity.java
Applicazione principale
public static void main(String[] args) {
...
logger.info("Initialize ComponentX Component");
ComponentXInterfaceCoordinator.getStartup().init();
logger.info("Initialize ComponentY Component");
ComponentYInterfaceCoordinator.getStartup().init();
...
Coordinatore dell'interfaccia ComponentX
ComponentXInterfaceCoordinator di classe pubblica {
public static IStartup getStartup(){
return Startup.getInstance();
}
Interfaccia di avvio / impl
public interface IStartup {
public void init();
}
public class Startup implements IStartup{
private static Startup instance = null;
private Logger logger = Logger.getLogger("ComponentX");
public static IStartup getInstance() {
if(instance==null)
instance = new Startup();
return instance;
}
@Override
public void init() {
logger.debug("Initialising subcomponents: xxx");
SubComponentXy.getStartup().init();
logger.debug("Initializing Connection Manager Component");
ComponentX.getInstance().addProtocol(new MobileSystemListeningProtocol());
ComponentX.getInstance().startProtocols();
}
}
Inoltre / parte delle domande che ho posto all'inizio:
Anche la maggior parte del componente principale classificato ha questo codice getInstance()
che restituisce l'istanza singleton della classe
getInstance()
segue una specie di modello? o anti-pattern?
È in realtà solo un modo per aggirare il fatto che i metodi statici non possono essere dichiarati nelle interfacce (in java < = 1.7)?
Se avvio un nuovo progetto in JAVA 1.8, dovrei farlo diversamente?