Arquitetura para componentes de interface do usuário reutilizar no asp.net MVC

5

Eu fiz vários projetos LOB ASP.NET MVC (MVC5) e gostaria de re-estruturar como eu lidei com algumas coisas para um novo projeto. Especificamente, tenho um componente que desejo reutilizar em vários locais no aplicativo.

Método atual

Digamos que eu tenha um aplicativo que lide com o gerenciamento de casos de pacientes. Parte disso seria manter uma lista de notas / tarefas soltas no paciente. Tradicionalmente, eu trabalharia como parte de qualquer área primária que estivesse lidando com a entrada das notas: digamos que elas entrassem na parte CaseManager da interface do usuário e, como tal, ficariam no contexto dentro da CaseController (e subsequentemente, o modelo e as visualizações também seriam naturalmente "adjacentes" (por falta de uma palavra melhor) àquele controlador.

Em outro lugar, talvez eu queira exibir uma lista / resumo de notas, bem como talvez um popup de edição rápida ou qualquer outra coisa. Isso geralmente seria tratado separadamente da implementação CaseController mencionada anteriormente.

O que eu gostaria de fazer

Agora, gostaria de usar este editor / monitor do Notes e tratá-lo como um recurso incorporado em qualquer outra exibição que eu deseje. Então, criarei um controlador do Notes com modelos específicos do Notes e visualizações do Notes (para manter todas essas coisas bem encapsuladas), então quando eu quiser exibir as notas "componente" no aplicativo em algum lugar, eu apenas enviaria uma solicitação para o NotesController em conformidade.

Como tal, meu CaseManager agora está "ligado" ao meu CaseController, mas quando o usuário clica na guia Notas, eu quero abrir uma instância do NotesController, passar um ou dois parâmetros relevantes e deixar o NotesController fazer isso. o trabalho pesado e retorne a resposta.

Em outro lugar - não no CaseManager - eu posso querer incorporar de forma semelhante este componente do Notes, e iria lidar com isso da mesma maneira: delegar o processamento para uma nova instância do NotesController e deixar fazer isso.

O que eu fiz

Anteriormente, eu lidei com cenários "leves" como este usando httpContext.Server.TransferRequest , que funciona muito bem ao mover silenciosamente a solicitação e seu contexto para uma nova ação de controlador.

Eu segui o mesmo caminho para o que eu gostaria de fazer agora - então o método de guia do meu CaseController agora diz return MyTransferResultWrapper("/Notes/?id=1234");

Funciona, mas ...

O que não gosto

... parece errado. Não parece correto . Isso funciona, mas cheira a mim, por razões que não consigo colocar meus dedos. Parece que, se eu fosse evoluir essa abordagem como uma "tática de fundo" para lidar com isso em toda essa nova aplicação (que tem muitos desses casos de reutilização), eu estaria realmente lidando com o atual e trabalhando contra ele. termos de jogar em torno de contextos de controladores e, em geral, apenas fazer coisas que talvez o framework nunca tenha sido projetado para lidar.

Alguém pode oferecer alguns conselhos sobre uma abordagem sólida para esse tipo de coisa? Muito obrigado ...

    
por jleach 04.10.2016 / 04:50
fonte

2 respostas

1

Isso pode ser feito com exibições parciais.

A visão parcial aceita um Id de referência que é usado para obter as notas de um pai em particular (como Case no seu exemplo) e então a visão Parcial sempre volta ao NotesController para buscar os dados.

Agora você pode colocar a Visualização parcial em qualquer página, conectar o ID de referência e ela deve funcionar.

Veja este para começar.

    
por 16.09.2018 / 09:11
fonte
0

Você pode chamar seu controlador do Notes de dentro de outras exibições para inserir uma exibição parcial

@Html.Action("action", "controller", parameters)

No entanto, como você diz, se você tiver botões na visualização parcial que chamam ações adicionais, isso se tornará problemático e eu não recomendo

Melhor mover o controle para o lado do cliente e ter um Controlador Api com as consultas e ações relevantes.

O código do lado do cliente pode, então, preencher e executar ações no controle sem complicar o ciclo de vida da página, e você pode reutilizar a mesma visualização parcial com os controles básicos html e javascript em qualquer lugar do aplicativo.

    
por 25.07.2018 / 17:43
fonte