Iced Tea in Crete 2012:Java Application Architecture - modularity patterns

The following modularity patterns were discussed:


 * Base Patterns:
 * Manage Relationsships / Dependencies (Explicitly model the dependencies of your modules)
 * Make your modules reuseable
 * Provide cohesive modules - don't do to many things in one module


 * Dependency Patterns:
 * Avoid Acyclic Relationships
 * Levelize Modules
 * Represent the physical Layers as modules
 * Define container independent modules
 * Make your modules independently deployable


 * Usability Patterns:
 * Have one published interface per module (=> A set of public classes / interfaces / public methods)
 * Make your modules externally configurable
 * Always provide a default implementation for a module interface
 * Provide an module facade to make it easier for the clients to work with the module


 * Extensibility Patterns:
 * Abstract modules
 * Use an indirection layer (e.g. factories) to get implementations
 * Separate abstractions


 * Utility Patterns
 * Colocate exceptions
 * Levelize your module builds
 * Provide an explicit test-module per module