The Domain Theory: Patterns For Knowledge And Software Reuse