Design-space exploration in model driven engineering : an initial pattern catalogue
design patterns : elements of reusable object - oriented software .