Use agregação: se você possui uma agregação muito complexa no seu domínio, pense na possibilidade de criar subsistemas que contenham o agregador principal e suas partes.
Oriente seus subsistemas em razão dos casos de uso: crie subsistemas que contenham todas as classes da sua aplicação que são necessárias para que cada caso de uso funcione perfeitamente. Você poderá combinar casos de uso semelhantes em um único subsistema.
Agrupe classes de domínio: considere criar um subsistema que armazene todas as classes de domínio (classes de domínio referem-se ao domínio ou à linguagem do usuário). Essas classes de domínio aparecem em vários casos de uso da sua aplicação (e eles precisam persistir em um banco de dados). Juntar todas as classes de domínio em um único lugar facilita a padronização e provê uma forma comum para armazená-las em um banco de dados.
Nem todas as técnicas acima são compatíveis entre si. Por exemplo, a arquitetura em três camadas (apresentação, aplicação e dados) não é compatível com a arquitetura orientada a casos de uso (agrupadas por funcionalidades), entretanto, um sistema muito complexo pode ser criado pela combinação de várias arquiteturas.
Tipos
Separe os componentes dos subsistemas nos seguintes tipos:
Apresentação: o subsistema de apresentação reúne tudo o que é pertinente à interação com o usuário: formulários, layout, navegação, menu de acesso, tela de login, interfaces disponíveis (se funcionará em um computador, um tablet e/ou um smartphone).
Aplicação: o subsistema de apresentação representa a lógica do sistema e comunica-se com a apresentação e com os dados.
Dados: o subsistema de dados é responsável pela persistência dos dados, guardando-os em um repositório (seja um arquivo de texto, XML, ou um SGBD como o Oracle ou SQL Server).