<link type="text/css" rel="stylesheet" href="http://isbyte.com/wp-content/plugins/ajax-comment-posting/acp.css" /><?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Thiago Marotta</title>
	<atom:link href="http://isbyte.com/index.php/feed/" rel="self" type="application/rss+xml" />
	<link>http://isbyte.com</link>
	<description>Analista de Sistemas, Desenvolvedor, Geek.</description>
	<lastBuildDate>Sat, 17 Oct 2009 22:05:35 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Definir permiss&#227;o para Stored Procedures no SQL Server</title>
		<link>http://isbyte.com/index.php/2009/10/definir-permisso-para-stored-procedures-no-sql-server/</link>
		<comments>http://isbyte.com/index.php/2009/10/definir-permisso-para-stored-procedures-no-sql-server/#comments</comments>
		<pubDate>Sun, 04 Oct 2009 05:35:09 +0000</pubDate>
		<dc:creator>Thiago Marotta</dc:creator>
				<category><![CDATA[Banco de Dados]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[SQL Server 2005]]></category>
		<category><![CDATA[SQL Server 2008]]></category>
		<category><![CDATA[bulk grant]]></category>
		<category><![CDATA[definir permissões sql]]></category>
		<category><![CDATA[executar procedure]]></category>
		<category><![CDATA[execute stored procedure]]></category>
		<category><![CDATA[grant exec]]></category>
		<category><![CDATA[grant exec procedure]]></category>
		<category><![CDATA[grant exec sored procedure]]></category>
		<category><![CDATA[grant sp]]></category>
		<category><![CDATA[grant sps]]></category>
		<category><![CDATA[grant stored procedures]]></category>
		<category><![CDATA[permissão automática procedures]]></category>
		<category><![CDATA[permissão em massa]]></category>
		<category><![CDATA[permissão sp]]></category>
		<category><![CDATA[permissão sql]]></category>
		<category><![CDATA[permissão uma por uma]]></category>
		<category><![CDATA[permissões banco de dados]]></category>
		<category><![CDATA[permissões procedures]]></category>
		<category><![CDATA[permissões sql]]></category>
		<category><![CDATA[procedimentos armazenados]]></category>
		<category><![CDATA[procedure]]></category>
		<category><![CDATA[quotename]]></category>
		<category><![CDATA[sproc]]></category>
		<category><![CDATA[sql management studio]]></category>
		<category><![CDATA[stored procedure]]></category>

		<guid isPermaLink="false">http://isbyte.com/?p=341</guid>
		<description><![CDATA[Como definir permissões de execução para todas as Stored Procedures de um Banco de Dados de uma só vez? Defina o direito de executar as SPs do Banco de Dados [...]]]></description>
			<content:encoded><![CDATA[<!-- AdSense Now! V1.59 -->
<!-- Post[count: 1] -->
<div class="adsense adsense-leadin" style="float:right;margin: 12px;"><script type="text/javascript"><!--
google_ad_client = "pub-1637217696739495";
/* 468x60, criado 21/03/09 */
google_ad_slot = "4091093338";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div><div id=HOTWordsTxt name=HOTWordsTxt><p style="text-align:justify;"> Muitas pessoas têm me perguntado, recentemente, como definir permissões de execução para todas as <em>Stored Procedures</em> de um Banco de Dados <em>SQL Server 2005/2008</em> de maneira automática, sem que seja necessário utilizar a interface gráfica do <em>SQL Management Studio</em> que requer que você defina as permissões das <em>SPs</em> uma por uma.</p>
<p style="text-align:justify;">No <em>SQL Server</em>, para definir permissão de execução para uma <em>Stored Procedure </em>tudo o que você precisa fazer é utilizar a sintaxe:
<pre class="brush: sql;">GRANT EXECUTE ON [dbo].[sproc] TO [Usuário]</pre>
<p>  * [dbo].[sproc] é o nome da <em>Stored Procedure</em><br /> * [Usuário] é o nome da conta de usuário que receberá a permissão. </p>
<p style="text-align:justify;">Entretanto, durante o desenvolvimento de um sistema computacional com um mínimo de complexidade, são criadas inúmeras <em>Stored Procedures</em>, o que torna a tarefa de executar a permissão em massa para os procedimentos armazenados uma atividade cansativa.</p>
<p style="text-align:justify;">Para resolver este problema, preparei o seguinte <em>script</em> que irá gerar, automaticamente, os comandos <em>GRANT</em> para todas as Stored Procedures definidas no seu Banco de Dados:</p>
<pre class="brush: sql;">
-- Thiago Marotta Couto
-- October, 04 - 2009
-- http://isbyte.com/	

DECLARE @userName AS NVARCHAR(100);
DECLARE @namePattern AS NVARCHAR(10);

	-- Nome do Usuário
	SET @userName = N'livebackup';

	-- Filtrar Stored Procedures
	-- Exemplos:
	--		%	Todas Stored Procedures
	--		spc%	Todas Stored Procedures que começam com "spc"
	--		%SP	Todas Stored Procedures que terminam com "SP"
	SET @namePattern = N'%';

	-- Define o Banco de Dados
	USE [master]

	SELECT
		N'GRANT EXECUTE ON '
		+ QUOTENAME(OBJECT_SCHEMA_NAME([object_id])) + '.'
		+ QUOTENAME([name])
		+ N' TO '
		+ QUOTENAME(@userName)
		+ N';'
	FROM sys.procedures
	WHERE [name] LIKE @namePattern;
</pre>
<p style="text-align:justify;">Após executar o <em>script</em>, copie o resultado (lista de <em>GRANTs</em>) e execute na sua base de dados.</p>
<p><CENTER><table border="0">
  <tr>
    <td width="216" height="323" align="center" valign="middle"><a href="http://www.livrariacultura.com.br/scripts/cultura/externo/index.asp?id_link=6673&tipo=2&isbn=8560031928" target="_blank"><img src="http://isbyte.com/wp-content/uploads/2009/10/sqlserverpassopasso.jpg" alt="SQL Server - Passo a Passo" title="SQL Server - Passo a Passo" width="216" height="323" class="aligncenter size-full wp-image-412" /></a></td>
    <td width="216" height="323" align="center" valign="middle"><a href="http://www.livrariacultura.com.br/scripts/cultura/externo/index.asp?id_link=6673&tipo=2&isbn=8576083019" target="_blank"><img src="http://isbyte.com/wp-content/uploads/2009/10/sqlserver2008leigos.jpg" alt="SQL Server 2008 Para Leigos" title="SQL Server 2008 Para Leigos" width="215" height="323" class="size-full wp-image-413" /></a></td>
    <td width="216" height="323" align="center" valign="middle"><a href="http://www.livrariacultura.com.br/scripts/cultura/externo/index.asp?id_link=6673&tipo=2&isbn=8585184280" target="_blank"><img src="http://isbyte.com/wp-content/uploads/2009/10/sqlguiarapido.jpg" alt="SQL Guia Rápido" title="SQL Guia Rápido" width="214" height="323" class="size-full wp-image-414" /></a></td>
  </tr>
</table></CENTER></p>
</div><!-- AdSense Now! V1.59 -->
<!-- Post[count: 2] -->
<div class="adsense adsense-leadout" style="text-align:center;margin: 12px;"><script type="text/javascript"><!--
google_ad_client = "pub-1637217696739495";
/* 468x60, criado 21/03/09 */
google_ad_slot = "4091093338";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div>]]></content:encoded>
			<wfw:commentRss>http://isbyte.com/index.php/2009/10/definir-permisso-para-stored-procedures-no-sql-server/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Como criar propriedades em UserControls do ASP.NET</title>
		<link>http://isbyte.com/index.php/2009/09/como-criar-propriedades-em-usercontrols-do-aspnet/</link>
		<comments>http://isbyte.com/index.php/2009/09/como-criar-propriedades-em-usercontrols-do-aspnet/#comments</comments>
		<pubDate>Sat, 05 Sep 2009 18:00:33 +0000</pubDate>
		<dc:creator>Thiago Marotta</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Orientação a Objeto]]></category>
		<category><![CDATA[.NET Framework]]></category>
		<category><![CDATA[.NET Reflector]]></category>
		<category><![CDATA[Armazenar Dados ViewState]]></category>
		<category><![CDATA[ASP.NET Propertie]]></category>
		<category><![CDATA[ASP.NET ViewState]]></category>
		<category><![CDATA[Guardar ViewState]]></category>
		<category><![CDATA[Padrão]]></category>
		<category><![CDATA[Persist ViewState]]></category>
		<category><![CDATA[Persistência ViewState]]></category>
		<category><![CDATA[Properties]]></category>
		<category><![CDATA[Properties Pattern]]></category>
		<category><![CDATA[Propriedade ASP.NET]]></category>
		<category><![CDATA[Propriedade de UserControls]]></category>
		<category><![CDATA[Propriedade System.Boolean]]></category>
		<category><![CDATA[Propriedade System.Int32]]></category>
		<category><![CDATA[Propriedade System.String]]></category>
		<category><![CDATA[Propriedades]]></category>
		<category><![CDATA[Propriedades UserControl]]></category>
		<category><![CDATA[Public Virtual Properties]]></category>
		<category><![CDATA[Store Values ViewState]]></category>
		<category><![CDATA[System.Boolean Properties]]></category>
		<category><![CDATA[System.Boolean ViewState]]></category>
		<category><![CDATA[System.Int32 Properties]]></category>
		<category><![CDATA[System.Int32 ViewState]]></category>
		<category><![CDATA[System.String Properties]]></category>
		<category><![CDATA[System.String ViewState]]></category>
		<category><![CDATA[ViewState]]></category>

		<guid isPermaLink="false">http://isbyte.com/?p=304</guid>
		<description><![CDATA[Como desenvolver propriedades em UserControls ASP.NET, conforme o padrão adotado pela Microsoft na construção do .NET Framework [...]]]></description>
			<content:encoded><![CDATA[<!-- AdSense Now! V1.59 -->
<!-- Post[count: 3] -->
<div class="adsense adsense-leadin" style="float:right;margin: 12px;"><script type="text/javascript"><!--
google_ad_client = "pub-1637217696739495";
/* 468x60, criado 21/03/09 */
google_ad_slot = "4091093338";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div><div id=HOTWordsTxt name=HOTWordsTxt><p align="justify">Em todos os projetos ASP.NET que estive envolvido em minha vida, quase nunca me deparei com implementações idênticas de propriedades de ASP.NET UserControls. E não estou me referindo a propriedades de complexidade avançada ou média, falo sobre o tipo mais básico de propriedade, aquelas utilizadas para persistir uma informação na ViewState.</p>
<p align="justify">Particularmente esta é uma questão que, embora não muito importante, sempre me deixou muito curioso, mas que, por estar envolvido em questões mais relevantes, nunca reservei um tempo para pesquisar a respeito e descobrir a melhor maneira de persistir e recuperar uma informação na ViewState do ASP.NET através de uma propriedade.</p>
<p align="justify">Depois de muito pesquisar pelo Google sem encontrar um padrão de implementação bem definido, resolvi abrir o .NET Reflector e investigar como a Microsoft implementou esta tarefa em seus WebControls.</p>
<p align="justify">Durante esta análise do código-fonte do .NET Framework, percebi que existe um certo padrão em todo o código-fonte, onde a Microsoft define propriedades de objetos seguindo o esquema abaixo:</p>
<p align="justify">&#160;</p>
<p align="justify"><strong>Propriedades “<em>System.String</em>”:</strong></p>
<pre class="brush: csharp">[Bindable(true, BindingDirection.TwoWay),
PersistenceMode(PersistenceMode.EncodedInnerDefaultProperty),
Editor(&quot;System.ComponentModel.Design.MultilineStringEditor,System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a&quot;, typeof(UITypeEditor)),
Localizable(true),
WebCategory(&quot;Appearance&quot;),
DefaultValue(&quot;&quot;),
WebSysDescription(&quot;TextBox_Text&quot;)]

public virtual string Text
{
    get
    {
        string str = (string) this.ViewState[&quot;Text&quot;];
        if (str != null)
        {
            return str;
        }
        return string.Empty;
    }
    set
    {
        this.ViewState[&quot;Text&quot;] = value;
    }
}</pre>
<p>* Propriedade <em>Text</em> do objeto <em>System.Web.UI.WebControls.TextBox</em>.</p>
<p>&#160;</p>
<p><strong>Propriedades <em>“System.Boolean</em>”:</strong></p>
<pre class="brush: csharp">[DefaultValue(false),
Bindable(true,
BindingDirection.TwoWay),
Themeable(false),
WebSysDescription(&quot;CheckBox_Checked&quot;)]

public virtual bool Checked
{
    get
    {
        object obj2 = this.ViewState[&quot;Checked&quot;];
        return ((obj2 != null) &amp;&amp; ((bool) obj2));
    }
    set
    {
        this.ViewState[&quot;Checked&quot;] = value;
    }
}</pre>
<p>* Propriedade <em>Checked</em> do objeto <em>System.Web.UI.WebControls.CheckBox</em>.</p>
<p>&#160;</p>
<p><strong>Propriedades “<em>System.Int32</em>”:</strong></p>
<pre class="brush: csharp;">
[WebSysDescription(&quot;TableCell_RowSpan&quot;),
WebCategory(&quot;Layout&quot;),
DefaultValue(0)]

public virtual int RowSpan
{
    get
    {
        object obj2 = this.ViewState[&quot;RowSpan&quot;];
        if (obj2 != null)
        {
            return (int) obj2;
        }
        return 0;
    }
    set
    {
        if (value &lt; 0)
        {
            throw new ArgumentOutOfRangeException(&quot;value&quot;);
        }
        this.ViewState[&quot;RowSpan&quot;] = value;
    }
}</pre>
<p>* Propriedade <em>RowSpan</em> do objeto <em>System.Web.UI.WebControls.TableCell</em>.</p>
</div>]]></content:encoded>
			<wfw:commentRss>http://isbyte.com/index.php/2009/09/como-criar-propriedades-em-usercontrols-do-aspnet/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Armazenar e recuperar imagens no Banco de Dados</title>
		<link>http://isbyte.com/index.php/2009/08/armazenar-e-recuperar-imagens-no-banco-de-dados/</link>
		<comments>http://isbyte.com/index.php/2009/08/armazenar-e-recuperar-imagens-no-banco-de-dados/#comments</comments>
		<pubDate>Mon, 31 Aug 2009 02:27:49 +0000</pubDate>
		<dc:creator>Thiago Marotta</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Análise de Sistemas]]></category>
		<category><![CDATA[Banco de Dados]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Orientação a Objeto]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[SQL Server 2005]]></category>
		<category><![CDATA[SQL Server 2008]]></category>
		<category><![CDATA[add verb]]></category>
		<category><![CDATA[Armazenar arquivos Banco de Dados]]></category>
		<category><![CDATA[Armazenar arquivos SQL Server]]></category>
		<category><![CDATA[Armazenar Imagens no Banco de Dados]]></category>
		<category><![CDATA[Armazenar imagens SQL Server]]></category>
		<category><![CDATA[ASP.NET File Upload]]></category>
		<category><![CDATA[C# File Upload]]></category>
		<category><![CDATA[Camada de acesso a dados]]></category>
		<category><![CDATA[Data Access Layer]]></category>
		<category><![CDATA[DataLayer]]></category>
		<category><![CDATA[Fazer Upload Arquivo ASP.NET]]></category>
		<category><![CDATA[Fazer Upload Arquivo C#]]></category>
		<category><![CDATA[Fazer Upload Arquivo VB.NET]]></category>
		<category><![CDATA[FILESTREAM datatype]]></category>
		<category><![CDATA[FILESTREAM SQL Server 2008]]></category>
		<category><![CDATA[HTML File]]></category>
		<category><![CDATA[IHttpHandler]]></category>
		<category><![CDATA[IHttpHandler ASP.NET]]></category>
		<category><![CDATA[IHttpHandler bmp]]></category>
		<category><![CDATA[IHttpHandler gif]]></category>
		<category><![CDATA[IHttpHandler jpeg]]></category>
		<category><![CDATA[IHttpHandler jpg]]></category>
		<category><![CDATA[IHttpHandler png]]></category>
		<category><![CDATA[IHttpHandler Web.Config]]></category>
		<category><![CDATA[IHttpModule]]></category>
		<category><![CDATA[ImageHandler]]></category>
		<category><![CDATA[ImageHandler IHttpHandler]]></category>
		<category><![CDATA[Input File]]></category>
		<category><![CDATA[Input Type File]]></category>
		<category><![CDATA[Inserir Arquivos no Banco de Dados]]></category>
		<category><![CDATA[Inserir imagens no Banco de Dados]]></category>
		<category><![CDATA[Inserir imagens SQL Server]]></category>
		<category><![CDATA[Insert Files Database]]></category>
		<category><![CDATA[Insert Files SQL Server]]></category>
		<category><![CDATA[Insert Images Database]]></category>
		<category><![CDATA[Insert Images SQL Server]]></category>
		<category><![CDATA[MIME Type]]></category>
		<category><![CDATA[ObjectModel]]></category>
		<category><![CDATA[Postar Arquivo ASP.NET]]></category>
		<category><![CDATA[Postar Arquivo C#]]></category>
		<category><![CDATA[Postar Arquivo VB.NET]]></category>
		<category><![CDATA[Store Files SQL Server]]></category>
		<category><![CDATA[Store Images In Database]]></category>
		<category><![CDATA[Store Images SQL Server]]></category>
		<category><![CDATA[Subir Arquivo ASP.NET]]></category>
		<category><![CDATA[Subir Arquivo C#]]></category>
		<category><![CDATA[Subir Arquivo VB.NET]]></category>
		<category><![CDATA[Upload File VB.NET]]></category>
		<category><![CDATA[Varbinary(MAX)]]></category>
		<category><![CDATA[Varbinary(max) SQL Server]]></category>

		<guid isPermaLink="false">http://isbyte.com/?p=290</guid>
		<description><![CDATA[Este artigo demonstra como armazenar e recuperar arquivos e imagens no SQL Server e outros bancos de dados, bem como utilizar o IHttpHandler para responder a requisições de maneira [...]]]></description>
			<content:encoded><![CDATA[<div id=HOTWordsTxt name=HOTWordsTxt><p><!--[if !mso]> <mce:style><!  v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VML);} .shape {behavior:url(#default#VML);} --> <!--[endif]--><!--[if gte mso 9]><xml> <w:WordDocument> <w:View>Normal</w:View> <w:Zoom>0</w:Zoom> <w:TrackMoves>false</w:TrackMoves> <w:TrackFormatting /> <w:HyphenationZone>21</w:HyphenationZone> <w:PunctuationKerning /> <w:ValidateAgainstSchemas /> <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid> <w:IgnoreMixedContent>false</w:IgnoreMixedContent> <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText> <w:DoNotPromoteQF /> <w:LidThemeOther>PT-BR</w:LidThemeOther> <w:LidThemeAsian>X-NONE</w:LidThemeAsian> <w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript> <w:Compatibility> <w:BreakWrappedTables /> <w:SnapToGridInCell /> <w:WrapTextWithPunct /> <w:UseAsianBreakRules /> <w:DontGrowAutofit /> <w:SplitPgBreakAndParaMark /> <w:DontVertAlignCellWithSp /> <w:DontBreakConstrainedForcedTables /> <w:DontVertAlignInTxbx /> <w:Word11KerningPairs /> <w:CachedColBalance /> </w:Compatibility> <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel> <m:mathPr> <m:mathFont m:val="Cambria Math" /> <m:brkBin m:val="before" /> <m:brkBinSub m:val="&#45;-" /> <m:smallFrac m:val="off" /> <m:dispDef /> <m:lMargin m:val="0" /> <m:rMargin m:val="0" /> <m:defJc m:val="centerGroup" /> <m:wrapIndent m:val="1440" /> <m:intLim m:val="subSup" /> <m:naryLim m:val="undOvr" /> </m:mathPr></w:WordDocument> </xml><![endif]--><!--[if gte mso 9]><xml> <w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true"   DefSemiHidden="true" DefQFormat="false" DefPriority="99"   LatentStyleCount="267"> <w:LsdException Locked="false" Priority="0" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Normal" /> <w:LsdException Locked="false" Priority="9" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="heading 1" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 2" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 3" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 4" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 5" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 6" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 7" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9" /> <w:LsdException Locked="false" Priority="39" Name="toc 1" /> <w:LsdException Locked="false" Priority="39" Name="toc 2" /> <w:LsdException Locked="false" Priority="39" Name="toc 3" /> <w:LsdException Locked="false" Priority="39" Name="toc 4" /> <w:LsdException Locked="false" Priority="39" Name="toc 5" /> <w:LsdException Locked="false" Priority="39" Name="toc 6" /> <w:LsdException Locked="false" Priority="39" Name="toc 7" /> <w:LsdException Locked="false" Priority="39" Name="toc 8" /> <w:LsdException Locked="false" Priority="39" Name="toc 9" /> <w:LsdException Locked="false" Priority="35" QFormat="true" Name="caption" /> <w:LsdException Locked="false" Priority="10" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Title" /> <w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font" /> <w:LsdException Locked="false" Priority="11" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Subtitle" /> <w:LsdException Locked="false" Priority="22" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Strong" /> <w:LsdException Locked="false" Priority="20" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Emphasis" /> <w:LsdException Locked="false" Priority="59" SemiHidden="false"    UnhideWhenUsed="false" Name="Table Grid" /> <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Placeholder Text" /> <w:LsdException Locked="false" Priority="1" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="No Spacing" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 1" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 1" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 1" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 1" /> <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Revision" /> <w:LsdException Locked="false" Priority="34" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="List Paragraph" /> <w:LsdException Locked="false" Priority="29" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Quote" /> <w:LsdException Locked="false" Priority="30" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Intense Quote" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 1" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 1" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 1" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 1" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 1" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 2" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 2" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 2" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 2" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 2" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 2" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 2" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 2" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 2" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 3" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 3" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 3" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 3" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 3" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 3" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 3" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 3" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 3" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 4" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 4" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 4" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 4" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 4" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 4" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 4" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 4" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 4" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 5" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 5" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 5" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 5" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 5" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 5" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 5" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 5" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 5" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 6" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 6" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 6" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 6" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 6" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 6" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 6" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 6" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 6" /> <w:LsdException Locked="false" Priority="19" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis" /> <w:LsdException Locked="false" Priority="21" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis" /> <w:LsdException Locked="false" Priority="31" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference" /> <w:LsdException Locked="false" Priority="32" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Intense Reference" /> <w:LsdException Locked="false" Priority="33" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Book Title" /> <w:LsdException Locked="false" Priority="37" Name="Bibliography" /> <w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading" /> </w:LatentStyles> </xml><![endif]--><!--  /* Font Definitions */  @font-face 	{font-family:Wingdings; 	panose-1:5 0 0 0 0 0 0 0 0 0; 	mso-font-charset:2; 	mso-generic-font-family:auto; 	mso-font-pitch:variable; 	mso-font-signature:0 268435456 0 0 -2147483648 0;} @font-face 	{font-family:"Cambria Math"; 	panose-1:2 4 5 3 5 4 6 3 2 4; 	mso-font-charset:0; 	mso-generic-font-family:roman; 	mso-font-pitch:variable; 	mso-font-signature:-1610611985 1107304683 0 0 159 0;} @font-face 	{font-family:Calibri; 	panose-1:2 15 5 2 2 2 4 3 2 4; 	mso-font-charset:0; 	mso-generic-font-family:swiss; 	mso-font-pitch:variable; 	mso-font-signature:-1610611985 1073750139 0 0 159 0;}  /* Style Definitions */  p.MsoNormal, li.MsoNormal, div.MsoNormal 	{mso-style-unhide:no; 	mso-style-qformat:yes; 	mso-style-parent:""; 	margin-top:0cm; 	margin-right:0cm; 	margin-bottom:10.0pt; 	margin-left:0cm; 	line-height:115%; 	mso-pagination:widow-orphan; 	font-size:11.0pt; 	font-family:"Calibri","sans-serif"; 	mso-ascii-font-family:Calibri; 	mso-ascii-theme-font:minor-latin; 	mso-fareast-font-family:Calibri; 	mso-fareast-theme-font:minor-latin; 	mso-hansi-font-family:Calibri; 	mso-hansi-theme-font:minor-latin; 	mso-bidi-font-family:"Times New Roman"; 	mso-bidi-theme-font:minor-bidi; 	mso-fareast-language:EN-US;} p.MsoCaption, li.MsoCaption, div.MsoCaption 	{mso-style-priority:35; 	mso-style-qformat:yes; 	mso-style-next:Normal; 	margin-top:0cm; 	margin-right:0cm; 	margin-bottom:10.0pt; 	margin-left:0cm; 	mso-pagination:widow-orphan; 	font-size:9.0pt; 	font-family:"Calibri","sans-serif"; 	mso-ascii-font-family:Calibri; 	mso-ascii-theme-font:minor-latin; 	mso-fareast-font-family:Calibri; 	mso-fareast-theme-font:minor-latin; 	mso-hansi-font-family:Calibri; 	mso-hansi-theme-font:minor-latin; 	mso-bidi-font-family:"Times New Roman"; 	mso-bidi-theme-font:minor-bidi; 	color:#4F81BD; 	mso-themecolor:accent1; 	mso-fareast-language:EN-US; 	font-weight:bold;} a:link, span.MsoHyperlink 	{mso-style-priority:99; 	color:blue; 	mso-themecolor:hyperlink; 	text-decoration:underline; 	text-underline:single;} a:visited, span.MsoHyperlinkFollowed 	{mso-style-noshow:yes; 	mso-style-priority:99; 	color:purple; 	mso-themecolor:followedhyperlink; 	text-decoration:underline; 	text-underline:single;} p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph 	{mso-style-priority:34; 	mso-style-unhide:no; 	mso-style-qformat:yes; 	margin-top:0cm; 	margin-right:0cm; 	margin-bottom:10.0pt; 	margin-left:36.0pt; 	mso-add-space:auto; 	line-height:115%; 	mso-pagination:widow-orphan; 	font-size:11.0pt; 	font-family:"Calibri","sans-serif"; 	mso-ascii-font-family:Calibri; 	mso-ascii-theme-font:minor-latin; 	mso-fareast-font-family:Calibri; 	mso-fareast-theme-font:minor-latin; 	mso-hansi-font-family:Calibri; 	mso-hansi-theme-font:minor-latin; 	mso-bidi-font-family:"Times New Roman"; 	mso-bidi-theme-font:minor-bidi; 	mso-fareast-language:EN-US;} p.MsoListParagraphCxSpFirst, li.MsoListParagraphCxSpFirst, div.MsoListParagraphCxSpFirst 	{mso-style-priority:34; 	mso-style-unhide:no; 	mso-style-qformat:yes; 	mso-style-type:export-only; 	margin-top:0cm; 	margin-right:0cm; 	margin-bottom:0cm; 	margin-left:36.0pt; 	margin-bottom:.0001pt; 	mso-add-space:auto; 	line-height:115%; 	mso-pagination:widow-orphan; 	font-size:11.0pt; 	font-family:"Calibri","sans-serif"; 	mso-ascii-font-family:Calibri; 	mso-ascii-theme-font:minor-latin; 	mso-fareast-font-family:Calibri; 	mso-fareast-theme-font:minor-latin; 	mso-hansi-font-family:Calibri; 	mso-hansi-theme-font:minor-latin; 	mso-bidi-font-family:"Times New Roman"; 	mso-bidi-theme-font:minor-bidi; 	mso-fareast-language:EN-US;} p.MsoListParagraphCxSpMiddle, li.MsoListParagraphCxSpMiddle, div.MsoListParagraphCxSpMiddle 	{mso-style-priority:34; 	mso-style-unhide:no; 	mso-style-qformat:yes; 	mso-style-type:export-only; 	margin-top:0cm; 	margin-right:0cm; 	margin-bottom:0cm; 	margin-left:36.0pt; 	margin-bottom:.0001pt; 	mso-add-space:auto; 	line-height:115%; 	mso-pagination:widow-orphan; 	font-size:11.0pt; 	font-family:"Calibri","sans-serif"; 	mso-ascii-font-family:Calibri; 	mso-ascii-theme-font:minor-latin; 	mso-fareast-font-family:Calibri; 	mso-fareast-theme-font:minor-latin; 	mso-hansi-font-family:Calibri; 	mso-hansi-theme-font:minor-latin; 	mso-bidi-font-family:"Times New Roman"; 	mso-bidi-theme-font:minor-bidi; 	mso-fareast-language:EN-US;} p.MsoListParagraphCxSpLast, li.MsoListParagraphCxSpLast, div.MsoListParagraphCxSpLast 	{mso-style-priority:34; 	mso-style-unhide:no; 	mso-style-qformat:yes; 	mso-style-type:export-only; 	margin-top:0cm; 	margin-right:0cm; 	margin-bottom:10.0pt; 	margin-left:36.0pt; 	mso-add-space:auto; 	line-height:115%; 	mso-pagination:widow-orphan; 	font-size:11.0pt; 	font-family:"Calibri","sans-serif"; 	mso-ascii-font-family:Calibri; 	mso-ascii-theme-font:minor-latin; 	mso-fareast-font-family:Calibri; 	mso-fareast-theme-font:minor-latin; 	mso-hansi-font-family:Calibri; 	mso-hansi-theme-font:minor-latin; 	mso-bidi-font-family:"Times New Roman"; 	mso-bidi-theme-font:minor-bidi; 	mso-fareast-language:EN-US;} .MsoChpDefault 	{mso-style-type:export-only; 	mso-default-props:yes; 	mso-ascii-font-family:Calibri; 	mso-ascii-theme-font:minor-latin; 	mso-fareast-font-family:Calibri; 	mso-fareast-theme-font:minor-latin; 	mso-hansi-font-family:Calibri; 	mso-hansi-theme-font:minor-latin; 	mso-bidi-font-family:"Times New Roman"; 	mso-bidi-theme-font:minor-bidi; 	mso-fareast-language:EN-US;} .MsoPapDefault 	{mso-style-type:export-only; 	margin-bottom:10.0pt; 	line-height:115%;} @page Section1 	{size:612.0pt 792.0pt; 	margin:70.85pt 3.0cm 70.85pt 3.0cm; 	mso-header-margin:36.0pt; 	mso-footer-margin:36.0pt; 	mso-paper-source:0;} div.Section1 	{page:Section1;}  /* List Definitions */  @list l0 	{mso-list-id:2703987; 	mso-list-type:hybrid; 	mso-list-template-ids:-982900086 68550657 68550659 68550661 68550657 68550659 68550661 68550657 68550659 68550661;} @list l0:level1 	{mso-level-number-format:bullet; 	mso-level-text:; 	mso-level-tab-stop:none; 	mso-level-number-position:left; 	text-indent:-18.0pt; 	font-family:Symbol;} @list l0:level2 	{mso-level-number-format:bullet; 	mso-level-text:o; 	mso-level-tab-stop:none; 	mso-level-number-position:left; 	text-indent:-18.0pt; 	font-family:"Courier New";} @list l1 	{mso-list-id:123742546; 	mso-list-type:hybrid; 	mso-list-template-ids:-1016061618 68550657 68550659 68550661 68550657 68550659 68550661 68550657 68550659 68550661;} @list l1:level1 	{mso-level-number-format:bullet; 	mso-level-text:; 	mso-level-tab-stop:none; 	mso-level-number-position:left; 	text-indent:-18.0pt; 	font-family:Symbol;} @list l2 	{mso-list-id:492453523; 	mso-list-type:hybrid; 	mso-list-template-ids:-1330591292 68550657 68550659 68550661 68550657 68550659 68550661 68550657 68550659 68550661;} @list l2:level1 	{mso-level-number-format:bullet; 	mso-level-text:; 	mso-level-tab-stop:none; 	mso-level-number-position:left; 	margin-left:37.9pt; 	text-indent:-18.0pt; 	font-family:Symbol;} @list l3 	{mso-list-id:968317179; 	mso-list-type:hybrid; 	mso-list-template-ids:-805522318 68550671 68550681 68550683 68550671 68550681 68550683 68550671 68550681 68550683;} @list l3:level1 	{mso-level-tab-stop:none; 	mso-level-number-position:left; 	text-indent:-18.0pt;} @list l4 	{mso-list-id:1102191600; 	mso-list-type:hybrid; 	mso-list-template-ids:474656364 68550657 68550659 68550661 68550657 68550659 68550661 68550657 68550659 68550661;} @list l4:level1 	{mso-level-number-format:bullet; 	mso-level-text:; 	mso-level-tab-stop:none; 	mso-level-number-position:left; 	margin-left:37.9pt; 	text-indent:-18.0pt; 	font-family:Symbol;} ol 	{margin-bottom:0cm;} ul 	{margin-bottom:0cm;} --><!--[if gte mso 10]> <mce:style><!   /* Style Definitions */  table.MsoNormalTable 	{mso-style-name:"Tabela normal"; 	mso-tstyle-rowband-size:0; 	mso-tstyle-colband-size:0; 	mso-style-noshow:yes; 	mso-style-priority:99; 	mso-style-qformat:yes; 	mso-style-parent:""; 	mso-padding-alt:0cm 5.4pt 0cm 5.4pt; 	mso-para-margin-top:0cm; 	mso-para-margin-right:0cm; 	mso-para-margin-bottom:10.0pt; 	mso-para-margin-left:0cm; 	line-height:115%; 	mso-pagination:widow-orphan; 	font-size:11.0pt; 	font-family:"Calibri","sans-serif"; 	mso-ascii-font-family:Calibri; 	mso-ascii-theme-font:minor-latin; 	mso-hansi-font-family:Calibri; 	mso-hansi-theme-font:minor-latin; 	mso-fareast-language:EN-US;} --> <!--[endif]--></p>
<p class="MsoNormal" style="text-align: justify;">Durante o desenvolvimento do sistema com o qual trabalho atualmente, identificamos que o usuário teria a necessidade de subir arquivos de imagem (jpeg, gif, png ou bmp) para o servidor da aplicação através da interface do sistema. O sistema deveria permitir, por sua vez, que estes arquivos de imagem (<em>banners</em>) fossem acessados por outros usuários através de uma <em>sub-url</em> da aplicação, como:</p>
<p class="MsoNormal" style="text-align: justify;">http://www.sistema.com.br/banners/nome_do_banner.jpeg</p>
<p class="MsoNormal" style="text-align: justify;">Adicionalmente, precisaríamos contabilizar as impressões destas imagens, ou seja, gravar a quantidade de vezes que a imagem do <em>banner</em> foi acessada e por quem, para que o “causador” do acesso fosse recompensado financeiramente por ter exibido aquela imagem em seu site.</p>
<p class="MsoNormal" style="text-align: justify;">Com estes requisitos, precisávamos escolher qual abordagem seria mais interessante:</p>
<ul>
<li>Armazenar as imagens diretamente no Banco de Dados, juntamente com suas informações de controle;</li>
</ul>
<ul>
<li><!--[if !supportLists]-->Armazenar as imagens no disco e referenciar seu caminho no Banco de Dados, juntamente com suas informações de controle;</li>
</ul>
<p class="MsoNormal" style="text-align: justify;">Baseando-me <a href="http://research.microsoft.com/apps/pubs/default.aspx?id=64525">em um artigo da Microsoft</a>, em <a href="http://msdn.microsoft.com/en-us/library/bb933993.aspx">parte da documentação do novo tipo FILESTREAM do SQL Server 2008</a> e alguns testes de desempenho com os dois casos apresentados, concluí que o mais interessante para este sistema seria armazenar as imagens (que normalmente possuíam menos de 256 Kbytes) no Banco de Dados da aplicação.</p>
<p class="MsoNormal" style="text-align: justify;">Além das vantagens de desempenho descritas pelo artigo da MS, utilizando a estratégia de armazenar os arquivos no Banco de Dados teríamos mais dois benefícios de grande importância para este projeto específico:</p>
<ul>
<li><!--[if !supportLists]--><span style="font-family: Symbol;"><span><span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none;"> </span></span></span><!--[endif]-->Não necessidade de definir permissão de gravação em uma pasta do projeto;</li>
</ul>
<ul>
<li><!--[if !supportLists]-->Durante a publicação do sistema, onde os arquivos do servidor de produção são substituídos com os arquivos do servidor de homologação/desenvolvimento, a pasta “/Banners” não seria sobrescrita com uma versão desatualizada, excluindo os últimos <em>banners </em>adicionados pelos usuários.</li>
</ul>
<p class="MsoNormal" style="text-align: justify;">Por esta razão, a estratégia escolhida foi o armazenamento dos arquivos de imagem no Banco de Dados, que descrevo em detalhes nas próximas linhas:</p>
<p class="MsoNormal" style="text-align: justify;">Para demonstrar a prática que deveria ser implementada pelos desenvolvedores, preparei um exemplo simples utilizando C# e SQL Server 2008, que pode ser baixado integralmente <a href="http://isbyte.com/wp-content/uploads/2009/08/IHttpHandlerSample.zip">aqui</a>.</p>
<p class="MsoNormal" style="text-align: justify;">No exemplo, foquei-me exclusivamente em demonstrar como a gravação dos arquivos deveria ser feita no Banco de Dados e como o acesso de tais arquivos deveria ser realizado. Demais detalhes, como contabilização de acessos e checagem de segurança (verificar se o usuário possui permissão para exibir aquela imagem) foram omitidos para que o código fosse simplificado e tivesse um tom didático.</p>
<p class="MsoNormal">A explicação, por sua vez, foi dividida nas seguintes etapas:</p>
<ul>
<li><!--[if !supportLists]-->Estrutura do Banco de Dados;</li>
<li>Interface da Aplicação;<span style="font-family: Symbol;"></span></li>
<li><span style="font-family: Symbol;"></span><!--[endif]-->Camada de Acesso a Dados;<span style="font-family: Symbol;"></span></li>
<li><span style="font-family: Symbol;"></span><!--[endif]-->Camada <em>Controller</em>: Interligando tudo!;<span style="font-family: Symbol;"></span></li>
<li><span style="font-family: Symbol;"></span><!--[endif]-->IHttpHandler: Escutando o endereço “../banners/*.jpeg”;</li>
</ul>
<p class="MsoNormal">
<p class="MsoNormal"><strong><span style="font-size: 12pt; line-height: 115%;">Estrutura do Banco de Dados</span></strong></p>
<p class="MsoNormal">Inicialmente, foi criada a seguinte tabela no Banco de Dados:</p>
<p class="MsoNormal" style="text-align: center; page-break-after: avoid;" align="center"><span><!--[if gte vml 1]><v:shapetype  id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"  path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"> <v:stroke joinstyle="miter" /> <v:formulas> <v:f eqn="if lineDrawn pixelLineWidth 0" /> <v:f eqn="sum @0 1 0" /> <v:f eqn="sum 0 0 @1" /> <v:f eqn="prod @2 1 2" /> <v:f eqn="prod @3 21600 pixelWidth" /> <v:f eqn="prod @3 21600 pixelHeight" /> <v:f eqn="sum @0 0 1" /> <v:f eqn="prod @6 1 2" /> <v:f eqn="prod @7 21600 pixelWidth" /> <v:f eqn="sum @8 21600 0" /> <v:f eqn="prod @7 21600 pixelHeight" /> <v:f eqn="sum @10 21600 0" /> </v:formulas> <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect" /> <o:lock v:ext="edit" aspectratio="t" /> </v:shapetype><v:shape id="Imagem_x0020_0" o:spid="_x0000_i1026" type="#_x0000_t75"  alt="ImageHandler_Database.jpg" style='width:284.25pt;height:241.5pt;  visibility:visible;mso-wrap-style:square'> <v:imagedata src="file:///C:\Users\THIAGO~1.COU\AppData\Local\Temp\msohtmlclip1\01\clip_image001.jpg" mce_src="file:///C:\Users\THIAGO~1.COU\AppData\Local\Temp\msohtmlclip1\01\clip_image001.jpg"   o:title="ImageHandler_Database" /> </v:shape><![endif]--><!--[if !vml]--><a href="http://isbyte.com/wp-content/uploads/2009/08/imagehandler_database.jpg"><img class="aligncenter size-full wp-image-291" title="ImagesDB" src="http://isbyte.com/wp-content/uploads/2009/08/imagehandler_database.jpg" alt="ImagesDB" width="483" height="411" /></a><!--[endif]--></span></p>
<p class="MsoCaption" style="text-align: center;" align="center">
<p class="MsoNormal" style="text-align: justify;">Na coluna [Images].[Name], foi criado um índice para garantir a unicidade das imagens. Com isso, teríamos a certeza de que duas imagens não compartilhariam o mesmo nome.</p>
<p class="MsoNormal" style="text-align: justify;">O campo [Images].[BinaryContent] é o campo que será utilizado para guardar o conteúdo do arquivo. O seu tipo foi declarado como <em>varbinary(MAX)</em>, como sugerido pelo artigo da Microsoft citado anteriormente.</p>
<p class="MsoNormal" style="text-align: justify;">Também foi criado um campo [MIMEType], que irá armazenar o tipo do arquivo armazenado no Banco de Dados, uma vez que o usuário poderá fazer <em>upload </em>de arquivos Jpeg, Gif e outros formatos e precisamos saber, na hora de carregá-los na tela, qual formato estamos exibindo.</p>
<p class="MsoNormal">
<p class="MsoNormal"><strong><span style="font-size: 12pt; line-height: 115%;">Interface da Aplicação</span></strong></p>
<p class="MsoNormal" style="text-align: justify;">Com o Banco de Dados criado, seria necessário criar a interface para que o usuário pudesse efetuar o <em>upload </em>dos arquivos. O código fonte da interface (<em>webform</em>) ficou assim:</p>
<p class="MsoNormal">
<pre class="brush: xml;">
&lt;%@ Page Language=&quot;C#&quot; AutoEventWireup=&quot;true&quot; CodeBehind=&quot;Default.aspx.cs&quot; Inherits=&quot;IHttpHandlerSample._Default&quot; %&gt;

&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;

&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot; &gt;
&lt;head runat=&quot;server&quot;&gt;
&lt;title&gt;&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;form id=&quot;form1&quot; runat=&quot;server&quot; method=&quot;post&quot; enctype=&quot;multipart/form-data&quot;&gt;
&lt;div&gt;
&lt;h1&gt;Welcome to IHttpHandler example!&lt;/h1&gt;
&lt;p&gt;Try to load an Jpeg image on this server by upload the file and typing the image name in the address bar of your browser.&lt;/p&gt;
&lt;p&gt;&lt;input id=&quot;cFileUpload&quot; type=&quot;file&quot; runat=&quot;server&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;input id=&quot;cSubmit&quot; type=&quot;submit&quot; value=&quot;Upload!&quot; /&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/form&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<p class="MsoNormal" style="text-align: justify;">Notem que, na interface, utilizamos a <em>TAG &lt;input id=&#8221;cFileUpload&#8221; type=&#8221;file&#8221; runat=&#8221;server&#8221; /&gt; </em>(sic), responsável por desenhar na tela o controle através do qual o usuário poderá selecionar, em seu computador, o arquivo que deseja subir. Para que possamos tratar o envio deste arquivo, manipulando-o pelo código-fonte da aplicação, foi necessário adicionar o atributo <em>runat=”server”</em> no controle <em>HTML</em>, que faz com que este controle, embora seja <em>HTML</em>, seja gerenciado pelo servidor <em>ASP.NET</em> (sem isso não conseguiríamos “pegar” o arquivo enviado pelo usuário.</p>
<p class="MsoNormal" style="text-align: justify;">Da mesma maneira, foi necessário modificar algumas características do formulário (<em>&lt;form&gt;</em>), para que fosse possível postar o arquivo. O método passou a ser “post” e o tipo de codificação passou a ser “multipart/form-data”.</p>
<p class="MsoNormal">A interface da aplicação de exemplo ficou, portanto, assim:</p>
<p class="MsoNormal" style="text-align: center;" align="center"><span><!--[if gte vml 1]><v:shape  id="Imagem_x0020_1" o:spid="_x0000_i1025" type="#_x0000_t75" alt="ImageHandler_Interface.jpg"  style='width:391.5pt;height:3in;visibility:visible;mso-wrap-style:square'> <v:imagedata src="file:///C:\Users\THIAGO~1.COU\AppData\Local\Temp\msohtmlclip1\01\clip_image003.jpg" mce_src="file:///C:\Users\THIAGO~1.COU\AppData\Local\Temp\msohtmlclip1\01\clip_image003.jpg"   o:title="ImageHandler_Interface" /> </v:shape><![endif]--><!--[if !vml]--><a href="http://isbyte.com/wp-content/uploads/2009/08/imagehandler_interface.jpg"><img class="aligncenter size-full wp-image-292" title="ImageHandler - Interface" src="http://isbyte.com/wp-content/uploads/2009/08/imagehandler_interface.jpg" alt="ImageHandler - Interface" width="877" height="484" /></a><!--[endif]--></span></p>
<p class="MsoNormal" style="text-align: center;">
<p class="MsoNormal" style="text-align: justify;"><strong><span style="font-size: 12pt; line-height: 115%;">Camada de Acesso a Dados</span></strong></p>
<p class="MsoNormal" style="text-align: justify;">Com o Banco de Dados já preparado para receber os arquivos e a interface permitindo que o usuário suba os arquivos que achar conveniente, é hora de criar o método que grava, efetivamente, a imagem no Banco de Dados.</p>
<p class="MsoNormal" style="text-align: justify;">Porém, antes disso, vamos a uma explicação básica da forma como a aplicação de exemplo está organizada:</p>
<p class="MsoNormal" style="text-align: justify;">Para ser possível codificar a aplicação de maneira que pudéssemos separar claramente os papeis internos do <em>software</em>, foi adicionada uma simulação de “camada de acesso a dados” (DataLayer) através de duas classes principais:</p>
<ul>
<li><!--[if !supportLists]-->DataLayer.DAL.ImagesDAL</li>
</ul>
<p class="MsoNormal" style="margin-left: 36pt; text-align: justify;">Objeto responsável por executar operações (Insert, Select, Update &amp; Delete) na tabela [Images] criada no Banco de Dados. O sufixo DAL em seu nome significa “Data Access Layer”.</p>
<ul>
<li><!--[if !supportLists]--><span style="font-family: Symbol;"></span><!--[endif]-->DataLayer.ObjectModel.Image</li>
</ul>
<p class="MsoNormal" style="margin-left: 36pt; text-align: justify;">Objeto que representa a instância de uma imagem na aplicação. Este objeto possui cinco propriedades que são exatamente as mesmas colunas da tabela [Images] do Banco de Dados.</p>
<p class="MsoNormal" style="text-align: justify;">Com estes dois objetos em mente, a estratégia para adicionar o arquivo no Banco de Dados, portanto é a seguinte:</p>
<p class="MsoListParagraphCxSpFirst" style="text-align: justify; text-indent: -18pt;"><!--[if !supportLists]--><span><span>1.<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none;"> </span></span></span><!--[endif]-->Capturar o arquivo enviado pela interface de usuário;</p>
<p class="MsoListParagraphCxSpMiddle" style="text-align: justify; text-indent: -18pt;"><!--[if !supportLists]--><span><span>2.<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none;"> </span></span></span><!--[endif]-->Criar um “modelo de objeto” (<em>DataLayer.ObjectModel.Image</em>) que represente o arquivo enviado pelo usuário, de forma que este modelo contenha seu nome, tamanho, <em>MIME Type</em> e conteúdo do arquivo;</p>
<p class="MsoListParagraphCxSpLast" style="text-align: justify; text-indent: -18pt;"><!--[if !supportLists]--><span><span>3.<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none;"> </span></span></span><!--[endif]-->Executar a inserção deste arquivo no Banco de Dados, utilizando, para tanto, o objeto <em>DataLayer.DAL.ImagesDAL</em>, que é o responsável por executar inserções e outras operações no Banco de Dados.</p>
<p class="MsoNormal" style="text-align: justify;">Apresento aqui, portanto, o “modelo de objeto”, que representa um arquivo de imagem no código-fonte da nossa aplicação:</p>
<p class="MsoNormal" style="text-align: justify;">
<pre class="brush: csharp;">
using System;

namespace IHttpHandlerSample.DataLayer.ObjectModel
{
public class Image
{
public Guid ID { get; set; }
public string Name { get; set; }
public int Size { get; set; }
public string MIMEType { get; set; }
public byte[] BinaryContent { get; set; }
}
}</pre>
<p class="MsoNormal" style="text-align: justify;">Como podem notar esta é uma classe muito simples, desenvolvida com o objetivo singular de armazenar as informações de uma única imagem. E que, portanto, dispensa apresentação.</p>
<p class="MsoNormal" style="text-align: justify;">Como nesta aplicação só iremos inserir um objeto no Banco de Dados e depois consultá-lo, sem a necessidade de realizar remoções ou atualizações no objeto já existente, ao classe <em>DataLayer.DAL.ImagesDAL</em> foi simplificada para conter somente os métodos que iremos precisar. Segue o código fonte:</p>
<p class="MsoNormal" style="text-align: justify;">
<pre class="brush: csharp;">
using System;
using System.Data.SqlClient;
using System.Configuration;

namespace IHttpHandlerSample.DataLayer.DAL
{
public class Images : IDisposable
{
SqlConnection _connection;

public Images()
{
//Initializes the database connection object.
this._connection = new SqlConnection();

//Configures the connection string of the database.
this._connection.ConnectionString = ConfigurationManager.ConnectionStrings[@&quot;ImagesDB&quot;].ConnectionString;
}

private bool TryConnect()
{
//If connection is closed or broken...
if (this._connection.State == System.Data.ConnectionState.Closed ||
this._connection.State == System.Data.ConnectionState.Broken)
{
try
{
//Close the broked connections.
this._connection.Close();

//Try to connect to the database.
this._connection.Open();

//Database connected!
return true;
}
catch
{
//ERROR: The database can't be opened.
return false;
}
}
else
//Database is already connected.
return true;
}

private void Disconnect()
{
//Closes the database connection.
this._connection.Close();
}

public DataLayer.ObjectModel.Image Select(string name)
{
SqlCommand command;
SqlDataReader dataReader;
DataLayer.ObjectModel.Image result = null;

//Check if any necessary parameters is null or empty.
if (string.IsNullOrEmpty(name)) throw new ArgumentNullException(@&quot;name&quot;);

using (command = new SqlCommand())
{
//Configures the database connection.
command.Connection = this._connection;

//Defines the SELECT sql that will find from the database the requested file.
command.CommandText = @&quot;
SELECT
[ID],
[Name],
[Size],
[MIMEType],
[BinaryContent]
FROM [Images]
WHERE
[Name] = ISNULL(@fileName, [Name])&quot;;

//Defines that this is an SQL text command.
command.CommandType = System.Data.CommandType.Text;

//Configures the parameters and values of file that will be searched.
command.Parameters.Add(@&quot;@fileName&quot;, System.Data.SqlDbType.NVarChar).Value = name;

if (this.TryConnect() == true)
{
try
{
using (dataReader = command.ExecuteReader(System.Data.CommandBehavior.CloseConnection))
{
if (dataReader.HasRows)
{
while (dataReader.Read())
{
result = new DataLayer.ObjectModel.Image()
{
ID = dataReader.GetGuid(0),
Name = dataReader.GetString(1),
Size = dataReader.GetInt32(2),
MIMEType = dataReader.GetString(3),
BinaryContent = (byte[])dataReader.GetSqlBinary(4)
};
}

//Returns the collection of found images.
return result;
}
else
return null;
}
}
catch
{
//ERROR: Select fail.
return null;
}
finally
{
//Closes the database connection.
this.Disconnect();
}
}
else
//Database is not connected.
return null;
}
}

public bool Insert(DataLayer.ObjectModel.Image image)
{
SqlCommand command;

//Check if any necessary parameters is null or empty.
if (image == null) throw new ArgumentNullException(@&quot;image&quot;);
if (image.ID == null) throw new ArgumentException(@&quot;The ID property of the Image object can not be null.&quot;);
if (string.IsNullOrEmpty(image.Name)) throw new ArgumentException(@&quot;The Name property of the Image object can not be null.&quot;);
if (string.IsNullOrEmpty(image.MIMEType)) throw new ArgumentException(@&quot;The MIMEType property of the Image object can not be null.&quot;);
if (image.BinaryContent == null) throw new ArgumentException(@&quot;The BinaryContent property of the Image object can not be null.&quot;);

using (command = new SqlCommand())
{
//Configures the database connection.
command.Connection = this._connection;

//Defines the INSERT sql that will inject the file into the database.
command.CommandText = @&quot;
INSERT INTO [Images] (
[Name],
[Size],
[MIMEType],
[BinaryContent])
VALUES (
@fileName,
@fileSize,
@fileType,
@fileContent)&quot;;

//Defines that this is an SQL text command.
command.CommandType = System.Data.CommandType.Text;

//Configures the parameters/values that will be inserted.
command.Parameters.Add(@&quot;@fileName&quot;, System.Data.SqlDbType.NVarChar).Value = image.Name;
command.Parameters.Add(@&quot;@fileSize&quot;, System.Data.SqlDbType.Int).Value = image.Size;
command.Parameters.Add(@&quot;@fileType&quot;, System.Data.SqlDbType.NVarChar).Value = image.MIMEType;
command.Parameters.Add(@&quot;@fileContent&quot;, System.Data.SqlDbType.VarBinary).Value = image.BinaryContent;

if (this.TryConnect() == true)
{
try
{
//Try to execute INSERT command.
if (command.ExecuteNonQuery() == 1)
//Insert executed!
return true;
else
//Insert fail.
return false;
}
catch
{
//ERROR: Insert fail.
return false;
}
finally
{
//Closes the database connection.
this.Disconnect();
}
}
else
//Database is not connected.
return false;
}
}

#region IDisposable Members

public void Dispose()
{
//Disposes the database connection object (the connection will be closed).
this._connection.Dispose();
}

#endregion
}
}
</pre>
<p class="MsoNormal" style="text-align: justify;">Como pode ser notado, não há nenhuma prática incomum na classe anterior: Ela é composta pelos dois métodos públicos principais <em>Insert</em> e <em>Select</em>, que iremos utilizar nesta aplicação.</p>
<p class="MsoNormal" style="text-align: justify;">O método <em>Insert</em> recebe, como parâmetro de entrada, um objeto do tipo <em>DataLayer.ObjectModel.Image</em>, que é lido internamente e inserido no Banco de Dados.</p>
<p class="MsoNormal" style="text-align: justify;">De forma semelhante, o método <em>Select</em> recebe, como parâmetro, uma <em>System.String</em> contendo o nome do arquivo que será procurado no Banco de Dados. Uma vez encontrado, suas informações são utilizadas para preencher uma instância do objeto <em>DataLayer.ObjectModel.Image</em>, que é devolvido como retorno do método.</p>
<p class="MsoNormal" style="text-align: justify;">
<p class="MsoNormal" style="text-align: justify;"><strong><span style="font-size: 12pt; line-height: 115%;">Camada <em>Controller</em>: Interligando tudo!</span></strong></p>
<p class="MsoNormal" style="text-align: justify;">Uma vez que nossos objetos que efetuam as operações já estejam prontos, basta que os mesmos sejam interligados pela camada <em>Controller</em>, que no nosso caso é simplesmente o <em>code-behind</em> do <em>webform</em> que utilizamos para construir a interface, ou seja, o arquivo <em>Default.aspx.cs</em>:</p>
<p class="MsoNormal" style="text-align: justify;">
<pre class="brush: csharp;">
protected void Page_Load(object sender, EventArgs e)
{
HttpPostedFile postedFile;
DataLayer.DAL.Images imagesDAL;
DataLayer.ObjectModel.Image image;

bool isInserted;

if (IsPostBack)
{
//If image has been uploaded...
if (cFileUpload.PostedFile != null)
{
//Gets the reference of the posted file.
postedFile = cFileUpload.PostedFile;

#region &quot;Creating The Representation Of Posted File&quot;
//Initializes an representation of file that will description the posted file.
image = new DataLayer.ObjectModel.Image();

//Stores the ID of the posted file.
image.ID = System.Guid.NewGuid();

//Stores the name of the posted file.
image.Name = System.IO.Path.GetFileName(postedFile.FileName);

//Stores the size of the posted file.
image.Size = postedFile.ContentLength;

//Stores the MIME Type of the posted file.
image.MIMEType = postedFile.ContentType;

//Stores the binary content of the posted file.
image.BinaryContent = new byte[postedFile.ContentLength];
postedFile.InputStream.Read(image.BinaryContent, 0, postedFile.ContentLength);
#endregion

//Initializes Images adapter.
using (imagesDAL = new DataLayer.DAL.Images())
{
//Inserts posted image into the database.
isInserted = imagesDAL.Insert(image);
}

if (isInserted)
//Open posted file.
Response.Redirect(string.Format(&quot;~/{0}&quot;, image.Name));
else
//Shows the error message to the user.
Response.Write(&quot;The upload fail. Try again!&quot;);
}
}
}
</pre>
<p class="MsoNormal" style="text-align: justify;">No evento “OnLoad” do <em>webform</em>, foi adicionado, portanto, o código que faz o controle de tudo: Pega o arquivo enviado pela interface e envia à camada de acesso a dados de forma que ela entenda.</p>
<p class="MsoNormal" style="text-align: justify;">O código anterior, ao detectar que a inserção no Banco de Dados foi concluída com sucesso, redireciona o usuário para o endereço onde o mesmo visualizará o <em>Banner</em> sendo recuperado do Banco de Dados.</p>
<p class="MsoNormal" style="text-align: justify;">A próxima etapa trata exatamente disto: Como ouvir um determinado diretório para devolver as imagens guardadas no Banco de Dados?</p>
<p class="MsoNormal" style="text-align: justify;"><strong><span style="font-size: 12pt; line-height: 115%;"> </span></strong></p>
<p class="MsoNormal" style="text-align: justify;"><strong><span style="font-size: 12pt; line-height: 115%;">IHttpHandler: Escutando o endereço “../banners/*.jpeg”;</span></strong></p>
<p class="MsoNormal" style="text-align: justify;"><span> </span>Uma vez armazenadas no Banco de Dados, as imagens precisam ser recuperadas quando solicitadas pelos usuários. Esta solicitação, por sua vez, se dá através do acesso a um endereço como:</p>
<p class="MsoNormal" style="text-align: justify;">http://www.sistema.com.br/banners/nome_do_banner.jpeg</p>
<p class="MsoNormal" style="text-align: justify;">Para tanto, foi necessário implementar uma classe especial, cujo trabalho é “observar” um determinado endereço e, caso seja feita alguma requisição, processar e responder.</p>
<p class="MsoNormal" style="text-align: justify;">Esta classe, que na aplicação de exemplo chama-se <em>Handlers.ImageHandler</em>, precisa, obrigatoriamente, implementar a interface <em>System.Web.IHttpHandler</em>, conforme o código fonte abaixo:</p>
<p class="MsoNormal"><span>
<pre class="brush: csharp;">
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;&lt;/span&gt;

namespace IHttpHandlerSample.Handlers
{
public class ImageHandler : IHttpHandler
{
#region IHttpHandler Members
public bool IsReusable
{
get { return false; }
}

public void ProcessRequest(HttpContext context)
{
string fileName = null;
string referrer;
DataLayer.DAL.Images imagesDAL;
DataLayer.ObjectModel.Image image;

//Clears all content output from the buffer stream.
context.Response.Clear();

//Gets the filename requested.
fileName = System.IO.Path.GetFileName(context.Request.Path);

/* ---------------------------------------------------------------------------
* Gets the URL of the client's previous request that linked the current URL.
*
* This information will be used for security checks and accounting of access.
* E.g.: This user has permission to access the resource?
*       How many times the user accessed the resource?
*/
referrer = context.Request.UrlReferrer.ToString();
// ---------------------------------------------------------------------------

using (imagesDAL = new DataLayer.DAL.Images())
{
//Searches requested filename in the database.
image = imagesDAL.Select(fileName);
}

if (image != null)
{
//Configures the HTTP MIME Type of the output stream.
context.Response.ContentType = image.MIMEType;

//Configures the content of the HTTP response.
context.Response.OutputStream.Write(image.BinaryContent, 0, image.Size);
}
else
//File not found.
context.Response.StatusCode = 404;

//Sends all currently buffered output to the client and stops execution of the page.
context.Response.End();
}
#endregion
}
}
</pre>
<p class="MsoNormal">O método mais importante desta classe é o <em>ProcessRequest</em>, que receberá a requisição assim que ela for efetuada.</p>
<p class="MsoNormal">Para que a aplicação entenda que a nova classe <em>Handlers.ImageHandler</em> é a responsável por processar toda requisição de arquivos de imagem, foi necessário adicionar, no <em>Web.Config</em> da aplicação, a seguinte linha:</p>
<p class="MsoNormal">
<pre class="brush: xml;">
&lt;add verb=&quot;GET&quot; type=&quot;IHttpHandlerSample.Handlers.ImageHandler&quot; path=&quot;*.jpg,*.jpeg,*.png,*.gif,*.bmp&quot;/&gt;
</pre>
<p class="MsoNormal">A linha de configuração deverá ser inserida dentro da sessão <em>&lt;system.web&gt;</em>.</p>
</div>]]></content:encoded>
			<wfw:commentRss>http://isbyte.com/index.php/2009/08/armazenar-e-recuperar-imagens-no-banco-de-dados/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Como escrever Casos de Uso</title>
		<link>http://isbyte.com/index.php/2009/07/como-escrever-casos-de-uso/</link>
		<comments>http://isbyte.com/index.php/2009/07/como-escrever-casos-de-uso/#comments</comments>
		<pubDate>Sat, 18 Jul 2009 17:30:42 +0000</pubDate>
		<dc:creator>Thiago Marotta</dc:creator>
				<category><![CDATA[Análise de Sistemas]]></category>
		<category><![CDATA[UML]]></category>
		<category><![CDATA[Use Case]]></category>
		<category><![CDATA[Actors]]></category>
		<category><![CDATA[Análise de Sistema]]></category>
		<category><![CDATA[Análise OO]]></category>
		<category><![CDATA[Análise Orientada a Objetos]]></category>
		<category><![CDATA[Atores]]></category>
		<category><![CDATA[Basic Flow]]></category>
		<category><![CDATA[Booch]]></category>
		<category><![CDATA[Caso de Uso]]></category>
		<category><![CDATA[Caso de Uso Extends]]></category>
		<category><![CDATA[Caso de Uso Include]]></category>
		<category><![CDATA[Casos de Uso]]></category>
		<category><![CDATA[Cenário]]></category>
		<category><![CDATA[Conceber Casos de Uso]]></category>
		<category><![CDATA[Conceber Use Cases]]></category>
		<category><![CDATA[Construir Use Cases]]></category>
		<category><![CDATA[CU]]></category>
		<category><![CDATA[CUs]]></category>
		<category><![CDATA[Descrição de Casos de Uso]]></category>
		<category><![CDATA[Descrição de Use Cases]]></category>
		<category><![CDATA[Desenhar Casos de Uso]]></category>
		<category><![CDATA[Desenhar Use Cases]]></category>
		<category><![CDATA[Design Use Cases]]></category>
		<category><![CDATA[Dia Perfeito]]></category>
		<category><![CDATA[Diagrama de Casos de Uso]]></category>
		<category><![CDATA[Escrever Casos de Uso]]></category>
		<category><![CDATA[Especialização]]></category>
		<category><![CDATA[Exemplo Caso de Uso]]></category>
		<category><![CDATA[Exemplo Use Case]]></category>
		<category><![CDATA[Extends]]></category>
		<category><![CDATA[Extensão]]></category>
		<category><![CDATA[Extensão Caso de Uso]]></category>
		<category><![CDATA[Fluxo Ideal]]></category>
		<category><![CDATA[Fluxo Principal]]></category>
		<category><![CDATA[Generalização]]></category>
		<category><![CDATA[Generalização Caso de Uso]]></category>
		<category><![CDATA[Generalization]]></category>
		<category><![CDATA[Gerência de Projetos]]></category>
		<category><![CDATA[Grady]]></category>
		<category><![CDATA[Grady Booch]]></category>
		<category><![CDATA[Include]]></category>
		<category><![CDATA[Inclusão]]></category>
		<category><![CDATA[Ivar]]></category>
		<category><![CDATA[Ivar Jacobson]]></category>
		<category><![CDATA[Jacobson]]></category>
		<category><![CDATA[James]]></category>
		<category><![CDATA[James Rumbaugh]]></category>
		<category><![CDATA[Modelo de Casos de Uso]]></category>
		<category><![CDATA[Modelo de Use Case]]></category>
		<category><![CDATA[Object Oriented]]></category>
		<category><![CDATA[Object Oriented Analisis]]></category>
		<category><![CDATA[Organização de Caso de Uso]]></category>
		<category><![CDATA[Organização de Projeto]]></category>
		<category><![CDATA[Organização de Use Cases]]></category>
		<category><![CDATA[Orientação a Objeto]]></category>
		<category><![CDATA[Orientação a Objetos]]></category>
		<category><![CDATA[Orientado a Objeto]]></category>
		<category><![CDATA[Pascal Roques]]></category>
		<category><![CDATA[Pós-Condição]]></category>
		<category><![CDATA[Post-condition]]></category>
		<category><![CDATA[Pré-Condição]]></category>
		<category><![CDATA[Pre-condition]]></category>
		<category><![CDATA[Princpal Flow]]></category>
		<category><![CDATA[Processos]]></category>
		<category><![CDATA[Processos de Software]]></category>
		<category><![CDATA[Project Management]]></category>
		<category><![CDATA[Projeto de Software]]></category>
		<category><![CDATA[Rumbaught]]></category>
		<category><![CDATA[SmartCard Use Case]]></category>
		<category><![CDATA[Software Design]]></category>
		<category><![CDATA[Software Process]]></category>
		<category><![CDATA[Software Project]]></category>
		<category><![CDATA[System Analisis]]></category>
		<category><![CDATA[Template Caso de Uso]]></category>
		<category><![CDATA[UC]]></category>
		<category><![CDATA[UCs]]></category>
		<category><![CDATA[UML 1.1]]></category>
		<category><![CDATA[UML 2.0]]></category>
		<category><![CDATA[UML 2.1]]></category>
		<category><![CDATA[UML 2.2]]></category>
		<category><![CDATA[UML Guia do Usuário]]></category>
		<category><![CDATA[UML In Practice]]></category>
		<category><![CDATA[Unified Modeling Language]]></category>
		<category><![CDATA[Use Case Diagram]]></category>
		<category><![CDATA[Use Case Example]]></category>
		<category><![CDATA[Use Case Generalization]]></category>
		<category><![CDATA[Use Case Include]]></category>
		<category><![CDATA[Use Cases]]></category>

		<guid isPermaLink="false">http://isbyte.com/?p=280</guid>
		<description><![CDATA[Este artigo aborda a forma correta, segundo os próprios autores da UML, para descrever Casos de Uso, através de conceitos e [...]]]></description>
			<content:encoded><![CDATA[<div id=HOTWordsTxt name=HOTWordsTxt><p><!--[if gte mso 9]><xml> <w:WordDocument> <w:View>Normal</w:View> <w:Zoom>0</w:Zoom> <w:TrackMoves /> <w:TrackFormatting /> <w:HyphenationZone>21</w:HyphenationZone> <w:PunctuationKerning /> <w:ValidateAgainstSchemas /> <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid> <w:IgnoreMixedContent>false</w:IgnoreMixedContent> <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText> <w:DoNotPromoteQF /> <w:LidThemeOther>PT-BR</w:LidThemeOther> <w:LidThemeAsian>X-NONE</w:LidThemeAsian> <w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript> <w:Compatibility> <w:BreakWrappedTables /> <w:SnapToGridInCell /> <w:WrapTextWithPunct /> <w:UseAsianBreakRules /> <w:DontGrowAutofit /> <w:SplitPgBreakAndParaMark /> <w:DontVertAlignCellWithSp /> <w:DontBreakConstrainedForcedTables /> <w:DontVertAlignInTxbx /> <w:Word11KerningPairs /> <w:CachedColBalance /> </w:Compatibility> <m:mathPr> <m:mathFont m:val="Cambria Math" /> <m:brkBin m:val="before" /> <m:brkBinSub m:val="&#45;-" /> <m:smallFrac m:val="off" /> <m:dispDef /> <m:lMargin m:val="0" /> <m:rMargin m:val="0" /> <m:defJc m:val="centerGroup" /> <m:wrapIndent m:val="1440" /> <m:intLim m:val="subSup" /> <m:naryLim m:val="undOvr" /> </m:mathPr></w:WordDocument> </xml><![endif]--><!--[if gte mso 9]><xml> <w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true"   DefSemiHidden="true" DefQFormat="false" DefPriority="99"   LatentStyleCount="267"> <w:LsdException Locked="false" Priority="0" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Normal" /> <w:LsdException Locked="false" Priority="9" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="heading 1" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 2" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 3" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 4" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 5" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 6" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 7" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9" /> <w:LsdException Locked="false" Priority="39" Name="toc 1" /> <w:LsdException Locked="false" Priority="39" Name="toc 2" /> <w:LsdException Locked="false" Priority="39" Name="toc 3" /> <w:LsdException Locked="false" Priority="39" Name="toc 4" /> <w:LsdException Locked="false" Priority="39" Name="toc 5" /> <w:LsdException Locked="false" Priority="39" Name="toc 6" /> <w:LsdException Locked="false" Priority="39" Name="toc 7" /> <w:LsdException Locked="false" Priority="39" Name="toc 8" /> <w:LsdException Locked="false" Priority="39" Name="toc 9" /> <w:LsdException Locked="false" Priority="35" QFormat="true" Name="caption" /> <w:LsdException Locked="false" Priority="10" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Title" /> <w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font" /> <w:LsdException Locked="false" Priority="11" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Subtitle" /> <w:LsdException Locked="false" Priority="22" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Strong" /> <w:LsdException Locked="false" Priority="20" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Emphasis" /> <w:LsdException Locked="false" Priority="59" SemiHidden="false"    UnhideWhenUsed="false" Name="Table Grid" /> <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Placeholder Text" /> <w:LsdException Locked="false" Priority="1" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="No Spacing" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 1" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 1" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 1" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 1" /> <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Revision" /> <w:LsdException Locked="false" Priority="34" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="List Paragraph" /> <w:LsdException Locked="false" Priority="29" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Quote" /> <w:LsdException Locked="false" Priority="30" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Intense Quote" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 1" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 1" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 1" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 1" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 1" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 2" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 2" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 2" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 2" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 2" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 2" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 2" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 2" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 2" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 3" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 3" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 3" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 3" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 3" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 3" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 3" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 3" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 3" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 4" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 4" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 4" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 4" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 4" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 4" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 4" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 4" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 4" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 5" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 5" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 5" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 5" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 5" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 5" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 5" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 5" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 5" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 6" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 6" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 6" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 6" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 6" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 6" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 6" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 6" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 6" /> <w:LsdException Locked="false" Priority="19" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis" /> <w:LsdException Locked="false" Priority="21" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis" /> <w:LsdException Locked="false" Priority="31" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference" /> <w:LsdException Locked="false" Priority="32" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Intense Reference" /> <w:LsdException Locked="false" Priority="33" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Book Title" /> <w:LsdException Locked="false" Priority="37" Name="Bibliography" /> <w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading" /> </w:LatentStyles> </xml><![endif]--><!--  /* Font Definitions */  @font-face 	{font-family:Wingdings; 	panose-1:5 0 0 0 0 0 0 0 0 0; 	mso-font-charset:2; 	mso-generic-font-family:auto; 	mso-font-pitch:variable; 	mso-font-signature:0 268435456 0 0 -2147483648 0;} @font-face 	{font-family:"Cambria Math"; 	panose-1:2 4 5 3 5 4 6 3 2 4; 	mso-font-charset:0; 	mso-generic-font-family:roman; 	mso-font-pitch:variable; 	mso-font-signature:-1610611985 1107304683 0 0 159 0;} @font-face 	{font-family:Calibri; 	panose-1:2 15 5 2 2 2 4 3 2 4; 	mso-font-charset:0; 	mso-generic-font-family:swiss; 	mso-font-pitch:variable; 	mso-font-signature:-1610611985 1073750139 0 0 159 0;}  /* Style Definitions */  p.MsoNormal, li.MsoNormal, div.MsoNormal 	{mso-style-unhide:no; 	mso-style-qformat:yes; 	mso-style-parent:""; 	margin-top:0cm; 	margin-right:0cm; 	margin-bottom:10.0pt; 	margin-left:0cm; 	line-height:115%; 	mso-pagination:widow-orphan; 	font-size:11.0pt; 	font-family:"Calibri","sans-serif"; 	mso-ascii-font-family:Calibri; 	mso-ascii-theme-font:minor-latin; 	mso-fareast-font-family:Calibri; 	mso-fareast-theme-font:minor-latin; 	mso-hansi-font-family:Calibri; 	mso-hansi-theme-font:minor-latin; 	mso-bidi-font-family:"Times New Roman"; 	mso-bidi-theme-font:minor-bidi; 	mso-fareast-language:EN-US;} p 	{mso-style-priority:99; 	mso-margin-top-alt:auto; 	margin-right:0cm; 	mso-margin-bottom-alt:auto; 	margin-left:0cm; 	mso-pagination:widow-orphan; 	font-size:12.0pt; 	font-family:"Times New Roman","serif"; 	mso-fareast-font-family:"Times New Roman";} span.apple-converted-space 	{mso-style-name:apple-converted-space; 	mso-style-unhide:no;} .MsoChpDefault 	{mso-style-type:export-only; 	mso-default-props:yes; 	mso-ascii-font-family:Calibri; 	mso-ascii-theme-font:minor-latin; 	mso-fareast-font-family:Calibri; 	mso-fareast-theme-font:minor-latin; 	mso-hansi-font-family:Calibri; 	mso-hansi-theme-font:minor-latin; 	mso-bidi-font-family:"Times New Roman"; 	mso-bidi-theme-font:minor-bidi; 	mso-fareast-language:EN-US;} .MsoPapDefault 	{mso-style-type:export-only; 	margin-bottom:10.0pt; 	line-height:115%;} @page Section1 	{size:595.3pt 841.9pt; 	margin:70.85pt 3.0cm 70.85pt 3.0cm; 	mso-header-margin:35.4pt; 	mso-footer-margin:35.4pt; 	mso-paper-source:0;} div.Section1 	{page:Section1;}  /* List Definitions */  @list l0 	{mso-list-id:325210187; 	mso-list-type:hybrid; 	mso-list-template-ids:653047128 -830724716 68550681 68550683 68550671 68550681 68550683 68550671 68550681 68550683;} @list l0:level1 	{mso-level-start-at:7; 	mso-level-tab-stop:none; 	mso-level-number-position:left; 	margin-left:53.4pt; 	text-indent:-18.0pt; 	mso-ansi-font-weight:bold;} @list l1 	{mso-list-id:351804543; 	mso-list-type:hybrid; 	mso-list-template-ids:-242866320 1663444922 68550681 68550683 68550671 68550681 68550683 68550671 68550681 68550683;} @list l1:level1 	{mso-level-tab-stop:none; 	mso-level-number-position:left; 	text-indent:-18.0pt; 	mso-ansi-font-weight:bold;} @list l2 	{mso-list-id:435559292; 	mso-list-type:hybrid; 	mso-list-template-ids:-1205544978 1384533016 68550681 68550683 68550671 68550681 68550683 68550671 68550681 68550683;} @list l2:level1 	{mso-level-tab-stop:none; 	mso-level-number-position:left; 	margin-left:53.4pt; 	text-indent:-18.0pt; 	mso-ansi-font-weight:bold;} @list l3 	{mso-list-id:991061845; 	mso-list-type:hybrid; 	mso-list-template-ids:-63550562 2059971080 68550681 68550683 68550671 68550681 68550683 68550671 68550681 68550683;} @list l3:level1 	{mso-level-start-at:5; 	mso-level-tab-stop:none; 	mso-level-number-position:left; 	margin-left:53.4pt; 	text-indent:-18.0pt; 	mso-ansi-font-weight:bold;} @list l4 	{mso-list-id:1075081714; 	mso-list-type:hybrid; 	mso-list-template-ids:837434818 -1714013910 68550681 68550683 68550671 68550681 68550683 68550671 68550681 68550683;} @list l4:level1 	{mso-level-start-at:12; 	mso-level-tab-stop:none; 	mso-level-number-position:left; 	margin-left:53.4pt; 	text-indent:-18.0pt; 	mso-ansi-font-weight:bold;} @list l5 	{mso-list-id:1687097007; 	mso-list-type:hybrid; 	mso-list-template-ids:-713940748 -1354318448 68550681 68550683 68550671 68550681 68550683 68550671 68550681 68550683;} @list l5:level1 	{mso-level-start-at:2; 	mso-level-tab-stop:none; 	mso-level-number-position:left; 	margin-left:53.4pt; 	text-indent:-18.0pt; 	mso-ansi-font-weight:bold;} @list l6 	{mso-list-id:1801265240; 	mso-list-type:hybrid; 	mso-list-template-ids:-1704145776 1069466430 68550681 68550683 68550671 68550681 68550683 68550671 68550681 68550683;} @list l6:level1 	{mso-level-start-at:11; 	mso-level-tab-stop:none; 	mso-level-number-position:left; 	margin-left:53.4pt; 	text-indent:-18.0pt; 	mso-ansi-font-weight:bold;} @list l7 	{mso-list-id:1803768022; 	mso-list-type:hybrid; 	mso-list-template-ids:-818242260 68550657 68550659 68550661 68550657 68550659 68550661 68550657 68550659 68550661;} @list l7:level1 	{mso-level-number-format:bullet; 	mso-level-text:; 	mso-level-tab-stop:none; 	mso-level-number-position:left; 	text-indent:-18.0pt; 	font-family:Symbol;} @list l8 	{mso-list-id:2088305157; 	mso-list-type:hybrid; 	mso-list-template-ids:1148715346 68550657 68550659 68550661 68550657 68550659 68550661 68550657 68550659 68550661;} @list l8:level1 	{mso-level-number-format:bullet; 	mso-level-text:; 	mso-level-tab-stop:none; 	mso-level-number-position:left; 	text-indent:-18.0pt; 	font-family:Symbol;} @list l9 	{mso-list-id:2100979385; 	mso-list-type:hybrid; 	mso-list-template-ids:726584074 68550657 68550659 68550661 68550657 68550659 68550661 68550657 68550659 68550661;} @list l9:level1 	{mso-level-number-format:bullet; 	mso-level-text:; 	mso-level-tab-stop:none; 	mso-level-number-position:left; 	text-indent:-18.0pt; 	font-family:Symbol;} ol 	{margin-bottom:0cm;} ul 	{margin-bottom:0cm;} --></p>
<p><!--[if gte mso 10]> <mce:style><!   /* Style Definitions */  table.MsoNormalTable 	{mso-style-name:"Tabela normal"; 	mso-tstyle-rowband-size:0; 	mso-tstyle-colband-size:0; 	mso-style-noshow:yes; 	mso-style-priority:99; 	mso-style-qformat:yes; 	mso-style-parent:""; 	mso-padding-alt:0cm 5.4pt 0cm 5.4pt; 	mso-para-margin-top:0cm; 	mso-para-margin-right:0cm; 	mso-para-margin-bottom:10.0pt; 	mso-para-margin-left:0cm; 	line-height:115%; 	mso-pagination:widow-orphan; 	font-size:11.0pt; 	font-family:"Calibri","sans-serif"; 	mso-ascii-font-family:Calibri; 	mso-ascii-theme-font:minor-latin; 	mso-hansi-font-family:Calibri; 	mso-hansi-theme-font:minor-latin; 	mso-fareast-language:EN-US;} --></p>
<p><!--[endif]--></p>
<p style="text-align: justify;"><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;">Nenhum sistema existe isoladamente. Todo sistema interessante interage com atores humanos ou atores autômatos que utilizam esse sistema para algum propósito. Estes atores, por sua vez, esperam que o sistema apresente o comportamento que foi previsto durante a sua concepção.</span></p>
<p style="text-align: justify;"><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;">É exatamente neste ponto que entra em ação o nosso objeto de estudo, o Caso de Uso (do inglês<span class="apple-converted-space"> </span><em>Use Case</em><span class="apple-converted-space"> </span>– ou simplesmente<span class="apple-converted-space"> </span><em>UC</em>).</span></p>
<p style="text-align: justify;"><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;">Os Casos de Uso foram introduzidos pela UML (Linguagem Unificada de Modelagem – Do inglês<span class="apple-converted-space"> </span><em>Unified Modeling Language</em>), que é uma linguagem criada para auxiliar as pessoas envolvidas no processo de desenvolvimento de um<span class="apple-converted-space"> </span><em>software</em><span class="apple-converted-space"> </span>no sentido de ajudá-las a comunicar-se entre si sobre as características e especificações deste novo sistema.</span></p>
<p style="text-align: justify;"><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;">Hoje vamos falar especificamente sobre os <em>Use Cases</em>, que são ferramentas utilizadas para captar o comportamento pretendido do sistema que está sendo desenvolvido sem que seja necessário especificar <strong>como</strong> esse comportamento será implementado. Este conceito é extremamente importante, por isso, vou repeti-lo citando os próprios autores da UML: </span></p>
<blockquote>
<p style="text-align: justify;"><strong><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;">“&#8230; Casos de Uso especificam o comportamento desejado; eles não determinam como esse comportamento será executado.” – [BOOCH, RUMBAUGH &amp; JACOBSON, 2005] </span></strong></p>
</blockquote>
<p style="text-align: justify;"><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;">A vantagem disso é simples: Permitir que você se comunique com os envolvidos no processo de desenvolvimento de software (gerentes, analistas, desenvolvedores, patrocinadores e <em>stakeholders</em>) <strong>sem se preocupar com detalhes</strong>. Estes detalhes aparecerão, mas os Casos de Uso permitem que você focalize primeiro os pontos que considera de <strong>maior risco</strong>.</span></p>
<p style="text-align: justify;"><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;">Conceber <em>Use Cases</em> para especificar o comportamento de um sistema sem se preocupar em como isso “será transformado em <em>software</em>” é de fundamental importância para <strong>validar</strong> o sistema sem que seja necessário construí-lo. </span></p>
<p style="text-align: justify;"><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;">Não utilizar este tipo de abordagem durante a fase de projeto de um novo sistema poderá resultar em um alto índice de “re-trabalho”, uma vez que sem a ajuda de uma ferramenta adequada para avaliar o sistema como um todo <strong>antes</strong> do seu desenvolvimento efetivo poderá exigir mudanças mais drásticas que o habitual durante o período de desenvolvimento (quando a viabilidade e organização do projeto já deveriam estar concluídas).</span></p>
<p style="text-align: justify;"><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;">É importante notar, porém, que conceber <em>Use Cases</em> não é o mesmo que “desenhar” diagramas interligando “balões” e “bonecos palito”. É necessário tomar cuidado para que “Casos de Uso” não sejam confundidos com “Diagramas de Caso de Uso”. Embora sejam ferramentas complementares, não são ferramentas idênticas, ao contrário, são conceitos bem distintos.</span></p>
<p style="text-align: justify;"><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;">Os Diagramas de Caso de Uso são importantes para que os envolvidos na construção do novo sistema percebam, através de uma visão espacial, quais são os fluxos que compõe todo o sistema. Porém, Diagramas de Caso de Uso apenas representam graficamente (mapeiam) quais Atores utilizam quais Casos de Uso. Portanto, a <strong>descrição</strong> de um Caso de Uso é, na verdade, o principal elemento desta ferramenta. Diagramas de Caso de Uso sem descrição são como caixas sem conteúdo organizadas por data: Você consegue encontrar a caixa correspondente ao período que deseja, mas não tem acesso ao documento que descreve aquilo que realmente procura.</span></p>
<p style="text-align: justify;"><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;">Parafraseando mais uma vez os autores da UML, um Caso de Uso nada mais é que uma descrição de um conjunto de seqüências de ações, inclusive variantes, que um sistema executa para produzir um resultado de valor observável por um ator, como no exemplo abaixo:</span></p>
<p style="text-align: justify;"><em><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;">Fazer Logon</span></em></p>
<p style="margin-left: 53.4pt; text-align: justify; text-indent: -18pt;"><!--[if !supportLists]--><strong><em><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;"><span>1.<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none;"> </span></span></span></em></strong><!--[endif]--><em><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;">Usuário digita o endereço do site na barra de endereços do navegador;</span></em></p>
<p style="margin-left: 53.4pt; text-align: justify; text-indent: -18pt;"><!--[if !supportLists]--><strong><em><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;"><span>2.<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none;"> </span></span></span></em></strong><!--[endif]--><em><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;">Usuário entra com seu login e senha nos campos disponíveis na tela e clica, em seguida, no botão “Entrar”;</span></em></p>
<p style="margin-left: 53.4pt; text-align: justify; text-indent: -18pt;"><!--[if !supportLists]--><strong><em><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;"><span>3.<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none;"> </span></span></span></em></strong><!--[endif]--><em><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;">Sistema verifica se o login e a senha digitada são válidos para acessar o sistema;</span></em></p>
<p style="margin-left: 53.4pt; text-align: justify; text-indent: -18pt;"><!--[if !supportLists]--><strong><em><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;"><span>4.<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none;"> </span></span></span></em></strong><!--[endif]--><em><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;">Sistema conclui que os dados informados estão corretos e redireciona o usuário para a página principal do site.</span></em></p>
<p style="text-align: justify;"><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;">É importante notar que em momento algum o texto acima descreveu <strong>como</strong> o sistema consultou se os dados de acesso do usuário estavam corretos, assim como não demonstrou qual foi o recurso técnico utilizado para redirecionar o usuário para um novo endereço. Ao invés disso, o texto abordou apenas a visão geral do processo, ocultando todos os detalhes tecnológicos, o que tornou a leitura mais agradável e compreensível para qualquer pessoa com um mínimo de intimidade com sistemas computacionais.</span></p>
<p style="text-align: justify;"><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;">Ao fazer uma modelagem é importante manter clara a separação entre a visão interna e externa. Você pode especificar o comportamento de um Caso de Uso pela descrição do fluxo de eventos de maneira suficientemente clara para que alguém de fora possa compreendê-lo facilmente.</span></p>
<p style="text-align: justify;"><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;">Um Caso de Uso, portanto, não é a forma mais recomendada de comunicar à equipe de desenvolvimento sobre os detalhes de implementação de um determinado projeto. Para isso existem outras ferramentas e diagramas da própria UML (Diagrama de Classes, Diagrama de Objetos, Diagrama de Interação, Diagrama de Artefatos, etc), que tornam a comunicação consideravelmente mais clara e organizada entre os envolvidos na implementação. Por outro lado, os <em>Use Cases</em> têm sua importância para a comunicação com a equipe interna, pois através deles é possível entender rapidamente o comportamento esperado e as regras de negócio do sistema. Adicionalmente, os <em>UCs</em> são ótimas fontes para a geração de Casos de Teste (Do inglês <em>Test Cases</em>), que têm como objetivo a documentação dos testes que precisam ser realizados (e quais resultados precisam ser atingidos) para que uma determinada funcionalidade do sistema tenha sua implementação considerada adequada, ou seja, atinja o seu comportamento esperado.</span></p>
<p style="text-align: justify;"><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;">Uma vez que um Caso de Uso é modelado para representar o comportamento de um determinado processo, verificamos facilmente que o Caso de Uso descreve um <strong>conjunto</strong> de seqüências e não apenas uma seqüência isolada, pois seria impossível representar todos os detalhes de um processo interessante em apenas uma seqüência. Por exemplo, em um sistema de recursos humanos você poderá encontrar um Caso de Uso chamado “Contratar Empregado”, que representa o fluxo principal para a contratação de um colaborador para a empresa. Porém esta regra de negócio geral poderá ter muitas variações, como contratar uma pessoa de outra empresa, transferir uma pessoa de um departamento para o outro (algo comum em multinacionais) ou contratar um estrangeiro residente no local (o que incluirá suas próprias regras especiais). Cada uma dessas variantes (chamadas de <strong>cenários</strong> na UML) poderá ser expressa em uma seqüência diferente.</span></p>
<p style="text-align: justify;"><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;">Segundo Booch, Rumbaugh e Jacobson, <strong>os cenários estão para os Casos de Uso assim como as instâncias estão para as classes</strong>.</span></p>
<p style="text-align: justify;"><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;">É recomendado que descrevamos, primeiramente, a seqüência principal, que também é chamada, por alguns autores, de “dia perfeito”, “dia de sucesso” ou “fluxo básico”.</span></p>
<p style="text-align: justify;"><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;">Por exemplo, no contexto de um sistema de caixa eletrônico, você poderá descrever o caso de uso “Sacar Dinheiro” da seguinte forma, conforme sugere o exemplo apresentado por<em> </em>Roques:</span></p>
<p style="text-align: justify;"><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;"><br />
</span></p>
<p><strong><span style="font-size: 14pt; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;">&lt;Caso de Uso&gt; Sacar Dinheiro</span></strong></p>
<p><strong><span style="font-size: 14pt; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;">Autor: </span></strong><span style="font-size: 14pt; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;">Pascal Roques<br />
<strong>Data de Criação: </strong>02/03/2002<strong></strong></span></p>
<p><strong><span style="font-size: 14pt; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;">Última Atualização: </span></strong><span style="font-size: 14pt; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;">18/07/2009<br />
<strong>Responsável pela Atualização:</strong> Thiago Marotta Couto<strong></strong></span></p>
<p><strong><span style="font-size: 14pt; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;">Versão:</span></strong><span style="font-size: 14pt; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;"> 2.2</span></p>
<p><strong><span style="font-size: 14pt; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;">Atores:</span></strong><strong><span style="font-size: 14pt; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;"><br />
</span></strong></p>
<ul>
<li><!--[if !supportLists]--><span style="font-family: Symbol; color: black;"><span></span></span><!--[endif]--><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;">Dono do Cartão (primário)</span></li>
<li><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;">Entidade Financeira (secundário)</span></li>
</ul>
<p style="margin-left: 36pt; text-indent: -18pt;"><!--[if !supportLists]--><span style="font-family: Symbol; color: black;"><span></span></span></p>
<p><strong><span style="font-size: 14pt; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;">Pré-condições:</span></strong></p>
<ul>
<li><!--[if !supportLists]--><span style="font-family: Symbol; color: black;"></span><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;">O caixa eletrônico está abastecido.</span><span style="font-family: Symbol; color: black;"></span></li>
<li><span style="font-family: Symbol; color: black;"><span></span></span><!--[endif]--><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;">Nenhum cartão está inserido na leitora de cartões do caixa eletrônico.</span></li>
</ul>
<p><strong><span style="font-size: 14pt; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;">Fluxo Principal:</span></strong></p>
<p style="margin-left: 36pt; text-indent: -18pt;"><!--[if !supportLists]--><strong><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;"><span>1.<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none;"> </span></span></span></strong><!--[endif]--><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;">O Dono do Cartão insere seu <em>SmartCard</em> na leitora de cartões do caixa eletrônico.<strong></strong></span></p>
<p style="margin-left: 36pt; text-indent: -18pt;"><!--[if !supportLists]--><strong><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;"><span>2.<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none;"> </span></span></span></strong><!--[endif]--><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;">O caixa eletrônico verifica que o cartão inserido é do tipo <em>SmartCard</em>.<strong></strong></span></p>
<p style="margin-left: 36pt; text-indent: -18pt;"><!--[if !supportLists]--><strong><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;"><span>3.<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none;"> </span></span></span></strong><!--[endif]--><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;">O caixa eletrônico pergunta ao Dono do Cartão qual é o seu número PIN.<strong></strong></span></p>
<p style="margin-left: 36pt; text-indent: -18pt;"><!--[if !supportLists]--><strong><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;"><span>4.<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none;"> </span></span></span></strong><!--[endif]--><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;">O Dono do Cartão digita seu número PIN.<strong></strong></span></p>
<p style="margin-left: 36pt; text-indent: -18pt;"><!--[if !supportLists]--><strong><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;"><span>5.<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none;"> </span></span></span></strong><!--[endif]--><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;">O caixa eletrônico verifica que o PIN numérico digitado pelo Dono do Cartão é o mesmo PIN numérico armazenado no <em>CHIP</em> do <em>SmartCard</em>.<strong></strong></span></p>
<p style="margin-left: 36pt; text-indent: -18pt;"><!--[if !supportLists]--><strong><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;"><span>6.<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none;"> </span></span></span></strong><!--[endif]--><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;">O caixa eletrônico envia uma requisição de autorização para a Entidade Financeira.<strong></strong></span></p>
<p style="margin-left: 36pt; text-indent: -18pt;"><!--[if !supportLists]--><strong><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;"><span>7.<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none;"> </span></span></span></strong><!--[endif]--><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;">A Entidade Financeira autoriza a transação para aquele cartão, informando o limite diário de saque.<strong></strong></span></p>
<p style="margin-left: 36pt; text-indent: -18pt;"><!--[if !supportLists]--><strong><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;"><span>8.<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none;"> </span></span></span></strong><!--[endif]--><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;">O caixa eletrônico pergunta ao Dono do Cartão qual valor ele deseja sacar.<strong></strong></span></p>
<p style="margin-left: 36pt; text-indent: -18pt;"><!--[if !supportLists]--><strong><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;"><span>9.<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none;"> </span></span></span></strong><!--[endif]--><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;">O Dono do Cartão digita o valor que deseja sacar.<strong></strong></span></p>
<p style="margin-left: 36pt; text-indent: -18pt;"><!--[if !supportLists]--><strong><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;"><span>10.<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none;"> </span></span></span></strong><!--[endif]--><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;">O caixa eletrônico confirma que o valor a ser sacado está dentro do limite diário.<strong></strong></span></p>
<p style="margin-left: 36pt; text-indent: -18pt;"><!--[if !supportLists]--><strong><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;"><span>11.<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none;"> </span></span></span></strong><!--[endif]--><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;">O caixa eletrônico ejeta o <em>SmartCard</em>.<strong></strong></span></p>
<p style="margin-left: 36pt; text-indent: -18pt;"><!--[if !supportLists]--><strong><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;"><span>12.<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none;"> </span></span></span></strong><!--[endif]--><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;">O Dono do Cartão retira seu <em>SmartCard</em> na leitora.<strong></strong></span></p>
<p style="margin-left: 36pt; text-indent: -18pt;"><!--[if !supportLists]--><strong><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;"><span>13.<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none;"> </span></span></span></strong><!--[endif]--><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;">O caixa eletrônico ejeta o dinheiro.<strong></strong></span></p>
<p style="margin-left: 36pt; text-indent: -18pt;"><!--[if !supportLists]--><strong><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;"><span>14.<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none;"> </span></span></span></strong><!--[endif]--><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;">O Dono do Cartão retira o dinheiro.<br />
<!--[if !supportLineBreakNewLine]--><br />
<!--[endif]--></span></p>
<p style="text-align: justify;"><strong><span style="font-size: 14pt; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;">Fluxos Alternativos:</span></strong></p>
<p><strong><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;">A1: Número PIN incorreto nas duas primeiras tentativas.</span></strong></p>
<p><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;">A seqüência A1 começa após o passo 4 do Fluxo Principal.<strong></strong></span></p>
<p style="margin-left: 53.4pt; text-align: justify; text-indent: -18pt;"><!--[if !supportLists]--><strong><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;"><span>5.<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none;"> </span></span></span></strong><!--[endif]--><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;">O caixa eletrônico verifica, nas duas primeiras tentativas, que o PIN numérico digitado pelo Dono do Cartão não é o mesmo PIN numérico armazenado no <em>CHIP</em> do <em>SmartCard</em>.</span></p>
<p style="margin-left: 53.4pt; text-align: justify; text-indent: -18pt;"><!--[if !supportLists]--><strong><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;"><span>6.<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none;"> </span></span></span></strong><!--[endif]--><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;">O caixa eletrônico informa, ao Dono do Cartão, que o número PIN está incorreto.</span></p>
<p style="margin-left: 53.4pt; text-align: justify; text-indent: -18pt;"><!--[if !supportLists]--><strong><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;"><span>7.<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none;"> </span></span></span></strong><!--[endif]--><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;">O caixa eletrônico armazena a tentativa mal sucedida no <em>CHIP</em> do <em>SmartCard</em>.</span></p>
<p style="text-align: justify;"><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;">O cenário volta para o passo 3.</span></p>
<p style="text-align: justify;"><strong><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;">A2: O valor requisitado para saque é maior que o limite diário.</span></strong></p>
<p style="text-align: justify;"><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;">A seqüência A2 começa após o passo 9 do Fluxo Principal.</span></p>
<p style="margin-left: 53.4pt; text-align: justify; text-indent: -18pt;"><!--[if !supportLists]--><strong><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;"><span>11.<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none;"> </span></span></span></strong><!--[endif]--><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;">O caixa eletrônico informa ao Dono do Cartão que o valor requisitado é maior que o limite diário para saque.</span></p>
<p style="text-align: justify;"><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;">O cenário volta para o passo 8.</span></p>
<p style="text-align: justify;"><strong><span style="font-size: 14pt; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;">Fluxos de Erro:</span></strong></p>
<p style="text-align: justify;"><strong><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;">E1: Número PIN incorreto na terceira tentativa.</span></strong></p>
<p style="text-align: justify;"><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;">A seqüência E1 começa após o passo 4 do Fluxo Principal.</span></p>
<p style="margin-left: 53.4pt; text-align: justify; text-indent: -18pt;"><!--[if !supportLists]--><strong><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;"><span>5.<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none;"> </span></span></span></strong><!--[endif]--><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;">O caixa eletrônico verifica, pela terceira vez, que o PIN numérico digitado pelo Dono do Cartão não é o mesmo PIN numérico armazenado no <em>CHIP</em> do <em>SmartCard</em>.</span></p>
<p style="margin-left: 53.4pt; text-align: justify; text-indent: -18pt;"><!--[if !supportLists]--><strong><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;"><span>6.<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none;"> </span></span></span></strong><!--[endif]--><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;">O caixa eletrônico confisca o <em>SmartCard</em>.</span></p>
<p style="margin-left: 53.4pt; text-align: justify; text-indent: -18pt;"><!--[if !supportLists]--><strong><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;"><span>7.<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none;"> </span></span></span></strong><!--[endif]--><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;">A Entidade Financeira é informada sobre a falha de autenticação.</span></p>
<p style="text-align: justify;"><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;">O Caso de Uso falha.</span></p>
<p style="text-align: justify;"><strong><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;">E2: Cartão inválido.</span></strong></p>
<p style="text-align: justify;"><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;">A seqüência E2 começa após o passo 1 do Fluxo Principal.</span></p>
<p style="margin-left: 53.4pt; text-align: justify; text-indent: -18pt;"><!--[if !supportLists]--><strong><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;"><span>2.<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none;"> </span></span></span></strong><!--[endif]--><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;">O caixa eletrônico informa ao Dono do Cartão que seu cartão não é válido (não é um <em>SmartCard</em>; não pode ser lido; está expirado; etc.).</span></p>
<p style="text-align: justify;"><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;">O Caso de Uso falha.</span></p>
<p style="text-align: justify;"><strong><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;">E3: Limite diário não autorizado.</span></strong></p>
<p style="text-align: justify;"><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;">A seqüência E3 começa após o passo 6 do Fluxo Principal.</span></p>
<p style="margin-left: 53.4pt; text-align: justify; text-indent: -18pt;"><!--[if !supportLists]--><strong><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;"><span>7.<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none;"> </span></span></span></strong><!--[endif]--><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;">A Entidade Financeira rejeita a transação para a quantia especificada.</span></p>
<p style="margin-left: 53.4pt; text-align: justify; text-indent: -18pt;"><!--[if !supportLists]--><strong><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;"><span>8.<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none;"> </span></span></span></strong><!--[endif]--><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;">O Caixa eletrônico ejeta o <em>SmartCard</em>.</span></p>
<p style="text-align: justify;"><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;">O Caso de Uso falha.</span></p>
<p style="text-align: justify;"><strong><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;">E4: O cartão não é retirado pelo Dono do Cartão.</span></strong></p>
<p style="text-align: justify;"><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;">A seqüência E4 começa após o passo 11 do Fluxo Principal.</span></p>
<p style="margin-left: 53.4pt; text-align: justify; text-indent: -18pt;"><!--[if !supportLists]--><strong><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;"><span>12.<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none;"> </span></span></span></strong><!--[endif]--><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;">Após 15 segundos, o caixa eletrônico confisca o <em>SmartCard</em>.</span></p>
<p style="margin-left: 53.4pt; text-align: justify; text-indent: -18pt;"><!--[if !supportLists]--><strong><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;"><span>13.<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none;"> </span></span></span></strong><!--[endif]--><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;">A Entidade Financeira é informada sobre o cartão confiscado.</span></p>
<p style="text-align: justify;"><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;">O Caso de Uso falha.</span></p>
<p style="text-align: justify;"><strong><span style="font-size: 14pt; font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;">Pós-Condições:</span></strong></p>
<ul>
<li><!--[if !supportLists]--><span style="font-family: Symbol; color: black;"><span></span></span><!--[endif]--><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;">A gaveta de dinheiro do caixa eletrônico contém uma quantidade de notas inferior à quantidade estabelecida no início deste Caso de Uso (o número exato de notas faltantes depende diretamente da quantidade de transações realizadas e o valor de cada operação de saque).</span></li>
</ul>
<p style="text-align: justify;"><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;"> </span></p>
<p style="text-align: justify;"><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;"><br />
</span></p>
<p style="text-align: justify;"><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;">Notem que, além de descrever os fluxos dos Casos de Uso também estão presentes, no exemplo anterior, seções (conceitos) como “Pré-Condições”, “Pós-Condições” e “Atores”. É importante acrescentá-los na descrição dos <em>Use Cases</em> para que o leitor tenha uma visão completa de todo o processo, ou seja, como o cenário estava antes da execução do processo, como o cenário ficará em seguida e quais atores interagiram com aquele Caso de Uso.</span></p>
<p style="text-align: justify;"><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;">Adicionalmente é uma boa prática disponibilizar um cabeçalho com os dados de criação do Caso de Uso, com informações básicas de quem criou e atualizou o documento e suas respectivas datas.</span></p>
<p style="text-align: justify;"><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;">Para que os artigos não fiquem demasiadamente extensos (se é que este já não ficou), vamos parar por aqui e deixar para os próximos artigos os conceitos de Generalização/Especialização, Inclusão e Extensão. Futuramente também trataremos especificamente dos Diagramas de Caso de Uso, frutos de várias confusões sobre a forma correta de “interligá-los”.</span></p>
<p style="text-align: justify;"><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;">Referências Bibliográficas:</span></p>
<p style="text-align: justify;"><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;">BOOCH, Grady; RUMBAUGH, James; JACOBSON, Ivair. UML: Guia do Usuário. Rio de Janeiro, 2005.</span></p>
<p style="text-align: justify;"><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;" lang="EN-US">ROQUES, Pascal. UML in Practice &#8211; The Art of Modeling Software Systems Demonstrated throught Worked Examples and Solutions. </span><span style="font-family: &quot;Arial&quot;,&quot;sans-serif&quot;; color: black;">Paris, França. 2001.</span></p>
</div>]]></content:encoded>
			<wfw:commentRss>http://isbyte.com/index.php/2009/07/como-escrever-casos-de-uso/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Localization em ASP.NET</title>
		<link>http://isbyte.com/index.php/2009/05/localization-em-aspnet/</link>
		<comments>http://isbyte.com/index.php/2009/05/localization-em-aspnet/#comments</comments>
		<pubDate>Sat, 09 May 2009 16:26:27 +0000</pubDate>
		<dc:creator>Thiago Marotta</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Visual Basic]]></category>
		<category><![CDATA[App_LocalResources]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[ASP.NET culture]]></category>
		<category><![CDATA[ASP.NET en-US]]></category>
		<category><![CDATA[ASP.NET Generate Local Resource]]></category>
		<category><![CDATA[ASP.NET Languages]]></category>
		<category><![CDATA[ASP.NET Linguagens]]></category>
		<category><![CDATA[ASP.NET Local Resources]]></category>
		<category><![CDATA[ASP.NET LocalResources]]></category>
		<category><![CDATA[asp.net multi-idioma]]></category>
		<category><![CDATA[ASP.NET pt-BR]]></category>
		<category><![CDATA[ASP.NET resourcekey]]></category>
		<category><![CDATA[ASP.NET uiculture]]></category>
		<category><![CDATA[C# culture]]></category>
		<category><![CDATA[C# en-US]]></category>
		<category><![CDATA[C# Generate Local Resource]]></category>
		<category><![CDATA[C# Globalização]]></category>
		<category><![CDATA[C# Globalization]]></category>
		<category><![CDATA[C# Internacionalização]]></category>
		<category><![CDATA[C# Internacionalization]]></category>
		<category><![CDATA[C# Local Resources]]></category>
		<category><![CDATA[C# Localização]]></category>
		<category><![CDATA[C# Localization]]></category>
		<category><![CDATA[C# LocalResources]]></category>
		<category><![CDATA[c# multi-idioma]]></category>
		<category><![CDATA[C# pt-BR]]></category>
		<category><![CDATA[C# resourcekey]]></category>
		<category><![CDATA[C# uiculture]]></category>
		<category><![CDATA[Cultura ASP.NET]]></category>
		<category><![CDATA[Cultura C#]]></category>
		<category><![CDATA[culture]]></category>
		<category><![CDATA[en-US]]></category>
		<category><![CDATA[en-US.resx]]></category>
		<category><![CDATA[Generate Local Resource]]></category>
		<category><![CDATA[Globalização]]></category>
		<category><![CDATA[Globalization]]></category>
		<category><![CDATA[Idioma ASP.NET]]></category>
		<category><![CDATA[Idioma da Página]]></category>
		<category><![CDATA[Idiomas ASP.NET]]></category>
		<category><![CDATA[Idioms ASP.NET]]></category>
		<category><![CDATA[Internacionalizacao]]></category>
		<category><![CDATA[Internacionalization]]></category>
		<category><![CDATA[Language ASP.NET]]></category>
		<category><![CDATA[Língua da Página]]></category>
		<category><![CDATA[Linguagem ASP.NET]]></category>
		<category><![CDATA[Linguagem da Página]]></category>
		<category><![CDATA[Local Resources]]></category>
		<category><![CDATA[Localização]]></category>
		<category><![CDATA[Localization]]></category>
		<category><![CDATA[meta:resourcekey]]></category>
		<category><![CDATA[multi-idioma]]></category>
		<category><![CDATA[multi-idiomas]]></category>
		<category><![CDATA[pt-BR]]></category>
		<category><![CDATA[pt-BR.resx]]></category>
		<category><![CDATA[resourcekey]]></category>
		<category><![CDATA[resx]]></category>
		<category><![CDATA[site multi-idioma]]></category>
		<category><![CDATA[Visual Studio]]></category>
		<category><![CDATA[Visual Studio 2008 Generate Local Resource]]></category>

		<guid isPermaLink="false">http://isbyte.com/?p=264</guid>
		<description><![CDATA[<p> </p>
<p class="MsoNormal" style="text-align: justify;">No início desta semana, um colega de trabalho me perguntou como funcionam os conceitos Globalization e Localization do ASP.NET e, como não é comum encontrar pessoas que os utilizam na prática, surgiu a idéia de falar um pouquinho sobre eles aqui no blog e explicar do que se trata e como [...]]]></description>
			<content:encoded><![CDATA[<div id=HOTWordsTxt name=HOTWordsTxt><p><!--[if gte mso 9]><xml> <w:WordDocument> <w:View>Normal</w:View> <w:Zoom>0</w:Zoom> <w:TrackMoves /> <w:TrackFormatting /> <w:HyphenationZone>21</w:HyphenationZone> <w:PunctuationKerning /> <w:ValidateAgainstSchemas /> <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid> <w:IgnoreMixedContent>false</w:IgnoreMixedContent> <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText> <w:DoNotPromoteQF /> <w:LidThemeOther>PT-BR</w:LidThemeOther> <w:LidThemeAsian>X-NONE</w:LidThemeAsian> <w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript> <w:Compatibility> <w:BreakWrappedTables /> <w:SnapToGridInCell /> <w:WrapTextWithPunct /> <w:UseAsianBreakRules /> <w:DontGrowAutofit /> <w:SplitPgBreakAndParaMark /> <w:DontVertAlignCellWithSp /> <w:DontBreakConstrainedForcedTables /> <w:DontVertAlignInTxbx /> <w:Word11KerningPairs /> <w:CachedColBalance /> </w:Compatibility> <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel> <m:mathPr> <m:mathFont m:val="Cambria Math" /> <m:brkBin m:val="before" /> <m:brkBinSub m:val="&#45;-" /> <m:smallFrac m:val="off" /> <m:dispDef /> <m:lMargin m:val="0" /> <m:rMargin m:val="0" /> <m:defJc m:val="centerGroup" /> <m:wrapIndent m:val="1440" /> <m:intLim m:val="subSup" /> <m:naryLim m:val="undOvr" /> </m:mathPr></w:WordDocument> </xml><![endif]--><!--[if gte mso 9]><xml> <w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true"   DefSemiHidden="true" DefQFormat="false" DefPriority="99"   LatentStyleCount="267"> <w:LsdException Locked="false" Priority="0" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Normal" /> <w:LsdException Locked="false" Priority="9" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="heading 1" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 2" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 3" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 4" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 5" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 6" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 7" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9" /> <w:LsdException Locked="false" Priority="39" Name="toc 1" /> <w:LsdException Locked="false" Priority="39" Name="toc 2" /> <w:LsdException Locked="false" Priority="39" Name="toc 3" /> <w:LsdException Locked="false" Priority="39" Name="toc 4" /> <w:LsdException Locked="false" Priority="39" Name="toc 5" /> <w:LsdException Locked="false" Priority="39" Name="toc 6" /> <w:LsdException Locked="false" Priority="39" Name="toc 7" /> <w:LsdException Locked="false" Priority="39" Name="toc 8" /> <w:LsdException Locked="false" Priority="39" Name="toc 9" /> <w:LsdException Locked="false" Priority="35" QFormat="true" Name="caption" /> <w:LsdException Locked="false" Priority="10" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Title" /> <w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font" /> <w:LsdException Locked="false" Priority="11" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Subtitle" /> <w:LsdException Locked="false" Priority="22" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Strong" /> <w:LsdException Locked="false" Priority="20" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Emphasis" /> <w:LsdException Locked="false" Priority="59" SemiHidden="false"    UnhideWhenUsed="false" Name="Table Grid" /> <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Placeholder Text" /> <w:LsdException Locked="false" Priority="1" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="No Spacing" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 1" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 1" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 1" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 1" /> <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Revision" /> <w:LsdException Locked="false" Priority="34" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="List Paragraph" /> <w:LsdException Locked="false" Priority="29" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Quote" /> <w:LsdException Locked="false" Priority="30" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Intense Quote" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 1" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 1" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 1" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 1" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 1" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 2" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 2" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 2" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 2" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 2" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 2" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 2" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 2" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 2" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 3" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 3" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 3" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 3" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 3" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 3" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 3" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 3" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 3" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 4" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 4" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 4" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 4" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 4" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 4" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 4" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 4" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 4" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 5" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 5" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 5" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 5" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 5" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 5" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 5" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 5" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 5" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 6" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 6" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 6" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 6" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 6" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 6" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 6" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 6" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 6" /> <w:LsdException Locked="false" Priority="19" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis" /> <w:LsdException Locked="false" Priority="21" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis" /> <w:LsdException Locked="false" Priority="31" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference" /> <w:LsdException Locked="false" Priority="32" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Intense Reference" /> <w:LsdException Locked="false" Priority="33" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Book Title" /> <w:LsdException Locked="false" Priority="37" Name="Bibliography" /> <w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading" /> </w:LatentStyles> </xml><![endif]--><!--  /* Font Definitions */  @font-face 	{font-family:Wingdings; 	panose-1:5 0 0 0 0 0 0 0 0 0; 	mso-font-charset:2; 	mso-generic-font-family:auto; 	mso-font-pitch:variable; 	mso-font-signature:0 268435456 0 0 -2147483648 0;} @font-face 	{font-family:"Cambria Math"; 	panose-1:2 4 5 3 5 4 6 3 2 4; 	mso-font-charset:1; 	mso-generic-font-family:roman; 	mso-font-format:other; 	mso-font-pitch:variable; 	mso-font-signature:0 0 0 0 0 0;} @font-face 	{font-family:Calibri; 	panose-1:2 15 5 2 2 2 4 3 2 4; 	mso-font-charset:0; 	mso-generic-font-family:swiss; 	mso-font-pitch:variable; 	mso-font-signature:-1610611985 1073750139 0 0 159 0;}  /* Style Definitions */  p.MsoNormal, li.MsoNormal, div.MsoNormal 	{mso-style-unhide:no; 	mso-style-qformat:yes; 	mso-style-parent:""; 	margin-top:0cm; 	margin-right:0cm; 	margin-bottom:10.0pt; 	margin-left:0cm; 	line-height:115%; 	mso-pagination:widow-orphan; 	font-size:11.0pt; 	font-family:"Calibri","sans-serif"; 	mso-ascii-font-family:Calibri; 	mso-ascii-theme-font:minor-latin; 	mso-fareast-font-family:Calibri; 	mso-fareast-theme-font:minor-latin; 	mso-hansi-font-family:Calibri; 	mso-hansi-theme-font:minor-latin; 	mso-bidi-font-family:"Times New Roman"; 	mso-bidi-theme-font:minor-bidi; 	mso-fareast-language:EN-US;} p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph 	{mso-style-priority:34; 	mso-style-unhide:no; 	mso-style-qformat:yes; 	margin-top:0cm; 	margin-right:0cm; 	margin-bottom:10.0pt; 	margin-left:36.0pt; 	mso-add-space:auto; 	line-height:115%; 	mso-pagination:widow-orphan; 	font-size:11.0pt; 	font-family:"Calibri","sans-serif"; 	mso-ascii-font-family:Calibri; 	mso-ascii-theme-font:minor-latin; 	mso-fareast-font-family:Calibri; 	mso-fareast-theme-font:minor-latin; 	mso-hansi-font-family:Calibri; 	mso-hansi-theme-font:minor-latin; 	mso-bidi-font-family:"Times New Roman"; 	mso-bidi-theme-font:minor-bidi; 	mso-fareast-language:EN-US;} p.MsoListParagraphCxSpFirst, li.MsoListParagraphCxSpFirst, div.MsoListParagraphCxSpFirst 	{mso-style-priority:34; 	mso-style-unhide:no; 	mso-style-qformat:yes; 	mso-style-type:export-only; 	margin-top:0cm; 	margin-right:0cm; 	margin-bottom:0cm; 	margin-left:36.0pt; 	margin-bottom:.0001pt; 	mso-add-space:auto; 	line-height:115%; 	mso-pagination:widow-orphan; 	font-size:11.0pt; 	font-family:"Calibri","sans-serif"; 	mso-ascii-font-family:Calibri; 	mso-ascii-theme-font:minor-latin; 	mso-fareast-font-family:Calibri; 	mso-fareast-theme-font:minor-latin; 	mso-hansi-font-family:Calibri; 	mso-hansi-theme-font:minor-latin; 	mso-bidi-font-family:"Times New Roman"; 	mso-bidi-theme-font:minor-bidi; 	mso-fareast-language:EN-US;} p.MsoListParagraphCxSpMiddle, li.MsoListParagraphCxSpMiddle, div.MsoListParagraphCxSpMiddle 	{mso-style-priority:34; 	mso-style-unhide:no; 	mso-style-qformat:yes; 	mso-style-type:export-only; 	margin-top:0cm; 	margin-right:0cm; 	margin-bottom:0cm; 	margin-left:36.0pt; 	margin-bottom:.0001pt; 	mso-add-space:auto; 	line-height:115%; 	mso-pagination:widow-orphan; 	font-size:11.0pt; 	font-family:"Calibri","sans-serif"; 	mso-ascii-font-family:Calibri; 	mso-ascii-theme-font:minor-latin; 	mso-fareast-font-family:Calibri; 	mso-fareast-theme-font:minor-latin; 	mso-hansi-font-family:Calibri; 	mso-hansi-theme-font:minor-latin; 	mso-bidi-font-family:"Times New Roman"; 	mso-bidi-theme-font:minor-bidi; 	mso-fareast-language:EN-US;} p.MsoListParagraphCxSpLast, li.MsoListParagraphCxSpLast, div.MsoListParagraphCxSpLast 	{mso-style-priority:34; 	mso-style-unhide:no; 	mso-style-qformat:yes; 	mso-style-type:export-only; 	margin-top:0cm; 	margin-right:0cm; 	margin-bottom:10.0pt; 	margin-left:36.0pt; 	mso-add-space:auto; 	line-height:115%; 	mso-pagination:widow-orphan; 	font-size:11.0pt; 	font-family:"Calibri","sans-serif"; 	mso-ascii-font-family:Calibri; 	mso-ascii-theme-font:minor-latin; 	mso-fareast-font-family:Calibri; 	mso-fareast-theme-font:minor-latin; 	mso-hansi-font-family:Calibri; 	mso-hansi-theme-font:minor-latin; 	mso-bidi-font-family:"Times New Roman"; 	mso-bidi-theme-font:minor-bidi; 	mso-fareast-language:EN-US;} .MsoChpDefault 	{mso-style-type:export-only; 	mso-default-props:yes; 	mso-ascii-font-family:Calibri; 	mso-ascii-theme-font:minor-latin; 	mso-fareast-font-family:Calibri; 	mso-fareast-theme-font:minor-latin; 	mso-hansi-font-family:Calibri; 	mso-hansi-theme-font:minor-latin; 	mso-bidi-font-family:"Times New Roman"; 	mso-bidi-theme-font:minor-bidi; 	mso-fareast-language:EN-US;} .MsoPapDefault 	{mso-style-type:export-only; 	margin-bottom:10.0pt; 	line-height:115%;} @page Section1 	{size:595.3pt 841.9pt; 	margin:70.85pt 3.0cm 70.85pt 3.0cm; 	mso-header-margin:35.4pt; 	mso-footer-margin:35.4pt; 	mso-paper-source:0;} div.Section1 	{page:Section1;}  /* List Definitions */  @list l0 	{mso-list-id:188567250; 	mso-list-type:hybrid; 	mso-list-template-ids:1284246382 68550657 68550659 68550661 68550657 68550659 68550661 68550657 68550659 68550661;} @list l0:level1 	{mso-level-number-format:bullet; 	mso-level-text:; 	mso-level-tab-stop:none; 	mso-level-number-position:left; 	margin-left:38.15pt; 	text-indent:-18.0pt; 	font-family:Symbol;} @list l1 	{mso-list-id:368652126; 	mso-list-type:hybrid; 	mso-list-template-ids:-741022230 68550657 68550659 68550661 68550657 68550659 68550661 68550657 68550659 68550661;} @list l1:level1 	{mso-level-number-format:bullet; 	mso-level-text:; 	mso-level-tab-stop:none; 	mso-level-number-position:left; 	margin-left:72.0pt; 	text-indent:-18.0pt; 	font-family:Symbol;} @list l2 	{mso-list-id:416824271; 	mso-list-type:hybrid; 	mso-list-template-ids:1791020664 68550657 68550659 68550661 68550657 68550659 68550661 68550657 68550659 68550661;} @list l2:level1 	{mso-level-number-format:bullet; 	mso-level-text:; 	mso-level-tab-stop:none; 	mso-level-number-position:left; 	margin-left:72.0pt; 	text-indent:-18.0pt; 	font-family:Symbol;} @list l3 	{mso-list-id:1128233233; 	mso-list-type:hybrid; 	mso-list-template-ids:846470048 68550671 68550681 68550683 68550671 68550681 68550683 68550671 68550681 68550683;} @list l3:level1 	{mso-level-tab-stop:none; 	mso-level-number-position:left; 	text-indent:-18.0pt;} @list l4 	{mso-list-id:1605771027; 	mso-list-type:hybrid; 	mso-list-template-ids:776231898 68550657 68550659 68550661 68550657 68550659 68550661 68550657 68550659 68550661;} @list l4:level1 	{mso-level-number-format:bullet; 	mso-level-text:; 	mso-level-tab-stop:none; 	mso-level-number-position:left; 	margin-left:72.0pt; 	text-indent:-18.0pt; 	font-family:Symbol;} ol 	{margin-bottom:0cm;} ul 	{margin-bottom:0cm;} --><!--[if gte mso 10]> <mce:style><!   /* Style Definitions */  table.MsoNormalTable 	{mso-style-name:"Tabela normal"; 	mso-tstyle-rowband-size:0; 	mso-tstyle-colband-size:0; 	mso-style-noshow:yes; 	mso-style-priority:99; 	mso-style-qformat:yes; 	mso-style-parent:""; 	mso-padding-alt:0cm 5.4pt 0cm 5.4pt; 	mso-para-margin-top:0cm; 	mso-para-margin-right:0cm; 	mso-para-margin-bottom:10.0pt; 	mso-para-margin-left:0cm; 	line-height:115%; 	mso-pagination:widow-orphan; 	font-size:11.0pt; 	font-family:"Calibri","sans-serif"; 	mso-ascii-font-family:Calibri; 	mso-ascii-theme-font:minor-latin; 	mso-hansi-font-family:Calibri; 	mso-hansi-theme-font:minor-latin; 	mso-fareast-language:EN-US;} --> <!--[endif]--></p>
<p class="MsoNormal" style="text-align: justify;">No início desta semana, um colega de trabalho me perguntou como funcionam os conceitos <em>Globalization </em>e <em>Localization</em> do <em>ASP.NET</em> e, como não é comum encontrar pessoas que os utilizam na prática, surgiu a idéia de falar um pouquinho sobre eles aqui no <em>blog</em> e explicar do que se trata e como agir para colocá-los em prática.</p>
<p class="MsoNormal" style="text-align: justify;">Hoje vou falar um pouco sobre o <em>Localization</em>!</p>
<p class="MsoNormal" style="text-align: justify;"><strong>O que é <em>Localization</em> (ou Localização)<em>?</em></strong></p>
<p class="MsoNormal" style="text-align: justify;"><em>Localization</em> é a palavra escolhida para definir um conceito fantástico que se resume em tornar sua página <em>Web</em> independente do idioma do visitante, ou seja, caso um brasileiro visite seu <em>site</em>, o verá em português, caso o visitante seja um norte-americano, visualizará em inglês.</p>
<p class="MsoNormal" style="text-align: justify;">Antigamente, para realizar tal tarefa o desenvolvedor poderia optar por, basicamente, duas alternativas:</p>
<p class="MsoListParagraphCxSpFirst" style="margin-left: 38.15pt; text-align: justify; text-indent: -18pt;"><!--[if !supportLists]--><span style="font-family: Symbol;"><span>·<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none;"> </span></span></span><!--[endif]-->Criar uma versão da página para cada idioma;</p>
<p class="MsoListParagraphCxSpLast" style="margin-left: 38.15pt; text-align: justify; text-indent: -18pt;"><!--[if !supportLists]--><span style="font-family: Symbol;"><span>·<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none;"> </span></span></span><!--[endif]-->Desenvolver um mecanismo que verificasse o idioma do usuário e buscasse em um arquivo ou banco de dados os textos corretos a serem exibidos, exibindo-os na página.</p>
<p class="MsoNormal" style="text-align: justify;">A primeira opção, embora seja a mais simples de executar, duplicaria o tamanho total do seu <em>Website</em>, além da necessidade de se criar uma página principal onde o usuário escolheria, no início da navegação, com qual idioma ele gostaria de prosseguir.</p>
<p class="MsoNormal" style="text-align: justify;">Notada por muitos como a solução mais elegante, a segunda opção passou então a ser o foco dos arquitetos de sistemas voltados para a <em>Web</em>, uma vez que, dentre várias vantagens, seria possível modificar ou incluir um idioma sem a necessidade de acessar o código-fonte da aplicação, ou seja, dando segurança para o projeto e independência para as equipes de desenvolvimento e tradução.</p>
<p class="MsoNormal" style="text-align: justify;">Como a necessidade de “localização” é comum a quase todos os projetos de <em>software</em> (seja para <em>Web</em> ou não), a <em>Microsoft</em> apresentou este mecanismo já implementado no <em>.NET Framework</em>, sendo possível tornar sua aplicação independente de idioma com apenas alguns procedimentos e cliques (sem digitar uma linha sequer de código).</p>
<p class="MsoNormal" style="text-align: justify;"><strong>Como utilizar <em>Localization</em> na minha página ASP.NET?</strong></p>
<p class="MsoNormal" style="text-align: justify;">Hoje em dia ficou fácil adicionar suporte a um determinado idioma na sua aplicação <em>Web</em> desenvolvida em <em>ASP.NET</em>. Veja como fazer, passo a passo:</p>
<ul>
<li>Crie um novo projeto  (<a href="http://isbyte.com/wp-content/uploads/2009/05/localization01.gif" target="_blank">ver imagem</a>):</li>
</ul>
<p class="MsoListParagraphCxSpMiddle" style="margin-left: 72pt; text-align: justify; text-indent: -18pt;"><!--[if !supportLists]--><span style="font-family: Symbol;"><span>·<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none;"> </span></span></span><!--[endif]-->No Visual Studio 2008, clique em <em>File</em>, <em>New</em>, <em>Project</em>;</p>
<p class="MsoListParagraphCxSpMiddle" style="margin-left: 72pt; text-align: justify; text-indent: -18pt;"><!--[if !supportLists]--><span style="font-family: Symbol;"><span>·<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none;"> </span></span></span><!--[endif]-->Em <em>Project Types</em>, escolha sua linguagem de desenvolvimento favorita e em <em>Templates</em> escolha <em>ASP.NET Web Application.</em></p>
<ul>
<li>Adicione alguns controles à página Default.aspx  (<a href="http://isbyte.com/wp-content/uploads/2009/05/localization02.gif" target="_blank">ver imagem</a>):</li>
</ul>
<p class="MsoListParagraphCxSpMiddle" style="margin-left: 72pt; text-align: justify; text-indent: -18pt;"><!--[if !supportLists]--><span style="font-family: Symbol;"><span>·<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none;"> </span></span></span><!--[endif]-->Através do <em>Solution Explorer</em>, clique com o botão direito em <em>Default.aspx</em> e clique em <em>View Designer</em> no menu flutuante;</p>
<p class="MsoListParagraphCxSpMiddle" style="margin-left: 72pt; text-align: justify; text-indent: -18pt;"><!--[if !supportLists]--><span style="font-family: Symbol;"><span>·<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none;"> </span></span></span><!--[endif]-->Arraste do <em>ToolBox</em> um controle <em>Label</em> para a página, definindo seu texto para “Seja bem vindo!” e seu ID para “cLabelWelcome”;</p>
<p class="MsoListParagraphCxSpMiddle" style="margin-left: 72pt; text-align: justify; text-indent: -18pt;"><!--[if !supportLists]--><span style="font-family: Symbol;"><span>·<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none;"> </span></span></span><!--[endif]-->Arraste do <em>ToolBox</em> um controle <em>Button</em> para a página, definindo seu texto para “Clique aqui para entrar” e seu ID para “cButtonEnter”.</p>
<p class="MsoListParagraphCxSpMiddle" style="margin-left: 72pt; text-align: justify;">
<ul>
<li><!--[if !supportLists]-->Crie o arquivo de <em>Resource</em> com a língua padrão  (<a href="http://isbyte.com/wp-content/uploads/2009/05/localization03.gif" target="_blank">ver imagem</a>):</li>
</ul>
<p class="MsoListParagraphCxSpMiddle" style="margin-left: 72pt; text-align: justify; text-indent: -18pt;"><!--[if !supportLists]--><span style="font-family: Symbol;"><span>·<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none;"> </span></span></span><!--[endif]-->Clique no menu <em>Tools</em>, <em>Generate Local Resource</em>.</p>
<p class="MsoListParagraphCxSpMiddle" style="margin-left: 72pt; text-align: justify;">
<ul>
<li><!--[if !supportLists]--><span><span></span></span><!--[endif]-->Crie o arquivo de <em>Resource</em> com a língua alternativa:</li>
</ul>
<p class="MsoListParagraphCxSpMiddle" style="margin-left: 72pt; text-align: justify; text-indent: -18pt;"><!--[if !supportLists]--><span style="font-family: Symbol;"><span>·<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none;"> </span></span></span><!--[endif]-->Através do <em>Solution Explorer</em>, clique com o botão direito no arquivo <em>Default.aspx.resx</em> que está localizado dentro da pasta <em>App_LocalResources</em> criada pelo <em>Visual Studio 2008</em> e clique em <em>Copy</em>;</p>
<p class="MsoListParagraphCxSpMiddle" style="margin-left: 72pt; text-align: justify; text-indent: -18pt;"><!--[if !supportLists]--><span style="font-family: Symbol;"><span>·<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none;"> </span></span></span><!--[endif]-->Clique com o botão direito sobre a pasta <em>App_LocalResources</em> e clique em <em>Paste</em>;</p>
<p class="MsoListParagraphCxSpMiddle" style="margin-left: 72pt; text-align: justify; text-indent: -18pt;"><!--[if !supportLists]--><span style="font-family: Symbol;"><span>·<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none;"> </span></span></span><!--[endif]-->Renomeie o arquivo <em>Copy of Default.aspx.resx</em> para <em>Default.aspx.en-us.resx</em> e clique duas vezes sobre ele para abri-lo;</p>
<p class="MsoListParagraphCxSpMiddle" style="margin-left: 72pt; text-align: justify; text-indent: -18pt;"><!--[if !supportLists]--><span style="font-family: Symbol;"><span>·<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none;"> </span></span></span><!--[endif]-->Substitua o texto “Clique aqui para entrar” por “Click here to enter”, assim como o texto “Seja bem vindo!” por “Welcome!”;</p>
<p class="MsoListParagraphCxSpLast" style="margin-left: 72pt; text-align: justify; text-indent: -18pt;"><!--[if !supportLists]--><span style="font-family: Symbol;"><span>·<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal; -x-system-font: none;"> </span></span></span><!--[endif]-->No menu do <em>Visual Studio 2008</em>, clique em <em>File</em>, <em>Save App_LocalResources\Default.aspx.en-us.resx</em>.</p>
<p class="MsoNormal" style="text-align: justify;">Pronto! Sua aplicação já oferece suporte para o idioma português (idioma padrão) e inglês&#8230; Para adicionar novos idiomas, repita a etapa 4, mas ao renomear o arquivo, substitua “en-us” pelo código da língua desejada, como “en-ca” para inglês canadense ou “es-mx” para espanhol mexicano.</p>
<p class="MsoNormal" style="text-align: justify;">No momento em que sua página for acessada, o <em>ASP.NET</em> verificará o idioma marcado no navegador do usuário e encontrará o arquivo de <em>Resource</em> correto, que será aplicado à página para exibir os textos corretamente. Caso o arquivo correto não seja encontrado (usuário esteja utilizando um idioma que não possui um arquivo de <em>Resource</em> para ele), a página irá utilizar o arquivo padrão (aquele que não tem o código do idioma).</p>
<p class="MsoNormal" style="text-align: justify;">Para testar sua aplicação, execute o projeto e verifique o idioma em que foram exibidos os textos do <em>site</em>. Em seguida, no <em>Internet Explorer</em>, vá em <em>Tools</em> (Ferramentas), <em>Internet Options</em> (Opções de Internet) e clique no botão <em>Languages</em> (Idiomas). Com o botão <em>Add </em>(Adicionar), escolha a opção <em>English (United States) [en-US]</em> e clique em <em>Ok</em>. Com ajuda do botão <em>Move Up </em>(Acima), coloque a nova opção como a primeira da lista e dê <em>Ok </em>nas duas janelas abertas.</p>
<p class="MsoNormal" style="text-align: center;"><a href="http://isbyte.com/wp-content/uploads/2009/05/localization04.gif" target="_blank"><img class="size-medium wp-image-268 aligncenter" title="localization04" src="http://isbyte.com/wp-content/uploads/2009/05/localization04-277x300.gif" alt="localization04" width="277" height="300" /></a></p>
<p class="MsoNormal" style="text-align: justify;">Clique em <em>Refresh</em> (Atualizar) ou pressione <em>F5</em> no navegador para ver a página aplicando os textos conforme a nova linguagem definida no <em>browser</em>&#8230; <span> </span></p>
<p>Bom, é isso pessoal. Em breve falaremos um pouco sobre <em>Globalization</em>. Até lá!</p>
</div>]]></content:encoded>
			<wfw:commentRss>http://isbyte.com/index.php/2009/05/localization-em-aspnet/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Performance em Silverlight – Dica Rápida #3</title>
		<link>http://isbyte.com/index.php/2009/05/performance-em-silverlight-%e2%80%93-dica-rapida-3/</link>
		<comments>http://isbyte.com/index.php/2009/05/performance-em-silverlight-%e2%80%93-dica-rapida-3/#comments</comments>
		<pubDate>Fri, 01 May 2009 20:49:05 +0000</pubDate>
		<dc:creator>Thiago Marotta</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[.NET Framework]]></category>
		<category><![CDATA[Culture Local]]></category>
		<category><![CDATA[CultureInfo.InvariantCulture]]></category>
		<category><![CDATA[Double]]></category>
		<category><![CDATA[Double.ToString]]></category>
		<category><![CDATA[Double.ToString(CultureInfo.InvariantCulture)]]></category>
		<category><![CDATA[InvariantCulture]]></category>
		<category><![CDATA[Local Culture Silverlight]]></category>
		<category><![CDATA[Microsoft Silverlight]]></category>
		<category><![CDATA[MS Help]]></category>
		<category><![CDATA[Numbers Local Culture]]></category>
		<category><![CDATA[Números na Cultura Local]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Performance em Silverlight]]></category>
		<category><![CDATA[Performance Tips]]></category>
		<category><![CDATA[Silverlight Double]]></category>
		<category><![CDATA[Silverlight InvariantCulture]]></category>
		<category><![CDATA[Silverlight Numbers]]></category>
		<category><![CDATA[Silverlight Números]]></category>
		<category><![CDATA[Silverlight Performance]]></category>
		<category><![CDATA[Silverlight ToString]]></category>
		<category><![CDATA[ToString]]></category>
		<category><![CDATA[XAML]]></category>

		<guid isPermaLink="false">http://isbyte.com/?p=260</guid>
		<description><![CDATA[<p></p>
<p></p>
<p class="MsoNormal" style="text-align: justify;">Utilize o método Double.ToString(CultureInfo.InvariantCulture) ao invés de simplesmente Double.ToString().</p>
<p class="MsoNormal" style="text-align: justify;">O método Double.ToString(IFormatProvider) que recebe CultureInfo.InvariantCulture como argumento é otimizado para obter melhor performance.</p>
<p class="MsoNormal" style="text-align: justify;">Em geral, quando não se deseja exibir um dado formatado ao usuário ou obter dados sensíveis à culturas diferentes (como, por exemplo, durante a comparação [...]]]></description>
			<content:encoded><![CDATA[<div id=HOTWordsTxt name=HOTWordsTxt><p><!--[if gte mso 9]><xml> <o:OfficeDocumentSettings> <o:RelyOnVML /> <o:AllowPNG /> </o:OfficeDocumentSettings> </xml><![endif]--><!--[if gte mso 9]><xml> <w:WordDocument> <w:View>Normal</w:View> <w:Zoom>0</w:Zoom> <w:TrackMoves /> <w:TrackFormatting /> <w:HyphenationZone>21</w:HyphenationZone> <w:PunctuationKerning /> <w:ValidateAgainstSchemas /> <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid> <w:IgnoreMixedContent>false</w:IgnoreMixedContent> <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText> <w:DoNotPromoteQF /> <w:LidThemeOther>PT-BR</w:LidThemeOther> <w:LidThemeAsian>X-NONE</w:LidThemeAsian> <w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript> <w:Compatibility> <w:BreakWrappedTables /> <w:SnapToGridInCell /> <w:WrapTextWithPunct /> <w:UseAsianBreakRules /> <w:DontGrowAutofit /> <w:SplitPgBreakAndParaMark /> <w:DontVertAlignCellWithSp /> <w:DontBreakConstrainedForcedTables /> <w:DontVertAlignInTxbx /> <w:Word11KerningPairs /> <w:CachedColBalance /> </w:Compatibility> <m:mathPr> <m:mathFont m:val="Cambria Math" /> <m:brkBin m:val="before" /> <m:brkBinSub m:val="&#45;-" /> <m:smallFrac m:val="off" /> <m:dispDef /> <m:lMargin m:val="0" /> <m:rMargin m:val="0" /> <m:defJc m:val="centerGroup" /> <m:wrapIndent m:val="1440" /> <m:intLim m:val="subSup" /> <m:naryLim m:val="undOvr" /> </m:mathPr></w:WordDocument> </xml><![endif]--><!--[if gte mso 9]><xml> <w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true"   DefSemiHidden="true" DefQFormat="false" DefPriority="99"   LatentStyleCount="267"> <w:LsdException Locked="false" Priority="0" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Normal" /> <w:LsdException Locked="false" Priority="9" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="heading 1" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 2" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 3" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 4" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 5" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 6" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 7" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9" /> <w:LsdException Locked="false" Priority="39" Name="toc 1" /> <w:LsdException Locked="false" Priority="39" Name="toc 2" /> <w:LsdException Locked="false" Priority="39" Name="toc 3" /> <w:LsdException Locked="false" Priority="39" Name="toc 4" /> <w:LsdException Locked="false" Priority="39" Name="toc 5" /> <w:LsdException Locked="false" Priority="39" Name="toc 6" /> <w:LsdException Locked="false" Priority="39" Name="toc 7" /> <w:LsdException Locked="false" Priority="39" Name="toc 8" /> <w:LsdException Locked="false" Priority="39" Name="toc 9" /> <w:LsdException Locked="false" Priority="35" QFormat="true" Name="caption" /> <w:LsdException Locked="false" Priority="10" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Title" /> <w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font" /> <w:LsdException Locked="false" Priority="11" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Subtitle" /> <w:LsdException Locked="false" Priority="22" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Strong" /> <w:LsdException Locked="false" Priority="20" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Emphasis" /> <w:LsdException Locked="false" Priority="59" SemiHidden="false"    UnhideWhenUsed="false" Name="Table Grid" /> <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Placeholder Text" /> <w:LsdException Locked="false" Priority="1" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="No Spacing" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 1" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 1" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 1" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 1" /> <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Revision" /> <w:LsdException Locked="false" Priority="34" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="List Paragraph" /> <w:LsdException Locked="false" Priority="29" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Quote" /> <w:LsdException Locked="false" Priority="30" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Intense Quote" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 1" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 1" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 1" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 1" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 1" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 2" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 2" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 2" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 2" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 2" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 2" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 2" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 2" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 2" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 3" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 3" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 3" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 3" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 3" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 3" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 3" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 3" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 3" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 4" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 4" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 4" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 4" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 4" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 4" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 4" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 4" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 4" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 5" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 5" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 5" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 5" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 5" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 5" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 5" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 5" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 5" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 6" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 6" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 6" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 6" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 6" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 6" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 6" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 6" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 6" /> <w:LsdException Locked="false" Priority="19" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis" /> <w:LsdException Locked="false" Priority="21" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis" /> <w:LsdException Locked="false" Priority="31" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference" /> <w:LsdException Locked="false" Priority="32" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Intense Reference" /> <w:LsdException Locked="false" Priority="33" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Book Title" /> <w:LsdException Locked="false" Priority="37" Name="Bibliography" /> <w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading" /> </w:LatentStyles> </xml><![endif]--><!--[if gte mso 10]><br />
<mce:style><!   /* Style Definitions */  table.MsoNormalTable 	{mso-style-name:"Tabela normal"; 	mso-tstyle-rowband-size:0; 	mso-tstyle-colband-size:0; 	mso-style-noshow:yes; 	mso-style-priority:99; 	mso-style-qformat:yes; 	mso-style-parent:""; 	mso-padding-alt:0cm 5.4pt 0cm 5.4pt; 	mso-para-margin-top:0cm; 	mso-para-margin-right:0cm; 	mso-para-margin-bottom:10.0pt; 	mso-para-margin-left:0cm; 	line-height:115%; 	mso-pagination:widow-orphan; 	font-size:11.0pt; 	font-family:"Calibri","sans-serif"; 	mso-ascii-font-family:Calibri; 	mso-ascii-theme-font:minor-latin; 	mso-fareast-font-family:"Times New Roman"; 	mso-fareast-theme-font:minor-fareast; 	mso-hansi-font-family:Calibri; 	mso-hansi-theme-font:minor-latin;} --></p>
<p><!--[endif]--></p>
<p class="MsoNormal" style="text-align: justify;">Utilize o método <em>Double.ToString(CultureInfo.InvariantCulture)</em> ao invés de simplesmente <em>Double.ToString()</em>.</p>
<p class="MsoNormal" style="text-align: justify;">O método <em>Double.ToString(IFormatProvider)</em> que recebe <em>CultureInfo.InvariantCulture</em> como argumento é otimizado para obter melhor <strong>performance</strong>.</p>
<p class="MsoNormal" style="text-align: justify;">Em geral, quando não se deseja exibir um dado formatado ao usuário ou obter dados sensíveis à culturas diferentes (como, por exemplo, durante a comparação de duas <em>strings</em>), a melhor prática, segundo a Microsoft, é a utilização de <em>Double.ToString(CultureInfo.InvariantCulture)</em>.</p>
<p class="MsoNormal" style="text-align: justify;">Se, porém, sua aplicação irá exibir números ao usuário e é necessária a adequação de tais números à cultura local, você deverá utilizar <em>Double.ToString(IFormatProvider)</em> recebendo <em>CultureInfo.CurrentCulture</em> como argumento ou simplesmente <em>Double.ToString()</em>, pois as duas formas adéquam o resultado à cultura corrente.</p>
<p class="MsoNormal" style="text-align: justify;"><span lang="EN-US">Fonte: MS Help (Performance Tips)</span></p>
</div>]]></content:encoded>
			<wfw:commentRss>http://isbyte.com/index.php/2009/05/performance-em-silverlight-%e2%80%93-dica-rapida-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Performance em Silverlight – Dica Rápida #2</title>
		<link>http://isbyte.com/index.php/2009/04/performance-em-silverlight-%e2%80%93-dica-rapida-2/</link>
		<comments>http://isbyte.com/index.php/2009/04/performance-em-silverlight-%e2%80%93-dica-rapida-2/#comments</comments>
		<pubDate>Mon, 27 Apr 2009 23:20:34 +0000</pubDate>
		<dc:creator>Thiago Marotta</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[.NET Framework]]></category>
		<category><![CDATA[Boas Práticas]]></category>
		<category><![CDATA[Boas Práticas Silverlight]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Custo Computacional]]></category>
		<category><![CDATA[Hit Tester]]></category>
		<category><![CDATA[MS Help]]></category>
		<category><![CDATA[Opacidade]]></category>
		<category><![CDATA[Opacity]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Performance Tips]]></category>
		<category><![CDATA[Silverlight Collapsed]]></category>
		<category><![CDATA[Silverlight Opacidade]]></category>
		<category><![CDATA[Silverlight Opacity]]></category>
		<category><![CDATA[Silverlight Translúcido]]></category>
		<category><![CDATA[Translúcido]]></category>
		<category><![CDATA[Transparência Silverlight]]></category>
		<category><![CDATA[Visibilidade]]></category>
		<category><![CDATA[Visibility]]></category>
		<category><![CDATA[Visibility Collapsed]]></category>

		<guid isPermaLink="false">http://isbyte.com/?p=257</guid>
		<description><![CDATA[<p> </p>
<p></p>
<p class="MsoNormal" style="text-align: justify;">Se você deseja simplesmente exibir ou ocultar um objeto na tela e não precisa deixá-lo parcialmente transparente, utilize a propriedade Visibility ao invés de Opacity.</p>
<p class="MsoNormal" style="text-align: justify;">A propriedade Opacity acarreta em alto custo computacional, pois o objeto continuará sendo tecnicamente “renderizado” e testado pelo Hit Test.</p>
<p class="MsoNormal" style="text-align: justify;">Segundo a [...]]]></description>
			<content:encoded><![CDATA[<div id=HOTWordsTxt name=HOTWordsTxt><p><!--[if gte mso 9]><xml> <o:OfficeDocumentSettings> <o:RelyOnVML /> <o:AllowPNG /> </o:OfficeDocumentSettings> </xml><![endif]--><!--[if gte mso 9]><xml> <w:WordDocument> <w:View>Normal</w:View> <w:Zoom>0</w:Zoom> <w:TrackMoves /> <w:TrackFormatting /> <w:HyphenationZone>21</w:HyphenationZone> <w:PunctuationKerning /> <w:ValidateAgainstSchemas /> <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid> <w:IgnoreMixedContent>false</w:IgnoreMixedContent> <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText> <w:DoNotPromoteQF /> <w:LidThemeOther>PT-BR</w:LidThemeOther> <w:LidThemeAsian>X-NONE</w:LidThemeAsian> <w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript> <w:Compatibility> <w:BreakWrappedTables /> <w:SnapToGridInCell /> <w:WrapTextWithPunct /> <w:UseAsianBreakRules /> <w:DontGrowAutofit /> <w:SplitPgBreakAndParaMark /> <w:DontVertAlignCellWithSp /> <w:DontBreakConstrainedForcedTables /> <w:DontVertAlignInTxbx /> <w:Word11KerningPairs /> <w:CachedColBalance /> </w:Compatibility> <m:mathPr> <m:mathFont m:val="Cambria Math" /> <m:brkBin m:val="before" /> <m:brkBinSub m:val="&#45;-" /> <m:smallFrac m:val="off" /> <m:dispDef /> <m:lMargin m:val="0" /> <m:rMargin m:val="0" /> <m:defJc m:val="centerGroup" /> <m:wrapIndent m:val="1440" /> <m:intLim m:val="subSup" /> <m:naryLim m:val="undOvr" /> </m:mathPr></w:WordDocument> </xml><![endif]--><!--[if gte mso 9]><xml> <w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true"   DefSemiHidden="true" DefQFormat="false" DefPriority="99"   LatentStyleCount="267"> <w:LsdException Locked="false" Priority="0" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Normal" /> <w:LsdException Locked="false" Priority="9" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="heading 1" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 2" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 3" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 4" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 5" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 6" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 7" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9" /> <w:LsdException Locked="false" Priority="39" Name="toc 1" /> <w:LsdException Locked="false" Priority="39" Name="toc 2" /> <w:LsdException Locked="false" Priority="39" Name="toc 3" /> <w:LsdException Locked="false" Priority="39" Name="toc 4" /> <w:LsdException Locked="false" Priority="39" Name="toc 5" /> <w:LsdException Locked="false" Priority="39" Name="toc 6" /> <w:LsdException Locked="false" Priority="39" Name="toc 7" /> <w:LsdException Locked="false" Priority="39" Name="toc 8" /> <w:LsdException Locked="false" Priority="39" Name="toc 9" /> <w:LsdException Locked="false" Priority="35" QFormat="true" Name="caption" /> <w:LsdException Locked="false" Priority="10" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Title" /> <w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font" /> <w:LsdException Locked="false" Priority="11" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Subtitle" /> <w:LsdException Locked="false" Priority="22" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Strong" /> <w:LsdException Locked="false" Priority="20" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Emphasis" /> <w:LsdException Locked="false" Priority="59" SemiHidden="false"    UnhideWhenUsed="false" Name="Table Grid" /> <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Placeholder Text" /> <w:LsdException Locked="false" Priority="1" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="No Spacing" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 1" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 1" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 1" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 1" /> <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Revision" /> <w:LsdException Locked="false" Priority="34" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="List Paragraph" /> <w:LsdException Locked="false" Priority="29" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Quote" /> <w:LsdException Locked="false" Priority="30" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Intense Quote" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 1" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 1" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 1" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 1" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 1" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 2" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 2" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 2" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 2" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 2" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 2" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 2" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 2" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 2" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 3" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 3" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 3" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 3" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 3" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 3" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 3" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 3" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 3" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 4" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 4" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 4" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 4" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 4" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 4" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 4" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 4" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 4" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 5" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 5" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 5" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 5" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 5" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 5" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 5" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 5" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 5" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 6" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 6" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 6" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 6" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 6" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 6" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 6" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 6" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 6" /> <w:LsdException Locked="false" Priority="19" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis" /> <w:LsdException Locked="false" Priority="21" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis" /> <w:LsdException Locked="false" Priority="31" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference" /> <w:LsdException Locked="false" Priority="32" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Intense Reference" /> <w:LsdException Locked="false" Priority="33" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Book Title" /> <w:LsdException Locked="false" Priority="37" Name="Bibliography" /> <w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading" /> </w:LatentStyles> </xml><![endif]--> <!--[if gte mso 10]><br />
<mce:style><!   /* Style Definitions */  table.MsoNormalTable 	{mso-style-name:"Tabela normal"; 	mso-tstyle-rowband-size:0; 	mso-tstyle-colband-size:0; 	mso-style-noshow:yes; 	mso-style-priority:99; 	mso-style-qformat:yes; 	mso-style-parent:""; 	mso-padding-alt:0cm 5.4pt 0cm 5.4pt; 	mso-para-margin-top:0cm; 	mso-para-margin-right:0cm; 	mso-para-margin-bottom:10.0pt; 	mso-para-margin-left:0cm; 	line-height:115%; 	mso-pagination:widow-orphan; 	font-size:11.0pt; 	font-family:"Calibri","sans-serif"; 	mso-ascii-font-family:Calibri; 	mso-ascii-theme-font:minor-latin; 	mso-fareast-font-family:"Times New Roman"; 	mso-fareast-theme-font:minor-fareast; 	mso-hansi-font-family:Calibri; 	mso-hansi-theme-font:minor-latin;} --></p>
<p><!--[endif]--></p>
<p class="MsoNormal" style="text-align: justify;">Se você deseja simplesmente exibir ou ocultar um objeto na tela e não precisa deixá-lo parcialmente transparente, utilize a propriedade <em>Visibility</em> ao invés de <em>Opacity</em>.</p>
<p class="MsoNormal" style="text-align: justify;">A propriedade <em>Opacity</em> acarreta em alto custo computacional, pois o objeto continuará sendo tecnicamente “renderizado” e testado pelo <em>Hit Test</em>.</p>
<p class="MsoNormal" style="text-align: justify;">Segundo a Microsoft, modificar a propriedade <em>Visibility</em> para <em>Collapsed</em> é a prática mais recomendável para evitar estes custos caso seu interesse não seja tornar o objeto translúcido, mas escondê-lo na tela.</p>
<p class="MsoNormal" style="text-align: justify;"><span lang="EN-US">Fonte: MS Help (Performance Tips)</span></p>
</div>]]></content:encoded>
			<wfw:commentRss>http://isbyte.com/index.php/2009/04/performance-em-silverlight-%e2%80%93-dica-rapida-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Performance em Silverlight – Dica Rápida #1</title>
		<link>http://isbyte.com/index.php/2009/04/performance-em-silverlight-%e2%80%93-dica-rapida-1/</link>
		<comments>http://isbyte.com/index.php/2009/04/performance-em-silverlight-%e2%80%93-dica-rapida-1/#comments</comments>
		<pubDate>Sat, 25 Apr 2009 22:14:43 +0000</pubDate>
		<dc:creator>Thiago Marotta</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[Font Size]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[MS Help]]></category>
		<category><![CDATA[Opacidade]]></category>
		<category><![CDATA[Opacidade Silverlight]]></category>
		<category><![CDATA[Opacity]]></category>
		<category><![CDATA[Opacity Silverlight]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Performance Tips]]></category>
		<category><![CDATA[Silverlight Performance]]></category>
		<category><![CDATA[Tamanho da Fonte]]></category>
		<category><![CDATA[Text Silverlight]]></category>
		<category><![CDATA[Texto Silverlight]]></category>
		<category><![CDATA[Transparência]]></category>
		<category><![CDATA[Transparência Silverlight]]></category>
		<category><![CDATA[Transparent]]></category>
		<category><![CDATA[Transparent Silverlight]]></category>

		<guid isPermaLink="false">http://isbyte.com/?p=253</guid>
		<description><![CDATA[<p class="MsoNormal" style="text-align: justify;">Desenvolver animações que envolvem aumentar ou diminuir o tamanho de um texto pode consumir muitos recursos do sistema. Isso acontece porque o Silverlight arredonda os cantos de todo objeto texto.</p>
<p class="MsoNormal" style="text-align: justify;">Se você animar o tamanho de um texto (utilizando o objeto Transform ou a propriedade FontSize), o Silverlight irá arrendondar [...]]]></description>
			<content:encoded><![CDATA[<div id=HOTWordsTxt name=HOTWordsTxt><p class="MsoNormal" style="text-align: justify;"><!--[if gte mso 9]><xml> <o:OfficeDocumentSettings> <o:RelyOnVML /> <o:AllowPNG /> </o:OfficeDocumentSettings> </xml><![endif]--><!--[if gte mso 9]><xml> <w:WordDocument> <w:View>Normal</w:View> <w:Zoom>0</w:Zoom> <w:TrackMoves /> <w:TrackFormatting /> <w:HyphenationZone>21</w:HyphenationZone> <w:PunctuationKerning /> <w:ValidateAgainstSchemas /> <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid> <w:IgnoreMixedContent>false</w:IgnoreMixedContent> <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText> <w:DoNotPromoteQF /> <w:LidThemeOther>PT-BR</w:LidThemeOther> <w:LidThemeAsian>X-NONE</w:LidThemeAsian> <w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript> <w:Compatibility> <w:BreakWrappedTables /> <w:SnapToGridInCell /> <w:WrapTextWithPunct /> <w:UseAsianBreakRules /> <w:DontGrowAutofit /> <w:SplitPgBreakAndParaMark /> <w:DontVertAlignCellWithSp /> <w:DontBreakConstrainedForcedTables /> <w:DontVertAlignInTxbx /> <w:Word11KerningPairs /> <w:CachedColBalance /> </w:Compatibility> <m:mathPr> <m:mathFont m:val="Cambria Math" /> <m:brkBin m:val="before" /> <m:brkBinSub m:val="&#45;-" /> <m:smallFrac m:val="off" /> <m:dispDef /> <m:lMargin m:val="0" /> <m:rMargin m:val="0" /> <m:defJc m:val="centerGroup" /> <m:wrapIndent m:val="1440" /> <m:intLim m:val="subSup" /> <m:naryLim m:val="undOvr" /> </m:mathPr></w:WordDocument> </xml><![endif]--><!--[if gte mso 9]><xml> <w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true"   DefSemiHidden="true" DefQFormat="false" DefPriority="99"   LatentStyleCount="267"> <w:LsdException Locked="false" Priority="0" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Normal" /> <w:LsdException Locked="false" Priority="9" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="heading 1" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 2" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 3" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 4" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 5" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 6" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 7" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8" /> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9" /> <w:LsdException Locked="false" Priority="39" Name="toc 1" /> <w:LsdException Locked="false" Priority="39" Name="toc 2" /> <w:LsdException Locked="false" Priority="39" Name="toc 3" /> <w:LsdException Locked="false" Priority="39" Name="toc 4" /> <w:LsdException Locked="false" Priority="39" Name="toc 5" /> <w:LsdException Locked="false" Priority="39" Name="toc 6" /> <w:LsdException Locked="false" Priority="39" Name="toc 7" /> <w:LsdException Locked="false" Priority="39" Name="toc 8" /> <w:LsdException Locked="false" Priority="39" Name="toc 9" /> <w:LsdException Locked="false" Priority="35" QFormat="true" Name="caption" /> <w:LsdException Locked="false" Priority="10" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Title" /> <w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font" /> <w:LsdException Locked="false" Priority="11" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Subtitle" /> <w:LsdException Locked="false" Priority="22" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Strong" /> <w:LsdException Locked="false" Priority="20" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Emphasis" /> <w:LsdException Locked="false" Priority="59" SemiHidden="false"    UnhideWhenUsed="false" Name="Table Grid" /> <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Placeholder Text" /> <w:LsdException Locked="false" Priority="1" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="No Spacing" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 1" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 1" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 1" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 1" /> <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Revision" /> <w:LsdException Locked="false" Priority="34" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="List Paragraph" /> <w:LsdException Locked="false" Priority="29" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Quote" /> <w:LsdException Locked="false" Priority="30" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Intense Quote" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 1" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 1" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 1" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 1" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 1" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 2" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 2" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 2" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 2" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 2" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 2" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 2" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 2" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 2" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 3" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 3" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 3" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 3" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 3" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 3" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 3" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 3" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 3" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 4" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 4" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 4" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 4" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 4" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 4" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 4" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 4" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 4" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 5" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 5" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 5" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 5" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 5" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 5" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 5" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 5" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 5" /> <w:LsdException Locked="false" Priority="60" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Shading Accent 6" /> <w:LsdException Locked="false" Priority="61" SemiHidden="false"    UnhideWhenUsed="false" Name="Light List Accent 6" /> <w:LsdException Locked="false" Priority="62" SemiHidden="false"    UnhideWhenUsed="false" Name="Light Grid Accent 6" /> <w:LsdException Locked="false" Priority="63" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6" /> <w:LsdException Locked="false" Priority="64" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6" /> <w:LsdException Locked="false" Priority="65" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 1 Accent 6" /> <w:LsdException Locked="false" Priority="66" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium List 2 Accent 6" /> <w:LsdException Locked="false" Priority="67" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6" /> <w:LsdException Locked="false" Priority="68" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6" /> <w:LsdException Locked="false" Priority="69" SemiHidden="false"    UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6" /> <w:LsdException Locked="false" Priority="70" SemiHidden="false"    UnhideWhenUsed="false" Name="Dark List Accent 6" /> <w:LsdException Locked="false" Priority="71" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Shading Accent 6" /> <w:LsdException Locked="false" Priority="72" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful List Accent 6" /> <w:LsdException Locked="false" Priority="73" SemiHidden="false"    UnhideWhenUsed="false" Name="Colorful Grid Accent 6" /> <w:LsdException Locked="false" Priority="19" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis" /> <w:LsdException Locked="false" Priority="21" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis" /> <w:LsdException Locked="false" Priority="31" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference" /> <w:LsdException Locked="false" Priority="32" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Intense Reference" /> <w:LsdException Locked="false" Priority="33" SemiHidden="false"    UnhideWhenUsed="false" QFormat="true" Name="Book Title" /> <w:LsdException Locked="false" Priority="37" Name="Bibliography" /> <w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading" /> </w:LatentStyles> </xml><![endif]-->Desenvolver animações que envolvem aumentar ou diminuir o tamanho de um texto pode consumir muitos recursos do sistema. Isso acontece porque o <em>Silverlight</em> arredonda os cantos de todo objeto texto.</p>
<p class="MsoNormal" style="text-align: justify;">Se você animar o tamanho de um texto (utilizando o objeto <em>Transform</em> ou a propriedade <em>FontSize</em>), o <em>Silverlight</em> irá arrendondar os cantos do texto à cada <em>frame</em>, o que possui um alto custo computacional e pode resultar em erros durante a exibição dos frames.</p>
<p class="MsoNormal" style="text-align: justify;">Se a sua aplicação requer a alteração dinâmica de uma grande quantidade de texto, a <em>Microsoft</em> sugere a utilização de uma imagem vetorial que represente o texto a ser modificado.</p>
<p class="MsoNormal" style="text-align: justify;"><span lang="EN-US">Fonte: MS Help (Performance Tips)</span></p>
</div>]]></content:encoded>
			<wfw:commentRss>http://isbyte.com/index.php/2009/04/performance-em-silverlight-%e2%80%93-dica-rapida-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Compartilhar pasta na rede com C#</title>
		<link>http://isbyte.com/index.php/2009/02/compartilhar-pasta-na-rede-com-c/</link>
		<comments>http://isbyte.com/index.php/2009/02/compartilhar-pasta-na-rede-com-c/#comments</comments>
		<pubDate>Sat, 07 Feb 2009 22:08:09 +0000</pubDate>
		<dc:creator>Thiago Marotta</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[.NET Framework]]></category>
		<category><![CDATA[ArgumentNullException]]></category>
		<category><![CDATA[Compartilhamento do Windows]]></category>
		<category><![CDATA[Compartilhar Impressora]]></category>
		<category><![CDATA[Compartilhar Pasta]]></category>
		<category><![CDATA[Create Share]]></category>
		<category><![CDATA[Fila de Impressão]]></category>
		<category><![CDATA[IPC]]></category>
		<category><![CDATA[ManagementBaseObject]]></category>
		<category><![CDATA[ManagementClass]]></category>
		<category><![CDATA[ManagementObject]]></category>
		<category><![CDATA[ManagementObjectSearch]]></category>
		<category><![CDATA[Network Share]]></category>
		<category><![CDATA[Print Queue]]></category>
		<category><![CDATA[Print Share]]></category>
		<category><![CDATA[Recursos do Windows]]></category>
		<category><![CDATA[Rede Microsoft]]></category>
		<category><![CDATA[Share Folder]]></category>
		<category><![CDATA[Share Folder C#]]></category>
		<category><![CDATA[Share Resource]]></category>
		<category><![CDATA[System.Management]]></category>
		<category><![CDATA[UInt Enum]]></category>
		<category><![CDATA[Win32_Share]]></category>
		<category><![CDATA[Windows Management Instrumentation]]></category>
		<category><![CDATA[Windows Resources]]></category>
		<category><![CDATA[Windows Share]]></category>
		<category><![CDATA[WMI]]></category>

		<guid isPermaLink="false">http://isbyte.com/?p=226</guid>
		<description><![CDATA[<p>O Microsoft .NET Framework, embora seja bem amplo, ainda não possui APIs que permitem criar compartilhamentos de pastas e arquivos no Windows. Todavia, é possível criar um novo compartilhamento (e várias outras tarefas específicas do Sistema Operacional) através de chamadas a objetos WMI (Windows Management Instrumentation).</p>
<p class="MsoNormal" style="text-align: justify;">Para este artigo, preparei uma função que [...]]]></description>
			<content:encoded><![CDATA[<div id=HOTWordsTxt name=HOTWordsTxt><p>O <em>Microsoft .NET Framework</em>, embora seja bem amplo, ainda não possui <em>APIs</em> que permitem criar compartilhamentos de pastas e arquivos no Windows. Todavia, é possível criar um novo compartilhamento (e várias outras tarefas específicas do Sistema Operacional) através de chamadas a objetos <em>WMI</em> (<em>Windows Management Instrumentation</em>).</p>
<p class="MsoNormal" style="text-align: justify;">Para este artigo, preparei uma função que compartilha um diretório específico em uma rede Microsoft. Embora seja possível definir várias propriedades avançadas do compartilhamento, decidi omitir as configurações de segurança (direitos de acesso) para tornar o código mais simples e compreensível a qualquer um, portanto, se você tiver interesse em criar compartilhamentos com direitos de acesso que não sejam somente-leitura, deixe uma mensagem aqui no <em>blog</em> ou leia a <a href="http://msdn.microsoft.com/en-us/library/aa389393(VS.85).aspx">documentação</a> da classe <em>WMI</em> que vamos utilizar (<em>Win32_Share</em>).</p>
<p class="MsoNormal" style="text-align: justify;">Então vamos ao que interessa. Primeiramente, adicione ao seu projeto uma referência à <em>namespace</em> <a href="http://msdn.microsoft.com/en-us/library/system.management.aspx">System.Management</a>, clicando com o botão direito em “<em>References</em>” e, em seguida, em “<em>Add Reference&#8230;</em>”. Selecione “<em>System.Management</em>” na janela que abrir e clique no botão “<em>OK</em>”.</p>
<p class="MsoNormal" style="text-align: justify;">Primeiramente é aconselhável que criemos dois <em><a href="http://msdn.microsoft.com/en-us/library/system.enum.aspx">Enums</a></em> com alguns valores pré-definidos, para que não fiquemos interagindo com nossa função através de números hexadecimais.</p>
<p>
<pre class="brush: csharp">
        /// <summary>
        /// Types of resource that will be shared.
        /// </summary>
        protected enum ShareType : uint
        {
            DiskDrive = 0x0,
            PrintQueue = 0x1,
            Device = 0x2,
            IPC = 0x3,
            DiskDriveAdmin = 0x80000000,
            PrintQueueAdmin = 0x80000001,
            DeviceAdmin = 0x80000002,
            IPCAdmin = 0x80000003
        }
        /// <summary>
        /// Result types of creation of the share.
        /// </summary>
        protected enum ShareResult : uint
        {
            Success = 0,
            AccessDenied = 2,
            UnknownFailure = 8,
            InvalidName = 9,
            InvalidLevel = 10,
            InvalidParameter = 21,
            DuplicateShare = 22,
            RedirectedPath = 23,
            UnknownDeviceOrDirectory = 24,
            NetNameNotFound = 25
        }
</pre>
</p>
<p class="MsoNormal" style="text-align: justify;">Notem que as duas <em>Enums</em> acima não são <em>Enums</em> de números inteiros simples, mas de inteiros “sem sinal”, ou seja, “<em>uint</em>”. Isso porque os valores pré-definidos são grandes demais para serem armazenados em variáveis do tipo inteiro (padrão das <em>Enums</em>) e serão sempre positivas, por isso fez-se necessário herdar, para cada <em>Enum</em>, o tipo “<em>uint</em>”.</p>
<p class="MsoNormal" style="text-align: justify;">E, finalmente, a nossa função que instancia a classe “<em>Win32_Share</em>” do <em>WMI</em> e faz a chamada ao método “<em>Create</em>”, para criar o compartilhamento do recurso:</p>
<p>
<pre class="brush: csharp">
/// <!-- Thiago Marotta Couto -->
/// <!-- February, 07 - 2009 -->
/// <!-- http://isbyte.com -->
protected static ShareResult ShareFolder(string path, string shareName, ShareType type, uint? maximumAllowed, string description, string password)
        {
            System.Management.ManagementClass wmiWin32_Share;
            System.Management.ManagementBaseObject inputParameters;
            System.Management.ManagementBaseObject outputParameters;

            //Verifies if the received arguments are correct.
            if ((path == null) || (path == string.Empty))
                throw new ArgumentNullException("The path argument can not be null or empty.");
            if ((shareName == null) || (shareName == string.Empty))
                throw new ArgumentNullException("The shareName argument can not be null or empty.");
            try
            {
                //Instantiate the "Win32_Share" WMI class.
                wmiWin32_Share = new System.Management.ManagementClass(@"Win32_Share");

                //Recover the parameters of "Create" method.
                inputParameters = wmiWin32_Share.GetMethodParameters(@"Create");

                //Defines mandatory parameters.
                inputParameters.SetPropertyValue(@"Path", path);
                inputParameters.SetPropertyValue(@"Name", shareName);
                inputParameters.SetPropertyValue(@"Type", Convert.ToUInt32(type));

                //Defines optional parameters if received.
                if (maximumAllowed != null) inputParameters.SetPropertyValue(@"MaximumAllowed", maximumAllowed);
                if (description != null) inputParameters.SetPropertyValue(@"Description", description);
                if (password != null) inputParameters.SetPropertyValue(@"Password", password);

                //Invokes the "Create" method.
                outputParameters = wmiWin32_Share.InvokeMethod(@"Create", inputParameters, null);

                //Returns the result of "Create" method.
                return (ShareResult)outputParameters.GetPropertyValue(@"ReturnValue");
            }
            catch
            {
                //An unknown error occurred.
                return ShareResult.UnknownFailure;
            }
        }
</pre>
</p>
<p class="MsoNormal" style="text-align: justify;">É importante notar que somente administradores do sistema ou usuários com credenciais Communication, Print ou Server têm permissão para executar o método “<em>Create</em>” da classe “<em>Win32_Share”</em> e, conseqüentemente, nossa função. Operadores de impressão somente poderão adicionar filas de impressão, assim como operadores de comunicação somente poderão adicionar filas de comunicação. Para testar o funcionamento destas permissões, execute a função recém criada com o <em>Visual Studio</em> sem elevação de permissão e, em seguida, em modo administrador.</p>
<p class="MsoNormal" style="text-align: justify;">Para executar a função, utilize a seguinte sintaxe:</p>
<p>
<pre class="brush: csharp;">
            ShareResult result;

            //Try to share MyPictures user folder.
            result = ShareFolder(Environment.GetFolderPath(Environment.SpecialFolder.MyPictures),
                "MyPictures Folder", ShareType.DiskDrive, null, "My personal photos.", null);

            MessageBox.Show("The result of ShareFolder method: " + result.ToString());
</pre>
</p>
<p>As classes <em>WMI </em>permitem que você execute tarefas bem interessantes, além de recuperar informações e características do computador que talvez sejam possíveis somente através delas. Não deixe de conferir a documentação completa com todas as classes, propriedades e métodos <a href="http://msdn.microsoft.com/en-us/library/aa394084(VS.85).aspx">aqui</a> no site do <em>MSDN</em>.</p>
<p>Qualquer dúvida utilize o espaço para comentários do <em>blog</em>. Boa diversão ;)</p>
</div>]]></content:encoded>
			<wfw:commentRss>http://isbyte.com/index.php/2009/02/compartilhar-pasta-na-rede-com-c/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Utilizando CACHE do ASP.NET com MS ACCESS, em C#</title>
		<link>http://isbyte.com/index.php/2008/12/utilizando-cache-do-aspnet-com-ms-access-em-c/</link>
		<comments>http://isbyte.com/index.php/2008/12/utilizando-cache-do-aspnet-com-ms-access-em-c/#comments</comments>
		<pubDate>Wed, 24 Dec 2008 16:00:31 +0000</pubDate>
		<dc:creator>Thiago Marotta</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Banco de Dados]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[MS Access]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[Access]]></category>
		<category><![CDATA[ADO.NET e Access]]></category>
		<category><![CDATA[ASP.NET e Access]]></category>
		<category><![CDATA[Banco de Dados no ASP.NET]]></category>
		<category><![CDATA[Cache]]></category>
		<category><![CDATA[Cache.Add]]></category>
		<category><![CDATA[Cache.Get]]></category>
		<category><![CDATA[Cache.Insert]]></category>
		<category><![CDATA[System.Web.Caching]]></category>
		<category><![CDATA[System.Web.Caching.Cache]]></category>
		<category><![CDATA[System.Web.Caching.CacheDependency]]></category>

		<guid isPermaLink="false">http://isbyte.com/?p=207</guid>
		<description><![CDATA[<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal; text-align: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto;">Desempenho de software é um assunto que sempre desperta o meu interesse, e foi graças a isso que acabei descobrindo um dos recursos mais fantásticos disponíveis no ASP.NET, o Cache.</p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal; text-align: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: [...]]]></description>
			<content:encoded><![CDATA[<div id=HOTWordsTxt name=HOTWordsTxt><p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal; text-align: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto;"><span style="font-size: 12pt; mso-fareast-font-family: 'Times New Roman'; mso-fareast-language: PT-BR; mso-bidi-font-family: 'Times New Roman';"><span style="font-family: Calibri;">Desempenho de <em>software</em> é um assunto que sempre desperta o meu interesse, e foi graças a isso que acabei descobrindo um dos recursos mais fantásticos disponíveis no <em>ASP.NET</em>, o <em><a href="http://msdn.microsoft.com/en-us/library/system.web.caching.cache.aspx"><span style="color: blue;">Cache</span></a></em>.</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal; text-align: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto;"><span style="font-size: 12pt; mso-fareast-font-family: 'Times New Roman'; mso-fareast-language: PT-BR; mso-bidi-font-family: 'Times New Roman';"><span style="font-family: Calibri;">Todo desenvolvedor de <em>software</em> sabe que uma das partes mais lentas de uma aplicação é o acesso ao disco rígido, isso porque ainda trabalhamos com um modelo de disco rígido baseado em cabeça mecânica de leitura de dados e outras características que não vem ao caso. O problema é que muitas operações costumeiras durante o desenvolvimento de um <em>software</em> estão diretamente ligadas ao acesso a disco, como leitura e gravação de arquivos, acesso a banco de dados, etc. E foi graças a esse tipo de “gargalo” da computação que um ser iluminado do passado pensou em um recurso que ficou conhecido como <em>Cache</em>. Três vivas para o inventor do <em>Cache</em>: IoI IoI IoI.</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal; text-align: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto;"><span style="font-size: 12pt; mso-fareast-font-family: 'Times New Roman'; mso-fareast-language: PT-BR; mso-bidi-font-family: 'Times New Roman';"><span style="font-family: Calibri;">A palavra <em>Cache</em>, na computação, diz respeito a uma quantidade de memória utilizada para armazenar dados temporariamente, de modo a fornecê-los rapidamente quando solicitados pelo processador sem a necessidade de acessar sua origem (muitas vezes localizada no disco rígido, que é cerca de dez vezes mais lento que a memória principal).</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal; text-align: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto;"><span style="font-size: 12pt; mso-fareast-font-family: 'Times New Roman'; mso-fareast-language: PT-BR; mso-bidi-font-family: 'Times New Roman';"><span style="font-family: Calibri;">O <em>Cache </em>do <em>ASP.NET</em> não é diferente, é um recurso que tem como função armazenar objetos na memória principal do computador. Adicionalmente, o <em>Cache</em> permite a adição de dependências ao objeto guardado, de forma que se a dependência sofrer alguma alteração, o objeto contido no <em>Cache</em> é automaticamente destruído para que não se torne inconsistente.</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal; text-align: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto;"><span style="font-size: 12pt; mso-fareast-font-family: 'Times New Roman'; mso-fareast-language: PT-BR; mso-bidi-font-family: 'Times New Roman';"><span style="font-family: Calibri;">Com ele, podemos criar aplicações mais rápidas, principalmente se tais aplicações necessitam de muitos acessos a um banco de dados, por exemplo.</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal; text-align: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto;"><span style="font-size: 12pt; mso-fareast-font-family: 'Times New Roman'; mso-fareast-language: PT-BR; mso-bidi-font-family: 'Times New Roman';"><span style="font-family: Calibri;">Para explicar como funciona tudo isso, vou mostrar como desenvolver uma aplicação que carrega um banco de dados MS Access na memória principal do computador, de modo que não seja necessário acessar o disco rígido para ler as informações contidas nele caso já tenha sido carregado para o <em>Cache</em>. Adicionalmente esta aplicação deve manter a consistência dos dados, ou seja, se o banco de dados for atualizado pela própria aplicação ou por terceiros, o sistema deverá reconhecer automaticamente e atualizar também o <em>Cache</em>.</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal; text-align: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto;"><span style="font-size: 12pt; mso-fareast-font-family: 'Times New Roman'; mso-fareast-language: PT-BR; mso-bidi-font-family: 'Times New Roman';"><span style="font-family: Calibri;">Para esta aplicação utilizei um banco de dados bem simples, criado no MS Access 2007, que consiste em uma única tabela onde será gravado o primeiro e o último nome de algumas pessoas.</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal; text-align: center; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto;" align="center"> <img class="aligncenter size-full wp-image-208" title="accessusertable" src="http://isbyte.com/wp-content/uploads/2008/12/accessusertable.jpg" alt="accessusertable" width="402" height="120" /></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal; text-align: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto;"><span style="font-size: 12pt; mso-fareast-font-family: 'Times New Roman'; mso-fareast-language: PT-BR; mso-bidi-font-family: 'Times New Roman';"><span style="font-family: Calibri;">Obs.: Nomeie o banco de dados como “<em>database.accdb</em>” e adicione-o à pasta “<em>App_Data”</em> do seu projeto, no <em>Visual Studio</em>, pois o código fonte foi desenvolvido partindo do princípio que o nosso banco está localizado lá dentro.</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal; text-align: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto;"><span style="font-size: 12pt; mso-fareast-font-family: 'Times New Roman'; mso-fareast-language: PT-BR; mso-bidi-font-family: 'Times New Roman';"><span style="font-family: Calibri;">Primeiramente, vamos criar um método que acessa o banco de dados MS Access 2007 e retorna um <em><a href="http://msdn.microsoft.com/en-us/library/system.data.dataset.aspx"><span style="color: blue;">DataSet</span></a></em> já carregado com as informações que desejamos:</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal; text-align: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto;"><span style="font-size: 12pt; mso-fareast-font-family: 'Times New Roman'; mso-fareast-language: PT-BR; mso-bidi-font-family: 'Times New Roman';"><span style="font-family: Calibri;"></p>
<p>
<pre class="brush: csharp;">
        private System.Data.DataSet GetData(string accessFileName, string query)
        {
            System.Text.StringBuilder connectionString;
            System.Data.DataSet dataSet;

            //Initializes System.Text.StringBuilder.
            connectionString = new System.Text.StringBuilder();

            //Creates connection string based on file name.
            connectionString.AppendFormat(@"Provider=Microsoft.ACE.OLEDB.12.0;");
            connectionString.AppendFormat(@"Data Source= {0};", accessFileName);

            using (System.Data.OleDb.OleDbConnection connection = new System.Data.OleDb.OleDbConnection(connectionString.ToString()))
            {
                //Creates System.Data.OleDb.OleDbCommand.
                System.Data.OleDb.OleDbCommand command = new System.Data.OleDb.OleDbCommand(query, connection);

                //Creates System.Data.OleDb.OleDbDataAdapter.
                System.Data.OleDb.OleDbDataAdapter adapter = new System.Data.OleDb.OleDbDataAdapter(command);

                //Initializes DataSet.
                dataSet = new System.Data.DataSet();

                //Fills DataSet.
                adapter.Fill(dataSet);
            }

            //Returns data.
            return dataSet;
        }
</pre>
</p>
<p></span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal; text-align: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto;"><span style="font-size: 12pt; mso-fareast-font-family: 'Times New Roman'; mso-fareast-language: PT-BR; mso-bidi-font-family: 'Times New Roman';"></span><span style="font-size: 12pt; mso-fareast-font-family: 'Times New Roman'; mso-fareast-language: PT-BR; mso-bidi-font-family: 'Times New Roman';"><span style="font-family: Calibri;">Agora vem a mágica: Um método que recebe e adiciona à memória principal o objeto que será armazenado em <em>Cache</em>, uma chave identificadora e o arquivo físico ao qual o objeto está ligado em uma relação de dependência:</span></span></p>
<p>
<pre class="brush: csharp">
        private void SetCache(string cacheKey, object item, string fileNameDependency)
        {
            System.Web.Caching.CacheDependency dependency;

            //Creates dependency based on received file name.
            dependency = new System.Web.Caching.CacheDependency(fileNameDependency);

            //Stores data in the ASP.NET Cache.
            Cache.Insert(cacheKey, item, dependency);
        }
</pre>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal; text-align: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto;"><span style="font-size: 12pt; mso-fareast-font-family: 'Times New Roman'; mso-fareast-language: PT-BR; mso-bidi-font-family: 'Times New Roman';"><span style="font-family: Calibri;">E finalmente, vamos interligar tudo no manipulador do evento <em>Page_Load</em> da nossa aplicação Web:</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal; text-align: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto;"><span style="font-size: 12pt; mso-fareast-font-family: 'Times New Roman'; mso-fareast-language: PT-BR; mso-bidi-font-family: 'Times New Roman';"><span style="font-family: Calibri;"></p>
<p>
<pre class="brush: csharp">
        protected void Page_Load(object sender, EventArgs e)
        {
            const string cFileName = @"~/App_Data/database.accdb";
            const string cQuery = @"SELECT [ID], [UserName], [LastName] FROM [User]";
            const string cCacheKey = @"User";
            System.Data.DataSet dsUser;

            //Gets data from the ASP.NET Cache.
            dsUser = (System.Data.DataSet)Cache.Get(cCacheKey);

            //If data are not present...
            if (dsUser == null)
            {
                //Gets data from database.
                dsUser = this.GetData(Server.MapPath(cFileName), cQuery);

                //Saves data in the ASP.NET Cache.
                this.SetCache(cCacheKey, dsUser, Server.MapPath(cFileName));
            }

            //Shows data.
            GridView1.DataSource = dsUser;
            GridView1.DataBind();
        }
</pre>
</p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal; text-align: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto;"><span style="font-size: 12pt; mso-fareast-font-family: 'Times New Roman'; mso-fareast-language: PT-BR; mso-bidi-font-family: 'Times New Roman';"><span style="font-family: Calibri;">Reparem que para simplificar a aplicação, foram criadas três constantes, sendo a primeira o caminho do arquivo de banco de dados, a segunda a <em>query</em> que será executada e a terceira uma chave única para identificar o nosso objeto no <em>Cache</em> do <em>ASP.NET</em>.</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal; text-align: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto;"><span style="font-size: 12pt; mso-fareast-font-family: 'Times New Roman'; mso-fareast-language: PT-BR; mso-bidi-font-family: 'Times New Roman';"><span style="font-family: Calibri;">Para visualizar o resultado na tela, também foi adicionado um <em>GridView</em> à página, com o ID “<em>GridView1</em>”, onde serão exibidas as informações do banco.</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal; text-align: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto;"><span style="font-size: 12pt; mso-fareast-font-family: 'Times New Roman'; mso-fareast-language: PT-BR; mso-bidi-font-family: 'Times New Roman';"><span style="font-family: Calibri;">Se preferir, </span><a href="http://isbyte.com/wp-content/uploads/2008/12/cacheaccess.rar"><span style="color: blue;"><span style="font-family: Calibri;">clique aqui</span></span></a><span style="font-family: Calibri;"> para baixar a solução completa (código fonte e banco de dados).</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal; text-align: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto;"><span style="font-size: 12pt; mso-fareast-font-family: 'Times New Roman'; mso-fareast-language: PT-BR; mso-bidi-font-family: 'Times New Roman';"><span style="font-family: Calibri;">Para testar o funcionamento, insira um <em>breakpoint</em> no início do método <em>Page_Load</em> e rode a aplicação. Executando linha a linha, repare que inicialmente o nosso objeto ainda não existe no <em>Cache</em> e, por isso, retornará um <em>DataSet</em> nulo. Desta forma, a aplicação terá que acessar o banco de dados e trazer, pela primeira vez, as informações para o <em>Cache</em>.</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal; text-align: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto;"><span style="font-size: 12pt; mso-fareast-font-family: 'Times New Roman'; mso-fareast-language: PT-BR; mso-bidi-font-family: 'Times New Roman';"><span style="font-family: Calibri;">Depois da primeira execução, dê um <em>reload</em> no navegador e o método <em>Page_Load</em> será executado novamente. Desta vez, o objeto estará presente no <em>Cache</em> e não será necessário acessar o banco de dados para exibir as informações na tela.</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal; text-align: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto;"><span style="font-size: 12pt; mso-fareast-font-family: 'Times New Roman'; mso-fareast-language: PT-BR; mso-bidi-font-family: 'Times New Roman';"><span style="font-family: Calibri;">Depois da segunda execução, insira um novo registro no banco de dados (lembre-se de salvar e fechar a tabela aberta, caso faça a inserção diretamente pelo MS Access 2007). Dê um <em>reload</em> no navegador e note que ao procurar o nosso objeto no <em>Cache</em> ele não existe mais. Isso porque o <em>ASP.NET</em> detectou que o arquivo sofreu alteração e removeu da memória as informações armazenadas. Neste caso, a aplicação irá retornar ao banco de dados para recarregar os dados na memória.</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal; text-align: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto;"><span style="font-size: 12pt; mso-fareast-font-family: 'Times New Roman'; mso-fareast-language: PT-BR; mso-bidi-font-family: 'Times New Roman';"><span style="font-family: Calibri;">Fantástico, não?!</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal; text-align: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto;"><span style="font-size: 12pt; mso-fareast-font-family: 'Times New Roman'; mso-fareast-language: PT-BR; mso-bidi-font-family: 'Times New Roman';"><span style="font-family: Calibri;">Essa tecnologia pode ser aplicada a qualquer tipo de banco de dados baseado em arquivo, como <em>Firebird</em>, <em>SQLite</em> ou mesmo <em>XML</em>, arquivos <em>MS Excel</em> ou de texto. Existe também a possibilidade de utilizar este recurso em conjunto com o <em>SQL Server 2005</em> ou superior, mas isso eu mostro em outro artigo… ;)</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal; text-align: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto;"><span style="font-size: 12pt; mso-fareast-font-family: 'Times New Roman'; mso-fareast-language: PT-BR; mso-bidi-font-family: 'Times New Roman';"><span style="font-family: Calibri;">Baixar o </span><a href="http://isbyte.com/wp-content/uploads/2008/12/cacheaccess.rar"><span style="color: blue;"><span style="font-family: Calibri;">código fonte</span></span></a><span style="font-family: Calibri;"> completo.</span></span><span style="font-size: small; font-family: Calibri;"> </span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal; text-align: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto;"><span style="font-size: 12pt; mso-fareast-font-family: 'Times New Roman'; mso-fareast-language: PT-BR; mso-bidi-font-family: 'Times New Roman';"><span style="font-family: Calibri;"></p>
<p></span></span></p>
</div>]]></content:encoded>
			<wfw:commentRss>http://isbyte.com/index.php/2008/12/utilizando-cache-do-aspnet-com-ms-access-em-c/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
