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!!

Deixe uma resposta

O seu endereço de email não será publicado Campos obrigatórios são marcados *

Você pode usar estas tags e atributos de HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>