Best practices for code and architecture
The revamp clean old style code and old patterns which are now totally obsoletes for new style code and new pattern that will be obsolete in 2 years.
Coding rules
Iterator
Don't use iterators anymore
iter = collection.iterator; while(iter.hasNext()) { element = iter.next(); }
Use the foreach form instead
for(Element element: collection) { }
Singletons
Don't use singletons anymore
ResourceManager.getInstance()
Instead, use picoContainer to create an object that will have only one instance.
For this, you simply need to declare the component in the container
pico = new PicoBuilder().withConstructorInjection().withCaching().build(); pico.addComponent(CompilerContainer.class, this); ... pico.addComponent(ResourceManager.class);
When you need to get the instance, simply put the component as a constructor parameter
public MyClass(ResourceManager resourceManager, (other dependencies) ) { this.resourceManager = resourceManager; }
Package and module design
Golden rule: no cyclic dependencies
Cyclic dependencies means that your class/package/module have bidirectionnal dependencies. Thus, you can't separate one element from the other, they are a real pain to maintenance, modularization and readability.
If you have a doubt on wether your classes respects this rule, you may use:
- the Dependencies Structure Matrix of Intellij (only available on ultimate version). It is an excellent tool to analyze dependencies and help to delete cycles.
- for Eclipse users, the ispace plugin seems to provide a way to analyze package dependencies.
Duplication
There were some duplications due to architecture limitations in the past.
Now, you can create a component that may execute the commons work and inject in several classes.
(example coming...)