Nossa equipe teve o mesmo problema com modelos de visualização na estrutura do ASP.NET MVC. A composição da hierarquia de visualizações começou a se tornar complexa e, à medida que a interface do usuário evoluiu, tivemos que fazer mudanças cada vez mais altas na estrutura do modelo de visualização e, depois, propagar essas alterações mais adiante e mais adiante passando argumentos de construtor.
Nós percebemos que um modelo de exibição representando uma página da Web inteira realmente precisava de muitas informações de várias fontes. Mesmo assim, conseguimos reutilizar os modelos de visualização em vários contextos, mas configuramos apenas um pouco diferente.
Cheguei à conclusão de que esses modelos de visualização de "nível superior" realmente representavam um caso de uso no aplicativo e tinham necessidades de inicialização diferentes dos modelos de exibição que representavam partes de uma página da Web - componentes individuais.
Introduzimos os objetos de fábrica do modelo de exibição que se especializaram na inicialização dos modelos de exibição complexos. Modelos de exibição que representavam um único componente na tela tinham menos dependências e pudemos continuar a inicializá-los por meio de parâmetros de construtor.
Não havia uma linha clara que se cruzasse onde dissemos "precisamos de uma fábrica de modelos". Tornou-se um pressentimento. Quando a inicialização de um modelo de visão se torna complexa, nós movemos a lógica de inicialização para um método de fábrica, mas a inicialização dos modelos de visão continua sendo responsabilidade dos construtores de cada modelo de visão até chegarmos a esse ponto.