The domain theory :patterns for knowledge and software reuse