Tudo dinâmico no código! Mas nem tudo…
Recentemente em algumas análises de desempenho e code-review percebi que algumas aplicações pecam muito quando o quesito é: “quero tudo dinâmico”.
Colocar espaços em uma página mestra (para galera de .Net, masterpage) para preencher dinamicamente, através de código server-side não é uma solução nada elegante e possui um impacto imenso em performance, principalmente de um portal. É um custo desnecessário.
Páginas mestras definem o layout, o look’n feel da empresa toda. É fundamental que não existam muitas páginas mestras para que a maioria das aplicações possam reutilizá-las sempre que possível (é possível fazer MasterPages MVC reutilizarem MasterPages WebForms!!).
Quer alterá-la? Mude (com cuidado)! Facilmente todas as suas aplicações serão adaptadas ao novo layout, sem precisar sequer se preocupar com re-compilação ou deploy de DLL’s. Carregar arquivos javascripts e css colocando dentro de um literal ou um placeholder precisa ter um motivo muito forte e que não possa ser resolvido através de outras soluções como temas, por exemplo.
Uma master simples, sem código server-side, componentes (user controls) simples, sem code-behind são ideais em um ambiente cheio de aplicações e de alta-performance.
Quanto mais simples melhor! E mais fácil de alterar!
Em .Net para tirar a necessidade de um code-behind basta NÃO especificar na primeira linha os parâmetros code-behind e inherits. Delete o código compilável (.aspx.cs, ascx.designer.cs, .aspx.vb, etc)
<!-- User Control --> <%@ Control Language="C#" AutoEventWireup="true" %> <!-- MasterPage --> <%@ Master Language="C#" AutoEventWireup="true"%> <!-- Especificando o UC na página --> <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication1.WebForm1" %> <%@ Register src="WebUserControl1.ascx" tagname="WebUserControl1" tagprefix="uc1" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> </head> <body> <form id="form1" runat="server"> <div> <uc1:WebUserControl1 ID="WebUserControl11" runat="server" /> </div> </form> </body> </html>
Para o deploy: No servidor, geralmente deixamos uma pasta Shared na raiz do site, dentro desta pasta colocamos as masterpages e controles. Nas aplicações .Net (MVC e webforms) em seu deploy no servidor removemos a pasta Shared e no IIS colocamos um diretório virtual apontando para a pasta Shared que está na raiz, para que todas usem a mesma pasta. E pronto! Compartilhando controles e masterpages!
Ter o UC’s isolado em uma DLL não é legal, mas útil em aplicações extremamente dinâmicas baseadas em plugins. Em um próximo post explico como colocar os arquivos ASPX/ASCX embarcados (embedded) em uma DLL e como alterar o VirtualPathProvider para carregar esse controle sem nenhuma dor de cabeça, com se estivessem na própria aplicação principal.
Abraços e até a próxima!!
- Interoperabilidade: Sistema Operacional 64-bits + Sql Server 2008 vs Legado VB6/C++ 32-bits
- Asp.Net MVC 4 – Como buscar uma url dentro do seu site