Digamos que estou escrevendo um aplicativo da web de blog usando o padrão MVC. O layout típico da página principal do aplicativo de blog é - algum tipo de índice de postagem na parte principal e, além disso, existem algumas partes adicionais, como linha do tempo, painel de navegação de tags, painel de inscrição etc. Esses controles também aparecem em um único pós-visualização e pode aparecer em outras visualizações que possuo.
Minha pergunta é - como devo lidar com esses painéis de lado nas minhas visualizações e controladores. Eu vejo três abordagens aqui:
Crie uma grande classe de modelo de exibição que contenha todas as informações necessárias para renderizar as exibições (índice ou postagem única). Nesse caso, eu poderia transformar esses painéis de lado em visualizações parciais e chamá-los da visualização sendo renderizados como parte desse grande modelo de visualização. A desvantagem é - terei o viewmodel de preenchimento de código espalhado entre vários métodos de controlador, o que significa que o código é duplicado. O que é muito ruim.
Crie outra camada de exibição de renderização. Digamos, a camada superior de renderização recebe uma parte já renderizada de html, ou funções que, quando chamadas, produzem um html. A camada abaixo desta "combinação de camadas parciais" daria apenas visualizações parciais para cada painel que eu desejar, incluindo o conteúdo principal. A desvantagem aqui - uso de memória. A maioria das estruturas modernas processa htmls diretamente no fluxo de saída, mas nessa abordagem as visualizações parciais seriam renderizadas primeiro em objetos de string - o que leva à sobrecarga da memória.
- Use algo como "RenderAction" do asp.net mvc, que chama um método de controlador de uma exibição. Eu acho que esta é a pior solução de 3 dada, porque deixa cair uma abordagem MVC.
A questão não está vinculada a nenhuma estrutura específica, quero entender a maneira geral de fazer coisas assim.
ATUALIZAR
Depois de uma resposta dada, descobri que o post não está claro. Atualização tão razoável aqui:
No termo viewmodel, eu entendo um objeto que contém todos os dados necessários para renderizar uma exibição específica.
Todas as três abordagens envolvem a construção de vistas parciais com seu próprio modelo de vista. Por exemplo (usando a sintaxe C #):
class SinglePostViewModel {
string Text {get;set;}
string Title {get;set;}
string Slug {get;set;}
DateTime PublishedDate {get;set;}
...
}
class TagNavigationPanelViewModel {
string TagText {get;set;}
int PostsCount {get;set;}
}
class CalendarNavigationPanelViewModel {
DateTime YearAndMonth {get;set;}
int PostsCount {get;set;}
}
Minha pergunta é - como combinar bem essas visões parciais.