The Domain Theory: Patterns for Knowledge and Software Reuse