<?xml version="1.0" encoding="utf-8"?>
        <feed xmlns="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
            <title>Mensagens de blog de todos - DevBrasil</title>
            <link rel="self" href="http://devbrasil.net/profiles/blog/feed?xn_auth=no"/>
            <updated>2020-05-27T19:24:06Z</updated>
                        <id>http://devbrasil.net/profiles/blog/feed?xn_auth=no</id>
                            <entry>
                    <title>Um mergulho no Velocity 2018 em New York</title>
                    <link rel="alternate" href="http://devbrasil.net/xn/detail/2307362:BlogPost:301873"/>
                                        <id>tag:devbrasil.net,2018-12-17:2307362:BlogPost:301873</id>
                                        <updated>2018-12-17T15:00:00.000Z</updated>
                    
                                            <author>
                            <name>Ramon Durães</name>
                            <uri>http://devbrasil.net/profile/ramonduraes</uri>
                        </author>
                    
                    <summary type="html">
                        &lt;p&gt;O Velocity 2018 em New York é a maior conferência sobre Sistemas distribuídos, alta performance e Arquitetura de aplicações.  O Velocity é promovido pela Oreilly com o apoio de grandes empresas e profissionais do mercado de tecnologia.&lt;/p&gt;
&lt;p&gt;Durante o Velocity eu tive a oportunidade de interagir e entender como os profissionais estão tratando projetos complexos envolvendo Microservices, Cloud e DevOps / SRE. &lt;br&gt;&lt;/br&gt; &lt;br&gt;&lt;/br&gt; Eu tive uma grande dificuldade em escolher as palestras devido ao…&lt;/p&gt;                    </summary>

                    <content type="html">
&lt;p&gt;O Velocity 2018 em New York é a maior conferência sobre Sistemas distribuídos, alta performance e Arquitetura de aplicações.  O Velocity é promovido pela Oreilly com o apoio de grandes empresas e profissionais do mercado de tecnologia.&lt;/p&gt;
&lt;p&gt;Durante o Velocity eu tive a oportunidade de interagir e entender como os profissionais estão tratando projetos complexos envolvendo Microservices, Cloud e DevOps / SRE. &lt;br/&gt; &lt;br/&gt;
Eu tive uma grande dificuldade em escolher as palestras devido ao grande número de opções incríveis. Uma das palestras que me chamou a atenção foi o tratamento de trace distribuído em cenário de Microservices apresentada pelo Naoman Abbas (Pintrest).&lt;br/&gt;
&lt;br/&gt;
A Bridget Kromhout (Microsoft) conduziu a iniciativa “Kubernetes 101” com uma rápida imersão na adoção de Kuberentes e demonstrando como operacionalizar os cenários “Cloud Native”.&lt;br/&gt;
&lt;br/&gt;
A Tuli Nivas (Sales Force) abordou o tema “Performance anomaly detection at scale” demonstrando os desafios da Sales Force para gerenciar a sua plataforma de SaaS. &lt;br/&gt;
&lt;br/&gt;
A Idit Levine (solo.io) abordou o tema “Debuggin microservices apps via a service mesh, Open Tracing, and Squash” demonstrando um grande desafio atual para quem desenvolve microservices e precisa rastrear todo o ciclo da aplicação.&lt;br/&gt;
&lt;br/&gt;
Essas palestras foram apenas uma pequena amostragem do Velocity 2018. Esse tipo de evento é uma grande oportunidade para se conectar com a comunidade de sistemas distribuídos e os engenheiros que estão enfrentando problemas reais e compartilhando.&lt;br/&gt;
&lt;br/&gt;
Para ver todos os detalhes:&lt;br/&gt;
&lt;a href=&quot;https://conferences.oreilly.com/velocity/vl-ny&quot;&gt;https://conferences.oreilly.com/velocity/vl-ny&lt;/a&gt; &lt;br/&gt;
&lt;br/&gt;
&lt;/p&gt;
&lt;p&gt;&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/YmRddxqGwDw?wmode=opaque&quot; frameborder=&quot;0&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;
&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Um breve resumo do Velocity 2018 em New  York&lt;br/&gt; &lt;br/&gt;
&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/NsQ_nKPhL3c?wmode=opaque&quot; frameborder=&quot;0&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt; 
&lt;br/&gt;
&lt;br/&gt;
Até a próxima !!!&lt;br/&gt;
&lt;br/&gt;
Ramon Durães&lt;/p&gt;</content>
<category term="Brasil" />

                                    </entry>
                            <entry>
                    <title>Erro Visual Studio (Programando em C )</title>
                    <link rel="alternate" href="http://devbrasil.net/xn/detail/2307362:BlogPost:282863"/>
                                        <id>tag:devbrasil.net,2016-03-09:2307362:BlogPost:282863</id>
                                        <updated>2016-03-09T08:14:50.000Z</updated>
                    
                                            <author>
                            <name>Stefan Henrique Kichler</name>
                            <uri>http://devbrasil.net/profile/StefanHenriqueKichler</uri>
                        </author>
                    
                    <summary type="html">
                        &lt;p&gt;Olá pessoal, sou novo aqui, e também novo na área. Faço ciência da computação e comecei a usar o Visual para programar. E estou apanhando bastante. Me foi pedido para fazer um programa onde onde caracteres aleatórios seriam gerados, ordenados e depois gravados em um arquivo .TXT. No entanto, quando eu chamo a função GRAVAR, ele da um erro, quando eu tiro a função GRAVAR, o programa compila e executa sem erros. Estou anexando uma imagem onde mostra a função e o erro.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Desde…&lt;/p&gt;                    </summary>

                    <content type="html">
&lt;p&gt;Olá pessoal, sou novo aqui, e também novo na área. Faço ciência da computação e comecei a usar o Visual para programar. E estou apanhando bastante. Me foi pedido para fazer um programa onde onde caracteres aleatórios seriam gerados, ordenados e depois gravados em um arquivo .TXT. No entanto, quando eu chamo a função GRAVAR, ele da um erro, quando eu tiro a função GRAVAR, o programa compila e executa sem erros. Estou anexando uma imagem onde mostra a função e o erro.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Desde já,&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Obrigado.&lt;a href=&quot;http://storage.ning.com/topology/rest/1.0/file/get/2230049683?profile=original&quot; target=&quot;_self&quot;&gt;&lt;img width=&quot;750&quot; class=&quot;align-full&quot; src=&quot;http://storage.ning.com/topology/rest/1.0/file/get/2230049683?profile=RESIZE_1024x1024&quot;/&gt;&lt;/a&gt;&lt;/p&gt;</content>
<category term="Brasil" />

                                    </entry>
                            <entry>
                    <title>Desenvolvendo para Apple Watch com Xamarin iOS e C#</title>
                    <link rel="alternate" href="http://devbrasil.net/xn/detail/2307362:BlogPost:274561"/>
                                        <id>tag:devbrasil.net,2015-10-16:2307362:BlogPost:274561</id>
                                        <updated>2015-10-16T00:57:16.000Z</updated>
                    
                                            <author>
                            <name>Rogério Rodrigues</name>
                            <uri>http://devbrasil.net/profile/RogerioRodrigues</uri>
                        </author>
                    
                    <summary type="html">
                        &lt;p&gt;Estamos vivendo hoje uma novo conceito sobre as coisas que usamos para vestir, iniciamos de fato a era dos Wearables : os Dispositivos vestíveis.&lt;/p&gt;
&lt;p&gt;O Xamarin por sua vez tem sua proposta o &lt;a href=&quot;http://studyxnet.com.br/xamarin/xamarin-forms-o-tudo-em-uma-coisa-so/&quot;&gt;desenvolvimento crossplatform&lt;/a&gt; utilizando todo o poder da linguagem C# e os melhores recursos que a plataforma .Net proporciona usando como base os projetos OpenSource MonoTouch e MonoAndroid.…&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;                    </summary>

                    <content type="html">
&lt;p&gt;Estamos vivendo hoje uma novo conceito sobre as coisas que usamos para vestir, iniciamos de fato a era dos Wearables : os Dispositivos vestíveis.&lt;/p&gt;
&lt;p&gt;O Xamarin por sua vez tem sua proposta o &lt;a href=&quot;http://studyxnet.com.br/xamarin/xamarin-forms-o-tudo-em-uma-coisa-so/&quot;&gt;desenvolvimento crossplatform&lt;/a&gt; utilizando todo o poder da linguagem C# e os melhores recursos que a plataforma .Net proporciona usando como base os projetos OpenSource MonoTouch e MonoAndroid.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://studyxnet.com.br/wp-content/uploads/2015/08/imagem8.png&quot;&gt;&lt;img class=&quot;aligncenter wp-image-3141 size-medium align-center&quot; src=&quot;http://studyxnet.com.br/wp-content/uploads/2015/08/imagem8-300x241.png&quot; alt=&quot;Xamarin Werable e Xamarin iOS&quot; width=&quot;300&quot; height=&quot;241&quot;/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Mas vamos falar da proposta deste post, que é o desenvolvimento para Wearables, falando um pouco sobre como iniciar o desenvolvimento para Apple Watch com o Watchkit que o &lt;a href=&quot;http://studyxnet.com.br/comece-aqui/comecando-a-entender-o-xamarin-ios/&quot;&gt;Xamarin iOS&lt;/a&gt; já tem suporte desde a sua primeira versão Beta.&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;wp-more-tag mce-wp-more&quot; title=&quot;Leia mais...&quot; alt=&quot;&quot;/&gt;&lt;/p&gt;
&lt;p&gt;O Xamarin tem suporte nativo para o dispositivo de cada plataforma, pois assim como o desenvolvimento para smartphones e tablets, ele utiliza também 100% do SDK do Android e do iOS. Cada plataforma possui um dispositivo, arquitetura, recursos diferentes, formas de acessar e sensores diferentes. Toda a sua comunicação é feita pareado a um smartphone utilizando a tecnologia Bluetooth LE.&lt;img class=&quot;aligncenter wp-image-3151 size-medium align-center&quot; src=&quot;http://studyxnet.com.br/wp-content/uploads/2015/08/imagem7-300x171.png&quot; alt=&quot;Xamarin, Wearables e Xamarin iOS&quot; width=&quot;300&quot; height=&quot;171&quot;/&gt;&lt;/p&gt;
&lt;h2&gt;O Device e a SDK WatchKit&lt;/h2&gt;
&lt;p&gt;Mais recentemente lançado o Apple Watch não é totalmente independente do smartphone.Utilizamos o WatchKit instalado junto com o Xcode para fornecer a API necessária para esse desenvolvimento. O Código não é executado direto no device, isto é, somente uma UI fica disponível para interação e o código ou Parent App será executado no iPhone que serve toda para a comunicação e configuração do aplicativo, o qual abordaremos logo mais. Os sensores por sua vez não são acessíveis, sendo assim você não terá um nível de customização como no Android Wear. E por sua vez, não é feito nenhum deploy de App no device, esse Parent App é executado e instalado apenas no iPhone, ficando no Apple Watch somente a UI exibindo informações precisas e notificações.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://studyxnet.com.br/wp-content/uploads/2015/08/imagem6.png&quot;&gt;&lt;img class=&quot;aligncenter wp-image-3171 size-medium align-center&quot; src=&quot;http://studyxnet.com.br/wp-content/uploads/2015/08/imagem6-300x237.png&quot; alt=&quot;Watchkit Werable e Xamarin iOS&quot; width=&quot;300&quot; height=&quot;237&quot;/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Em ambos não temos teclado para digitação, temos a função de assistente de voz, ditado, mais refinada para ser utilizada no smartwatch, justamente por ter uma tela pequena, não seria tão agradável para o usuário ter um teclado em uma tela tão reduzida.&lt;/p&gt;
&lt;h2&gt;Criando nosso projeto com Xamarin iOS&lt;/h2&gt;
&lt;p&gt;Seguindo os primeiros passos para criar uma aplicação para Apple Watch iremos em : File &amp;gt; New &amp;gt; Solution &amp;gt; iOS &amp;gt;Single View App&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://studyxnet.com.br/wp-content/uploads/2015/09/criando_singleview.png&quot;&gt;&lt;img class=&quot;aligncenter wp-image-5141 size-large&quot; src=&quot;http://studyxnet.com.br/wp-content/uploads/2015/09/criando_singleview-1024x741.png&quot; alt=&quot;criando_singleview Werable e Xamarin iOS&quot; width=&quot;648&quot; height=&quot;469&quot;/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;É necessário primeiramente criar uma single view app, pois é ela que será a Full App iOS, ou Parent App, que será base do projeto WatchKit. Após isso precisamos adicionar o tipo de projeto iOS &amp;gt; Extension &amp;gt; WatchKit App, dentro da solution&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://studyxnet.com.br/wp-content/uploads/2015/09/watchkit_app.png&quot;&gt;&lt;img class=&quot;aligncenter wp-image-5151 size-large&quot; src=&quot;http://studyxnet.com.br/wp-content/uploads/2015/09/watchkit_app-1024x742.png&quot; alt=&quot;watchkit_app Werable e Xamarin iOS&quot; width=&quot;648&quot; height=&quot;470&quot;/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Após selecionar o tipo do projeto e avançar, teremos uma tela igual abaixo onde podemos selecionar a parent App, que será o projeto Single View App que criamos anteriormente,  incluir o tipo de tela Glance, que são aquelas telas que no device em espera exibem informações rápidas como horário ou ícones de alertas, e Notifications que é a estrutura para a App Watchkit receber e exibir notificações recebidas.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://studyxnet.com.br/wp-content/uploads/2015/09/tipos_telas.png&quot;&gt;&lt;img class=&quot;aligncenter wp-image-5161 size-large&quot; src=&quot;http://studyxnet.com.br/wp-content/uploads/2015/09/tipos_telas-1024x742.png&quot; alt=&quot;tipos_Telas Werable e Xamarin iOS&quot; width=&quot;648&quot; height=&quot;470&quot;/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;A estrutura do projeto&lt;/h2&gt;
&lt;p&gt;Conforme a imagem abaixo nós teremos essa estrutura de Solution, após adicionar o projeto WatchKit. O Primeiro projeto da solution é a Parent App, uma app feita em Xamarin iOS que será a base de comunicação do device, pois é no próprio iPhone que ele fica instalado,  com o App do Apple Watch, neste primeiro momento não iremos trabalhar com ele, mas nele pode conter configurações de preferência, tutoriais, entre outros recursos para o App WatchKit.&lt;/p&gt;
&lt;p&gt;Logo Abaixo dele temos o projeto de tests padrão criado pelas solutions do Xamarin iOS e em seguida o WachKitApp. O Projeto WatchKitApp é o projeto irá ser instalado no Apple Watch, porém como podem observar temos uma estrutura muito reduzida, pois o device não possui tantos recursos quanto um smartphone. Na pasta resources serão adicionados todas as imagens com baixa resolução e tamanho que serão utilizadas no projeto, é algo que devemos tomar cuidado na hora de criar as imagens que serão usadas. O mais importante desse projeto é o arquivo interface.StoryBoard , onde iremos criar as Views ( Telas ) do nosso App WatchKit. O Quarto e ultimo projeto da nossa solution é Extension, nele vai contar toda a nossa regra de negocio, todo o nosso &quot;codebehind&quot; do das views que criamos no AppWatchKit. Para toda view criada lá, iremos manipular com uma Controller no WathKitExtension.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://studyxnet.com.br/wp-content/uploads/2015/09/solution_estruc.png&quot;&gt;&lt;img class=&quot;aligncenter wp-image-6801 align-center&quot; src=&quot;http://studyxnet.com.br/wp-content/uploads/2015/09/solution_estruc-582x1024.png&quot; alt=&quot;Estrutura da Solution Werable e Xamarin iOS&quot; width=&quot;289&quot; height=&quot;508&quot;/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 style=&quot;text-align: left;&quot;&gt;Desenvolvendo e Integrando as aplicações&lt;/h2&gt;
&lt;p&gt;Dando um duplo click no arquivo interface.storyboard, que está dentro do projeto WatchKitApp, iremos abrir e perceber que temos uma view chamada Interface Controller já criada. Nela iremos arrastar dois controles que estão na nossa toolbox do lado esquerdo, chamados Button e Label. De forma muito simples, drag &amp;amp; drop, arrastamos e posicionamos os controles na nossa view conforma o exemplo abaixo.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://studyxnet.com.br/wp-content/uploads/2015/09/storyboard3.png&quot;&gt;&lt;img class=&quot;aligncenter wp-image-6981 size-large&quot; src=&quot;http://studyxnet.com.br/wp-content/uploads/2015/09/storyboard3-1024x536.png&quot; alt=&quot;storyboard3 Werable e Xamarin iOS&quot; width=&quot;648&quot; height=&quot;339&quot;/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Após adicionar teremos a nossa view sendo apresentada desse jeito. Podemos então selecionar um controle de cada vez, o Button e a Label, e acessando as Properties na guia do lado esquerdo do Xamarin onde podemos editar o conteúdo dos controles entre outras propriedades. Neste primeiro momento usaremos a propriedade Name, a primeira da aba Widget, localizada na guia properties para dar um ID para o controle, dessa forma conseguiremos manipular ele na classe InterfaceController.cs , localizada no projeto Extension.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://studyxnet.com.br/wp-content/uploads/2015/09/storyboard2.png&quot;&gt;&lt;img class=&quot;aligncenter wp-image-6971 size-large&quot; src=&quot;http://studyxnet.com.br/wp-content/uploads/2015/09/storyboard2-1024x640.png&quot; alt=&quot;storyboard2 Werable e Xamarin iOS&quot; width=&quot;648&quot; height=&quot;405&quot;/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Neste exemplo apenas modifiquei o texto exibido dentro do Button para &quot;Press&quot; e o texto que está dentro da Label para &quot; 0 Clicks &quot;,  esse texto pois irei criar um código simples para exibir os numero de vezes que o button receber um click, então será exibido na label. Após personalizar nosso componentes, vamos selecionar o Button e ir na aba Events da guia Properties do Button, onde teremos um campo chamado &quot; Action &quot; para adicionar o evento que iremos manipular o evento Click quando o Button for pressionado. Neste campo iremos digitar &quot; OnButtonPress &quot; e apertar enter, para que grave no Button o evento que iremos utilizar.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://studyxnet.com.br/wp-content/uploads/2015/09/eventos.png&quot;&gt;&lt;img class=&quot;aligncenter wp-image-7521 align-center&quot; src=&quot;http://studyxnet.com.br/wp-content/uploads/2015/09/eventos.png&quot; alt=&quot;Werable e Xamarin iOS Events&quot; width=&quot;275&quot; height=&quot;552&quot;/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Após adicionar o evento OnButtonPress no Button, iremos no projeto Extension, abriremos a classe InterfaceController.cs, pois a mesma esta referenciada a View que acabamos de configurar, e adicionaremos o seguinte bloco de código após o método DidDeactivate.&lt;/p&gt;
&lt;p&gt;O que o método faz é bastante simples: Criamos um contador com uma variável &lt;strong&gt;click&lt;/strong&gt; do tipo inteira sendo inicializada com o valor 0, dentro do método OnButtonPress que é utilizado para manipular o evento Click do Button, criamos uma variável &lt;strong&gt;msg &lt;/strong&gt;e dentro dela informamos que o valor que receberá será uma string que irá incrementando o valor inteiro da variável &lt;strong&gt;click &lt;/strong&gt;e complementar a string. Então vamos utilizar o valor da variável &lt;strong&gt;msg &lt;/strong&gt;e utilizar a propriedade da label, chamando ela,  através do Name ou ID que criamos na guia properties, &lt;strong&gt;SetText() &lt;/strong&gt;incluindo nela a própria variável, sendo assim estamos indicando que o texto da nossa label irá ser alterado conforme o valor da string também for.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://studyxnet.com.br/wp-content/uploads/2015/09/codigo.png&quot;&gt;&lt;img class=&quot;aligncenter wp-image-6941 size-large align-center&quot; src=&quot;http://studyxnet.com.br/wp-content/uploads/2015/09/codigo-1024x197.png&quot; alt=&quot;codigo Werable e Xamarin iOS&quot; width=&quot;648&quot; height=&quot;125&quot;/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Feito os passos acima, vamos realizar o debug da APP. Quando o emulador do iOS estiver aberto, selecionamos ele, iremos até a opção HardWare &amp;gt; External Displays e selecionamos uma das duas opções do Apple Watch, para que seja aberto um  display externo simulando o device AppleWatch.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://studyxnet.com.br/wp-content/uploads/2015/09/telas_externas.png&quot;&gt;&lt;img class=&quot;aligncenter wp-image-6991 size-large&quot; src=&quot;http://studyxnet.com.br/wp-content/uploads/2015/09/telas_externas-1024x676.png&quot; alt=&quot;Werable e Xamarin iOS External Displays&quot; width=&quot;648&quot; height=&quot;428&quot;/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Com a aplicação rodando teremos esse resultado. A cada click que foi feito no botão, ele irá incrementar o numero do texto que aparece na label, conforme a imagem abaixo.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://studyxnet.com.br/wp-content/uploads/2015/09/funcionando.png&quot;&gt;&lt;img class=&quot;aligncenter wp-image-6951 size-large&quot; src=&quot;http://studyxnet.com.br/wp-content/uploads/2015/09/funcionando-1024x787.png&quot; alt=&quot;Werable e Xamarin iOS Executando&quot; width=&quot;648&quot; height=&quot;498&quot;/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Esse exemplo simples foi para mostrar como podemos iniciar facilmente o desenvolvimento para aplicações usando o sdk do WatchKit e o Xamarin iOS. Nos próximos posts irei mostrar como consumir dados utilizando o SDK do WatchKit e do Android Wear exibindo no device.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;</content>
<category term="Brasil" />

                    <link rel="enclosure" href="http://studyxnet.com.br/wp-content/uploads/2015/08/imagem8.png" type="image/png"/><link rel="enclosure" href="http://studyxnet.com.br/wp-content/uploads/2015/08/imagem6.png" type="image/png"/><link rel="enclosure" href="http://studyxnet.com.br/wp-content/uploads/2015/09/criando_singleview.png" type="image/png"/><link rel="enclosure" href="http://studyxnet.com.br/wp-content/uploads/2015/09/watchkit_app.png" type="image/png"/><link rel="enclosure" href="http://studyxnet.com.br/wp-content/uploads/2015/09/tipos_telas.png" type="image/png"/><link rel="enclosure" href="http://studyxnet.com.br/wp-content/uploads/2015/09/solution_estruc.png" type="image/png"/><link rel="enclosure" href="http://studyxnet.com.br/wp-content/uploads/2015/09/storyboard3.png" type="image/png"/><link rel="enclosure" href="http://studyxnet.com.br/wp-content/uploads/2015/09/storyboard2.png" type="image/png"/><link rel="enclosure" href="http://studyxnet.com.br/wp-content/uploads/2015/09/eventos.png" type="image/png"/><link rel="enclosure" href="http://studyxnet.com.br/wp-content/uploads/2015/09/codigo.png" type="image/png"/><link rel="enclosure" href="http://studyxnet.com.br/wp-content/uploads/2015/09/telas_externas.png" type="image/png"/><link rel="enclosure" href="http://studyxnet.com.br/wp-content/uploads/2015/09/funcionando.png" type="image/png"/>                </entry>
                            <entry>
                    <title>Ordenando a execução de TRIGGER com Oracle 11g</title>
                    <link rel="alternate" href="http://devbrasil.net/xn/detail/2307362:BlogPost:270684"/>
                                        <id>tag:devbrasil.net,2015-06-16:2307362:BlogPost:270684</id>
                                        <updated>2015-06-16T02:17:58.000Z</updated>
                    
                                            <author>
                            <name>Fagner Nascimento Souza</name>
                            <uri>http://devbrasil.net/profile/FagnerNascimentoSouza</uri>
                        </author>
                    
                    <summary type="html">
                        &lt;div&gt;&lt;span&gt;&lt;span&gt;Até o Oracle 11g,  nas versões anteriores não era possivel ordenar a execução de trigger &lt;/span&gt;&lt;/span&gt;irei demonstrar que com o Oracle 11g podemos determinar a ordem de execução das triggers de uma tabela que são de um mesmo tipo. Na criação de uma trigger no Oracle 11g, existe uma nova cláusula chamada &quot;follows&quot; que nos permitirá definir a ordem de execução das mesmas.&lt;/div&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;&lt;span&gt;&lt;span&gt;No primeiro exemplo abaixo, irei criar 3 triggers…&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;                    </summary>

                    <content type="html">
&lt;div&gt;&lt;span&gt;&lt;span&gt;Até o Oracle 11g,  nas versões anteriores não era possivel ordenar a execução de trigger &lt;/span&gt;&lt;/span&gt;irei demonstrar que com o Oracle 11g podemos determinar a ordem de execução das triggers de uma tabela que são de um mesmo tipo. Na criação de uma trigger no Oracle 11g, existe uma nova cláusula chamada &quot;follows&quot; que nos permitirá definir a ordem de execução das mesmas.&lt;/div&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;&lt;span&gt;&lt;span&gt;No primeiro exemplo abaixo, irei criar 3 triggers do tipo &lt;span&gt;BEFORE INSERT&lt;/span&gt; sem definir uma ordem de execução.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;pre&gt;&lt;span&gt;C:\&amp;gt;sqlplus scott/tiger&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;&lt;span&gt;SQL*Plus: Release 11.2.0.1.0 Production on Qua Ago 3 21:34:36 2011&lt;/span&gt;&lt;br/&gt;&lt;span&gt;Copyright (c) 1982, 2010, Oracle.  All rights reserved.&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;&lt;span&gt;Conectado a:&lt;/span&gt;&lt;br/&gt;&lt;span&gt;Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production&lt;/span&gt;&lt;br/&gt;&lt;span&gt;With the Partitioning, OLAP, Data Mining and Real Application Testing options&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;&lt;span&gt;SQL&amp;gt; create table t1 (id number);&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;&lt;span&gt;Tabela criada.&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;&lt;span&gt;SQL&amp;gt; create or replace trigger &lt;span&gt;trg_teste_01&lt;/span&gt;&lt;/span&gt;&lt;br/&gt;&lt;span&gt;  before insert on t1&lt;/span&gt;&lt;br/&gt;&lt;span&gt;  for each row&lt;/span&gt;&lt;br/&gt;&lt;span&gt;  begin&lt;/span&gt;&lt;br/&gt;&lt;span&gt;      dbms_output.put_line(&#039;trigger trg_teste_01&#039;);&lt;/span&gt;&lt;br/&gt;&lt;span&gt;  end;&lt;/span&gt;&lt;br/&gt;&lt;span&gt;  &lt;/span&gt;&lt;br/&gt;&lt;br/&gt;&lt;span&gt;Gatilho criado.&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;&lt;span&gt;SQL&amp;gt; create or replace trigger &lt;span&gt;trg_teste_02&lt;/span&gt;&lt;/span&gt;&lt;br/&gt;&lt;span&gt;  before insert on t1&lt;/span&gt;&lt;br/&gt;&lt;span&gt;  for each row&lt;/span&gt;&lt;br/&gt;&lt;span&gt;  begin&lt;/span&gt;&lt;br/&gt;&lt;span&gt;      dbms_output.put_line(&#039;trigger trg_teste_02&#039;);&lt;/span&gt;&lt;br/&gt;&lt;span&gt;  end;&lt;/span&gt;&lt;br/&gt;&lt;span&gt;  &lt;/span&gt;&lt;br/&gt;&lt;br/&gt;&lt;span&gt;Gatilho criado.&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;&lt;span&gt;SQL&amp;gt; create or replace trigger &lt;span&gt;trg_teste_03&lt;/span&gt;&lt;/span&gt;&lt;br/&gt;&lt;span&gt;  before insert on t1&lt;/span&gt;&lt;br/&gt;&lt;span&gt;  for each row&lt;/span&gt;&lt;br/&gt;&lt;span&gt;  begin&lt;/span&gt;&lt;br/&gt;&lt;span&gt;      dbms_output.put_line(&#039;trigger trg_teste_03&#039;);&lt;/span&gt;&lt;br/&gt;&lt;span&gt;  end;&lt;/span&gt;&lt;br/&gt;&lt;span&gt;  &lt;/span&gt;&lt;br/&gt;&lt;br/&gt;&lt;span&gt;Gatilho criado.&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;&lt;br/&gt;&lt;span&gt;Após a criação da tabela e das triggers, irei inserir um registro na tabela T1.&lt;br/&gt;&lt;br/&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre&gt;&lt;span&gt;SQL&amp;gt; set serveroutput on&lt;/span&gt;&lt;br/&gt;&lt;span&gt;SQL&amp;gt; insert into t1 values (1);&lt;/span&gt;&lt;br/&gt;&lt;span&gt;trigger trg_teste_03&lt;/span&gt;&lt;br/&gt;&lt;span&gt;trigger trg_teste_02&lt;/span&gt;&lt;br/&gt;&lt;span&gt;trigger trg_teste_01&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;&lt;span&gt;1 linha criada.&lt;/span&gt;&lt;/pre&gt;
&lt;div&gt;&lt;span&gt;&lt;span&gt;Perceberam que a trigger &lt;span&gt;trg_teste_03&lt;/span&gt; foi acionada primeiro? Quem garante que a mesma será executada primeiro na próxima vez? Bom, no segundo exemplo abaixo irei criar novamente as triggers só que, agora, definindo a ordem de execução:&lt;span&gt;trg_teste_01&lt;/span&gt;, depois &lt;span&gt;trg_teste_02&lt;/span&gt; e depois &lt;span&gt;trg_teste_03&lt;/span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;&lt;/div&gt;
&lt;pre&gt;&lt;span&gt;SQL&amp;gt; create or replace trigger &lt;span&gt;trg_teste_01&lt;/span&gt;&lt;/span&gt;&lt;br/&gt;&lt;span&gt;  before insert on t1&lt;/span&gt;&lt;br/&gt;&lt;span&gt;  for each row&lt;/span&gt;&lt;br/&gt;&lt;span&gt;  begin&lt;/span&gt;&lt;br/&gt;&lt;span&gt;     dbms_output.put_line(&#039;trigger trg_teste_01&#039;);&lt;/span&gt;&lt;br/&gt;&lt;span&gt;  end;&lt;/span&gt;&lt;br/&gt;&lt;span&gt;  &lt;/span&gt;&lt;br/&gt;&lt;br/&gt;&lt;span&gt;Gatilho criado.&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;&lt;span&gt;SQL&amp;gt; create or replace trigger &lt;span&gt;trg_teste_02&lt;/span&gt;&lt;/span&gt;&lt;br/&gt;&lt;span&gt;  before insert on t1&lt;/span&gt;&lt;br/&gt;&lt;span&gt;  for each row&lt;/span&gt;&lt;br/&gt;&lt;span&gt;  &lt;span&gt;follows trg_teste_01&lt;/span&gt;&lt;/span&gt;&lt;br/&gt;&lt;span&gt;  begin&lt;/span&gt;&lt;br/&gt;&lt;span&gt;      dbms_output.put_line(&#039;trigger trg_teste_02&#039;);&lt;/span&gt;&lt;br/&gt;&lt;span&gt; end;&lt;/span&gt;&lt;br/&gt;&lt;span&gt; &lt;/span&gt;&lt;br/&gt;&lt;span&gt;Gatilho criado.&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;&lt;span&gt;SQL&amp;gt; create or replace trigger &lt;span&gt;trg_teste_03&lt;/span&gt;&lt;/span&gt;&lt;br/&gt;&lt;span&gt; before insert on t1&lt;/span&gt;&lt;br/&gt;&lt;span&gt; for each row&lt;/span&gt;&lt;br/&gt;&lt;span&gt; &lt;span&gt;follows trg_teste_02&lt;/span&gt;&lt;/span&gt;&lt;br/&gt;&lt;span&gt; begin&lt;/span&gt;&lt;br/&gt;&lt;span&gt;    dbms_output.put_line(&#039;trigger trg_teste_03&#039;);&lt;/span&gt;&lt;br/&gt;&lt;span&gt; end;&lt;/span&gt;&lt;br/&gt;&lt;span&gt; &lt;/span&gt;&lt;br/&gt;&lt;br/&gt;&lt;span&gt;Gatilho criado.&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;&lt;span&gt;SQL&amp;gt; insert into t1 values (2);&lt;/span&gt;&lt;br/&gt;&lt;span&gt;trigger trg_teste_01&lt;/span&gt;&lt;br/&gt;&lt;span&gt;trigger trg_teste_02&lt;/span&gt;&lt;br/&gt;&lt;span&gt;trigger trg_teste_03&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;&lt;span&gt;1 linha criada.&lt;/span&gt;&lt;/pre&gt;
&lt;div&gt;&lt;span&gt;&lt;span&gt;Pronto. Podemos ver que as mesmas foram acionadas de acordo com a ordem que eu havia definido anteriormente. Poderíamos inclusive desabilitar uma das triggers que não haveria problema nenhum:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;pre&gt;&lt;span&gt;SQL&amp;gt; alter trigger &lt;span&gt;trg_teste_02&lt;/span&gt; disable;&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;&lt;span&gt;Gatilho alterado.&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;&lt;span&gt;SQL&amp;gt; insert into t1 values (3);&lt;/span&gt;&lt;br/&gt;&lt;span&gt;trigger trg_teste_01&lt;/span&gt;&lt;br/&gt;&lt;span&gt;trigger trg_teste_03&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;&lt;span&gt;1 linha criada.&lt;/span&gt;&lt;/pre&gt;
&lt;div&gt;&lt;span&gt;&lt;span&gt;Agora, caso alguma trigger que é dependente de outra for dropada, aí sim teremos problemas pois não conseguiremos realizar algumas operações até que o problema seja sanado.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre&gt;&lt;span&gt;SQL&amp;gt; drop trigger &lt;span&gt;trg_teste_02&lt;/span&gt;;&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;&lt;span&gt;Gatilho eliminado.&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;&lt;span&gt;SQL&amp;gt; select object_name,status from user_objects where object_type=&#039;TRIGGER&#039;;&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;&lt;span&gt;OBJECT_NAME                    STATUS&lt;/span&gt;&lt;br/&gt;&lt;span&gt;------------------------------ -------&lt;/span&gt;&lt;br/&gt;&lt;span&gt;TRG_TESTE_01                   VALID&lt;/span&gt;&lt;br/&gt;&lt;span&gt;TRG_TESTE_03                   INVALID&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;span&gt;SQL&amp;gt; insert into t1 values (3);&lt;/span&gt;&lt;br/&gt;&lt;span&gt;insert into t1 values (3)&lt;/span&gt;&lt;br/&gt;&lt;span&gt;            *&lt;/span&gt;&lt;br/&gt;&lt;span&gt;ERRO na linha 1:&lt;/span&gt;&lt;br/&gt;&lt;span&gt;ORA-04045: erros durante a recompilação/revalidação de SCOTT.TRG_TESTE_03&lt;/span&gt;&lt;br/&gt;&lt;span&gt;ORA-04098: gatilho &#039;SCOTT.TRG_TESTE_03&#039; é inválido e a revalidação falhou&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;&lt;span&gt;SQL&amp;gt; drop table t1;&lt;/span&gt;&lt;br/&gt;&lt;span&gt;drop table t1&lt;/span&gt;&lt;br/&gt;&lt;span&gt;           *&lt;/span&gt;&lt;br/&gt;&lt;span&gt;ERRO na linha 1:&lt;/span&gt;&lt;br/&gt;&lt;span&gt;ORA-00604: ocorreu um erro no nível 1 SQL recursivo&lt;/span&gt;&lt;br/&gt;&lt;span&gt;ORA-04045: erros durante a recompilação/revalidação de SCOTT.TRG_TESTE_03&lt;/span&gt;&lt;br/&gt;&lt;span&gt;ORA-04098: gatilho &#039;SCOTT.TRG_TESTE_03&#039; é inválido e a revalidação falhou&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;&lt;span&gt;SQL&amp;gt; alter trigger &lt;span&gt;trg_teste_03&lt;/span&gt; disable;&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;&lt;span&gt;Gatilho alterado.&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;&lt;span&gt;SQL&amp;gt; insert into t1 values (4);&lt;/span&gt;&lt;br/&gt;&lt;span&gt;trigger trg_teste_01&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;&lt;span&gt;1 linha criada.&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;&lt;span&gt;SQL&amp;gt; drop table t1;&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;&lt;span&gt;Tabela eliminada.&lt;br/&gt;&lt;br/&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;&lt;span&gt;&lt;br/&gt;Caso alguém saiba uma forma mais otimizada me mande é sempre bom compartilhar o que aprendemos :).&lt;/span&gt;&lt;/p&gt;</content>
<category term="Brasil" />

                                    </entry>
                            <entry>
                    <title>C# 5.0 –  Gerando Log utilizando Caller Info Attributes</title>
                    <link rel="alternate" href="http://devbrasil.net/xn/detail/2307362:BlogPost:265659"/>
                                        <id>tag:devbrasil.net,2015-01-04:2307362:BlogPost:265659</id>
                                        <updated>2015-01-04T14:00:09.000Z</updated>
                    
                                            <author>
                            <name>Leandro Rodrigues</name>
                            <uri>http://devbrasil.net/profile/LeandroRodrigues</uri>
                        </author>
                    
                    <summary type="html">
                        &lt;h2 class=&quot;entry-title&quot;&gt;&lt;/h2&gt;
&lt;p&gt;Desenvolver software saudável é uma arte, atualmente temos visto muito software de qualidade no mercado, porém quando existe qualquer implementação evolutiva o software começa a desencadear uma série de bugs, por essa razão conceitualmente existe uma diferença entre software saudável e software de qualidade, software saudável em curtas palavras é o software que é evoluído com facilidade e não gera bugs.&lt;br&gt;&lt;/br&gt; &lt;br&gt;&lt;/br&gt; Existem várias classes de bugs, alteração de…&lt;/p&gt;                    </summary>

                    <content type="html">
&lt;h2 class=&quot;entry-title&quot;&gt;&lt;/h2&gt;
&lt;p&gt;Desenvolver software saudável é uma arte, atualmente temos visto muito software de qualidade no mercado, porém quando existe qualquer implementação evolutiva o software começa a desencadear uma série de bugs, por essa razão conceitualmente existe uma diferença entre software saudável e software de qualidade, software saudável em curtas palavras é o software que é evoluído com facilidade e não gera bugs.&lt;br/&gt; &lt;br/&gt; Existem várias classes de bugs, alteração de infraestrutura, sintaxe, lógica de implementação entre outros, porém o pior de todos é aquele bug silencioso, pois ele acontece apenas no ambiente de produção e você não consegue entender a causa do erro e onde o erro acontece, por esse motivo a implementação de Log é muito importante porque fornece aos desenvolvedores a rastreabilidade necessária para descobrir o que esta gerando erro, e a novo recurso Caller Infor Attributes disponibilizado no C# 5.0 nos ajuda com essa questão. &lt;/p&gt;
&lt;p&gt;&lt;br/&gt; Vamos implementar um exemplo bem simples para entendermos o conceito, vale lembrar que estamos sendo puristas tratando log de erro apenas com C#, não estamos utilizando nenhum componente orientado a aspecto que existe no mercado.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Na versão do C# 4.0 foi disponibilizada uma feature bem legal que já existia em outras linguagens o Named e Optional Arguments, usando dessa feature os arquitetos da Microsoft tiveram a idéia de adicionar atributos para parâmetros opcionais que representassem o método, arquivo e linha que o erro ocorreu.&lt;/p&gt;
&lt;p&gt;&lt;br/&gt; Como podemos observar a Solução do Projeto é bem simples &lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://storage.ning.com/topology/rest/1.0/file/get/2230049391?profile=original&quot; target=&quot;_self&quot;&gt;&lt;img src=&quot;http://storage.ning.com/topology/rest/1.0/file/get/2230049391?profile=original&quot; width=&quot;221&quot; class=&quot;align-left&quot;/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;br/&gt; Interface nos fornece um comportamento chamado Error que será implementado pela classe Logger&lt;br/&gt; &lt;br/&gt; &lt;a href=&quot;http://storage.ning.com/topology/rest/1.0/file/get/2230049423?profile=original&quot; target=&quot;_self&quot;&gt;&lt;img src=&quot;http://storage.ning.com/topology/rest/1.0/file/get/2230049423?profile=original&quot; width=&quot;731&quot; class=&quot;align-full&quot;/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;br/&gt; Classe Logger implementa o comportamento da interface ILog, fornece uma instancia para classes externas acessarem o método Error.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://storage.ning.com/topology/rest/1.0/file/get/2230063937?profile=original&quot; target=&quot;_self&quot;&gt;&lt;img width=&quot;750&quot; src=&quot;http://storage.ning.com/topology/rest/1.0/file/get/2230064076?profile=RESIZE_1024x1024&quot; width=&quot;750&quot; class=&quot;align-full&quot;/&gt;&lt;/a&gt;&lt;br/&gt; Agora iremos chamar esse comportamento de uma classe cliente, no nosso caso do Main.&lt;br/&gt; &lt;br/&gt; &lt;a href=&quot;http://storage.ning.com/topology/rest/1.0/file/get/2230064418?profile=original&quot; target=&quot;_self&quot;&gt;&lt;img src=&quot;http://storage.ning.com/topology/rest/1.0/file/get/2230064418?profile=original&quot; width=&quot;734&quot; class=&quot;align-left&quot;/&gt;&lt;/a&gt;Resultado :&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://storage.ning.com/topology/rest/1.0/file/get/2230064530?profile=original&quot; target=&quot;_self&quot;&gt;&lt;img src=&quot;http://storage.ning.com/topology/rest/1.0/file/get/2230064530?profile=original&quot; width=&quot;640&quot; class=&quot;align-left&quot;/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Como podemos notar é retornado a descrição do erro, método, arquivo e linha que o erro ocorreu, com essas informações em mãos bastaria persistir esses dados em uma base de dados e implementar uma rotina para enviar notificações via email sobre os erros que estão acontecendo no ambiente de produção.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Vantagem&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;A sintaxe é clara e objetiva, oferece uma maneira de trabalhar com Log de erro de uma forma customizada não excedendo. Os componentes de terceiros existentes no mercado orientado a aspecto oferecem muito mais do que é realmente necessário, muita das vezes gerando arquivos xml enormes, além da lógica interna desses componentes ser altamente complexas uma vez que é realizado um scan do assembly depois que o C# compiler converteu esse assembly para IL e posteriormente é reescrito o IL.&lt;br/&gt; Então Caller Info Attributes fica como uma alternativa mais limpa e customizada. &lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Para saber mais &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;http://devbrasil.net/group/cdesenvolvendores&quot; target=&quot;_self&quot;&gt;Aprofunde seu conhecimento sobre C#&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;http://msdn.microsoft.com/en-us/library/dd264739.aspx&quot; target=&quot;_blank&quot;&gt;Artigo sobre Named e Optional Arguments MSDN&lt;/a&gt; &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;http://weblogs.asp.net/scottgu/archive/2010/04/02/optional-parameters-and-named-arguments-in-c-4-and-a-cool-scenario-w-asp-net-mvc-2.aspx&quot; target=&quot;_self&quot;&gt;Caso de Uso de Named e Optional Arguments&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://devbrasil.net/profiles/blogs/c-4-0-named-e-optional-arguments-para-que-servem-e-como-us-los&quot; target=&quot;_self&quot;&gt;C# 4.0 - Named e Optional Arguments&lt;/a&gt;&lt;/strong&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://msdn.microsoft.com/en-us/library/hh534540.aspx&quot; target=&quot;_blank&quot;&gt;C# 5.0 - Caller Info Attributes&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;</content>
<category term="Brasil" />

                                    </entry>
                            <entry>
                    <title>C# 5.0 – Programação Assíncrona Async e Await</title>
                    <link rel="alternate" href="http://devbrasil.net/xn/detail/2307362:BlogPost:265650"/>
                                        <id>tag:devbrasil.net,2014-12-24:2307362:BlogPost:265650</id>
                                        <updated>2014-12-24T00:30:00.000Z</updated>
                    
                                            <author>
                            <name>Leandro Rodrigues</name>
                            <uri>http://devbrasil.net/profile/LeandroRodrigues</uri>
                        </author>
                    
                    <summary type="html">
                        &lt;p&gt;&lt;span style=&quot;color: #333300;&quot;&gt;Programação Assíncrona é atualmente um dos elementos mais importantes no desenvolvimento de software, um cliente ao navegar por uma aplicação deseja ter uma experiência rica e responsiva, para entregar essa experiência foi introduzido no C# 5.0 uma nova sintaxe simplificada e direta, anteriormente trabalhar com multithread era uma tarefa complexa que exigia muitas linhas de código, agora neste novo modelo tornou-se simples.&lt;em&gt; …&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;                    </summary>

                    <content type="html">
&lt;p&gt;&lt;span style=&quot;color: #333300;&quot;&gt;Programação Assíncrona é atualmente um dos elementos mais importantes no desenvolvimento de software, um cliente ao navegar por uma aplicação deseja ter uma experiência rica e responsiva, para entregar essa experiência foi introduzido no C# 5.0 uma nova sintaxe simplificada e direta, anteriormente trabalhar com multithread era uma tarefa complexa que exigia muitas linhas de código, agora neste novo modelo tornou-se simples.&lt;em&gt; &lt;/em&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333300;&quot;&gt;Antes de aprender a utilizar a sintaxe do novo modelo de programação assíncrona é muito importante conhecermos quando utilizar programação assíncrona, programação assíncrona é comum ser utilizada ao trabalhar com imagens, arquivos, wcf ou um processo que envolve muita regra de negócio complexa que consequentemente torna-se lento.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333300;&quot;&gt;Abaixo segue uma imagem de um modelo assíncrono evidenciando um ganho de performance de 5 segundos:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://storage.ning.com/topology/rest/1.0/file/get/2230049383?profile=original&quot; target=&quot;_self&quot;&gt;&lt;img src=&quot;http://storage.ning.com/topology/rest/1.0/file/get/2230049383?profile=original&quot; width=&quot;292&quot; class=&quot;align-full&quot;/&gt;&lt;br/&gt;&lt;/a&gt; &lt;span style=&quot;color: #333300;&quot;&gt;Na figura acima, T1 foi executado em paralelo a T2 e T3, como T2 e T3 representam 5 segundos então a execução de T1, T2 e T3 demorou 5 segundos, logo em um processo não assíncrono demoraria 10 segundos porque T2 teria que esperar o retorno de T1.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333300;&quot;&gt;Entendendo na prática, abaixo foi feita uma implementação simples para que possamos entender o conceito, importante notar as palavras reservadas&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;async&lt;/span&gt; &lt;span style=&quot;color: #333300;&quot;&gt;e&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;await&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #333300;&quot;&gt;, onde&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;async&lt;/span&gt;&lt;span style=&quot;color: #333300;&quot;&gt; é utilizada na declaração do método e sua função é apenas habilitar a utilização do poderoso&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;await&lt;/span&gt; &lt;span style=&quot;color: #333300;&quot;&gt;dentro do corpo do método,&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;await &lt;span style=&quot;color: #333300;&quot;&gt;recebe como argumento uma Task que é uma tarefa que pode executar uma ação e diz que essa ação será executada em uma thread isolada independente das demais.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333300;&quot;&gt;No método Main temos a chamada dos métodos de forma estruturada na ordem a seguir: &lt;br/&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333300;&quot;&gt;FazAlgumaCoisa&lt;br/&gt; Soma&lt;br/&gt; Multiplica &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333300;&quot;&gt;Devido o método FazAlgumaCoisa ser assíncrono o método Soma e Multiplicação não precisam esperar o método &lt;span&gt;FazAlgumaCoisa &lt;/span&gt;ter um retorno, podendo rodar paralelo, o resultado da execução dessa implementação é:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333300;&quot;&gt;O resultado da soma é : 20&lt;/span&gt;&lt;br/&gt; &lt;span style=&quot;color: #333300;&quot;&gt;O resultado da multiplicação é : 100&lt;/span&gt;&lt;br/&gt; &lt;span style=&quot;color: #333300;&quot;&gt;FazAlgumacoisa&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #003300;&quot;&gt;Interessante notar que o método FazAlgumaCoisa embora tenha sido chamada primeiro foi executado por último seu processo demorou mais.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;using&lt;/span&gt; System;&lt;br/&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;using&lt;/span&gt; System.Threading.Tasks;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;namespace&lt;/span&gt; DevBrasil&lt;br/&gt; {&lt;br/&gt;       &lt;span style=&quot;color: #0000ff;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;class&lt;/span&gt; &lt;span style=&quot;color: #339966;&quot;&gt;DevBrasil&lt;/span&gt;&lt;br/&gt;       {&lt;br/&gt;             &lt;span style=&quot;color: #0000ff;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;static&lt;/span&gt; void Main()&lt;br/&gt;             {&lt;br/&gt;                  &lt;span style=&quot;color: #0000ff;&quot;&gt;var&lt;/span&gt; result = FazAlgumaCoisa();&lt;br/&gt;                  Soma(&lt;span style=&quot;color: #99cc00;&quot;&gt;10&lt;/span&gt;, &lt;span style=&quot;color: #99cc00;&quot;&gt;10&lt;/span&gt;);&lt;br/&gt;                  Multiplica(&lt;span style=&quot;color: #99cc00;&quot;&gt;10&lt;/span&gt;, &lt;span style=&quot;color: #99cc00;&quot;&gt;10&lt;/span&gt;);&lt;br/&gt;                  &lt;span style=&quot;color: #339966;&quot;&gt;Console&lt;/span&gt;.Read();&lt;br/&gt;              }&lt;/p&gt;
&lt;p&gt;             &lt;span style=&quot;color: #0000ff;&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;static async&lt;/span&gt; &lt;span style=&quot;color: #339966;&quot;&gt;Task&lt;/span&gt; FazAlgumaCoisa()&lt;br/&gt;              {&lt;br/&gt;                  &lt;span style=&quot;color: #0000ff;&quot;&gt;await&lt;/span&gt; &lt;span style=&quot;color: #339966;&quot;&gt;Task&lt;/span&gt;.Delay(&lt;span style=&quot;color: #99cc00;&quot;&gt;1000&lt;/span&gt;);&lt;br/&gt;                  &lt;span style=&quot;color: #339966;&quot;&gt;Console&lt;/span&gt;.WriteLine(&lt;span style=&quot;color: #ff6600;&quot;&gt;&quot;FazAlgumaCoisa&quot;&lt;/span&gt;);&lt;br/&gt;              }&lt;/p&gt;
&lt;p&gt;             &lt;span style=&quot;color: #0000ff;&quot;&gt;private static void&lt;/span&gt; Soma(&lt;span style=&quot;color: #0000ff;&quot;&gt;int&lt;/span&gt; num1, &lt;span style=&quot;color: #0000ff;&quot;&gt;int&lt;/span&gt; num2)&lt;br/&gt;              {&lt;br/&gt;                  &lt;span style=&quot;color: #339966;&quot;&gt;Console&lt;/span&gt;.WriteLine(&lt;span style=&quot;color: #ff6600;&quot;&gt;&quot;O resultado da soma é : {0} &quot;&lt;/span&gt;, num1 + num2);&lt;br/&gt;              }&lt;/p&gt;
&lt;p&gt;             &lt;span style=&quot;color: #0000ff;&quot;&gt;private static void&lt;/span&gt; Multiplica(&lt;span style=&quot;color: #0000ff;&quot;&gt;int&lt;/span&gt; num1, &lt;span style=&quot;color: #0000ff;&quot;&gt;int&lt;/span&gt; num2)&lt;br/&gt;              {&lt;br/&gt;                  &lt;span style=&quot;color: #339966;&quot;&gt;Console&lt;/span&gt;.WriteLine(&lt;span style=&quot;color: #ff6600;&quot;&gt;&quot;O resultado da multiplicacao é : {0} &quot;&lt;/span&gt;, num1 * num2);&lt;br/&gt;              }&lt;br/&gt;       }&lt;br/&gt; }&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Vantagem&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;br/&gt;&lt;/strong&gt; A sintaxe é clara, basicamente constitui de apenas duas palavras reservadas, A palavra reservada await se encarrega de todo o gerenciamento da thread o que facilita o desenvolvimento, antigamente todo o gerenciamento era realizado programaticamente.&lt;/p&gt;
&lt;p&gt;&lt;br/&gt; Neste artigo foi apresentado de forma simples o novo paradigma de desenvolvimento de processos assíncronos existente na linguagem C#. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;strong&gt;&lt;br/&gt; Para saber mais&lt;br/&gt;&lt;/strong&gt; &lt;span&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;http://devbrasil.net/group/cdesenvolvendores&quot; target=&quot;_self&quot;&gt;Aprofunde seu conhecimento sobre C#&lt;/a&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;</content>
<category term="Brasil" />

                                    </entry>
                            <entry>
                    <title>Alavanque as suas vendas com Windows Azure Search  (Preview) - introdução</title>
                    <link rel="alternate" href="http://devbrasil.net/xn/detail/2307362:BlogPost:262085"/>
                                        <id>tag:devbrasil.net,2014-09-14:2307362:BlogPost:262085</id>
                                        <updated>2014-09-14T20:00:00.000Z</updated>
                    
                                            <author>
                            <name>Juliano Sales</name>
                            <uri>http://devbrasil.net/profile/JulianoSales</uri>
                        </author>
                    
                    <summary type="html">
                        &lt;p&gt;O sistema de busca em nossos site e aplicativos não pode ser menosprezados ou um mero detalhe, sabendo utilizá-lo podemos  capturar o comportamento do usuário e gerar números bem expressivos, segundo a pesquisa da &lt;strong&gt;SLI Systems&lt;/strong&gt;, 34% das pessoas que acessam a loja online usam a busca e dessas 43% que não encontram o produto não o procuram mais.&lt;/p&gt;
&lt;div&gt;Porem sabemos o quanto e trabalhoso para  des&lt;/div&gt;
&lt;div&gt;envolvermos sistemas de busca complexos e eficientes e fora a…&lt;/div&gt;                    </summary>

                    <content type="html">
&lt;p&gt;O sistema de busca em nossos site e aplicativos não pode ser menosprezados ou um mero detalhe, sabendo utilizá-lo podemos  capturar o comportamento do usuário e gerar números bem expressivos, segundo a pesquisa da &lt;strong&gt;SLI Systems&lt;/strong&gt;, 34% das pessoas que acessam a loja online usam a busca e dessas 43% que não encontram o produto não o procuram mais.&lt;/p&gt;
&lt;div&gt;Porem sabemos o quanto e trabalhoso para  des&lt;/div&gt;
&lt;div&gt;envolvermos sistemas de busca complexos e eficientes e fora a infraestrutura que temos que montar principalmente quando oferecemos preços e descontos especiais em nossos sites.&lt;/div&gt;
&lt;div&gt;Para não sofremos podemos utilizar a poderosa ferramenta &lt;strong&gt;Windows Azure Search&lt;/strong&gt;.&lt;/div&gt;
&lt;div&gt;A proposta na utilização do &lt;strong&gt;Windows Azure Search&lt;/strong&gt; e adicionar rapidamente recursos de busca em seu aplicativo ou site, sem ter que se preocupar com a complexidade  de  implementar e manter ou gerenciar qualquer infraestrutura.&lt;/div&gt;
&lt;div&gt;Assim como outros serviços do Azure, o serviço de busca utiliza o padrão de chamadas  &lt;strong&gt;REST , &lt;/strong&gt;alem desse grande benefício podemos contar com toda a infraestrutura de data center do Azure isso significa redução de latência de pesquisa.&lt;/div&gt;
&lt;div&gt;Para o serviço de busca funcionar,precisamos  mover os nossos dados para nuvem para que eles sejam indexados.&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;Alguns bons motivos para utilização do Windows Azure Search !&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt; &lt;strong&gt;Simples&lt;/strong&gt;: Serviço totalmente gerenciado na nuvem, simples de configurar,manter e utilizar. Podemos ajustar de forma rápida e fácil os resultados da pesquisa  e as metas de negocio.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Escalável&lt;/strong&gt;: Windows Azure Search e totalmente escalável, com opção para aumentar replicas de armazenamento ou serviço para lidar com cargas maiores de consulta.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Time Is Money&lt;/strong&gt;: Com um sistema de busca eficiente e inteligente podemos facilmente elevar a taxa de conversão e satisfação dos clientes .&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;Configurando o Windows Azure Search:&lt;/div&gt;
&lt;div&gt;&lt;br/&gt; &lt;br/&gt; 1 – Entre no portal &lt;strong&gt; &lt;a href=&quot;https://portal.azure.com&quot;&gt;https://portal.azure.com&lt;/a&gt;&lt;/strong&gt;, clicar no botão &lt;strong&gt;New  &lt;/strong&gt;depois na opção Search como na figura abaixo.&lt;/div&gt;
&lt;div&gt;&lt;br/&gt; &lt;br/&gt; &lt;a href=&quot;http://juliano-sales.net/wp-content/uploads/2014/09/passo-1.jpg&quot;&gt;&lt;img class=&quot;aligncenter size-full wp-image-888&quot; src=&quot;http://juliano-sales.net/wp-content/uploads/2014/09/passo-1.jpg&quot; alt=&quot;passo-1&quot; width=&quot;958&quot; height=&quot;652&quot;/&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;br/&gt; &lt;br/&gt; 2 – Agora precisamos informar algumas informações para criarmos o novo serviço de busca.&lt;/div&gt;
&lt;div&gt;&lt;br/&gt; &lt;br/&gt; &lt;a href=&quot;http://juliano-sales.net/wp-content/uploads/2014/09/passo-2.jpg&quot;&gt;&lt;img class=&quot;aligncenter size-full wp-image-889&quot; src=&quot;http://juliano-sales.net/wp-content/uploads/2014/09/passo-2.jpg&quot; alt=&quot;passo-2&quot; width=&quot;332&quot; height=&quot;629&quot;/&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;br/&gt; &lt;br/&gt; 2.1 - &lt;strong&gt;URL&lt;/strong&gt;  precisamos informar a URL do serviço, evitando utilizarmos espaços e tracos e ficar dentro&lt;/div&gt;
&lt;div&gt;do limite de 15 caracteres.&lt;/div&gt;
&lt;div&gt;&lt;br/&gt; &lt;br/&gt; &lt;a href=&quot;http://juliano-sales.net/wp-content/uploads/2014/09/passo-2-1.jpg&quot;&gt;&lt;img class=&quot;aligncenter size-full wp-image-891&quot; src=&quot;http://juliano-sales.net/wp-content/uploads/2014/09/passo-2-1.jpg&quot; alt=&quot;passo-2-1&quot; width=&quot;318&quot; height=&quot;80&quot;/&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;&lt;br/&gt;&lt;/p&gt;
&lt;div&gt;2.2 - &lt;strong&gt;Pricing Tier&lt;/strong&gt;  agora precisamos acessar o Nível de Preço, temos duas opções standard e a opção free , nesse exemplo podemos utilizar a opção free para prova de conceito porem não e indicado para aplicação de produção.&lt;/div&gt;
&lt;div&gt;&lt;br/&gt; &lt;br/&gt; &lt;a href=&quot;http://juliano-sales.net/wp-content/uploads/2014/09/passo-2-2.jpg&quot;&gt;&lt;img class=&quot;aligncenter size-full wp-image-892&quot; src=&quot;http://juliano-sales.net/wp-content/uploads/2014/09/passo-2-2.jpg&quot; alt=&quot;passo-2-2&quot; width=&quot;945&quot; height=&quot;626&quot;/&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;&lt;br/&gt;&lt;/p&gt;
&lt;div&gt;2.3 - &lt;strong&gt;Resource Group&lt;/strong&gt;  são contêineres e recursos usados para um proposito comum, podemos utilizar essa estrategia para deixar os serviços juntos.&lt;/div&gt;
&lt;div&gt;&lt;br/&gt; &lt;br/&gt; &lt;a href=&quot;http://juliano-sales.net/wp-content/uploads/2014/09/passo-2-3.jpg&quot;&gt;&lt;img class=&quot;aligncenter size-full wp-image-893&quot; src=&quot;http://juliano-sales.net/wp-content/uploads/2014/09/passo-2-3.jpg&quot; alt=&quot;passo-2-3&quot; width=&quot;633&quot; height=&quot;624&quot;/&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;&lt;br/&gt;&lt;/p&gt;
&lt;div&gt;2.4 - &lt;strong&gt;Subscription&lt;/strong&gt; temos a opção de escolhermos outras assinaturas para o serviço de busca.&lt;/div&gt;
&lt;p&gt;&lt;br/&gt;&lt;/p&gt;
&lt;div&gt;&lt;a href=&quot;http://juliano-sales.net/wp-content/uploads/2014/09/passo-2-4.jpg&quot;&gt;&lt;img class=&quot;aligncenter size-full wp-image-894&quot; src=&quot;http://juliano-sales.net/wp-content/uploads/2014/09/passo-2-4.jpg&quot; alt=&quot;passo-2-4&quot; width=&quot;641&quot; height=&quot;629&quot;/&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;&lt;br/&gt;&lt;/p&gt;
&lt;div&gt;2.5 - &lt;strong&gt;Location &lt;/strong&gt; como nos outros serviços do Windows Azure temos a opção de escolhermos a localidade do nosso serviço.&lt;/div&gt;
&lt;div&gt;&lt;br/&gt; &lt;br/&gt; &lt;a href=&quot;http://juliano-sales.net/wp-content/uploads/2014/09/passo-2-5.jpg&quot;&gt;&lt;img class=&quot;aligncenter size-full wp-image-895&quot; src=&quot;http://juliano-sales.net/wp-content/uploads/2014/09/passo-2-5.jpg&quot; alt=&quot;passo-2-5&quot; width=&quot;643&quot; height=&quot;628&quot;/&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;br/&gt; &lt;br/&gt; 2.6 - &lt;strong&gt;Create  &lt;/strong&gt;o botão de criar sera liberado quando todos os campos forem preenchidos corretamente, em poucos minutos, sera criado o serviço.&lt;/div&gt;
&lt;div&gt;&lt;br/&gt; &lt;br/&gt; &lt;a href=&quot;http://juliano-sales.net/wp-content/uploads/2014/09/passo-2-6.jpg&quot;&gt;&lt;img class=&quot;aligncenter wp-image-896&quot; src=&quot;http://juliano-sales.net/wp-content/uploads/2014/09/passo-2-6.jpg&quot; alt=&quot;passo-2-6&quot; width=&quot;258&quot; height=&quot;74&quot;/&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt; Uma vez criado o nosso serviço podemos visualizar como na figura abaixo.&lt;/div&gt;
&lt;div&gt;&lt;br/&gt; &lt;br/&gt; &lt;a href=&quot;http://juliano-sales.net/wp-content/uploads/2014/09/passo-3.jpg&quot;&gt;&lt;img class=&quot;aligncenter size-large wp-image-890&quot; src=&quot;http://juliano-sales.net/wp-content/uploads/2014/09/passo-3-1024x550.jpg&quot; alt=&quot;passo-3&quot; width=&quot;590&quot; height=&quot;316&quot;/&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;br/&gt; &lt;br/&gt; &lt;strong&gt;Conclusão&lt;/strong&gt;: Nesse artigo aprendemos a Importância de sistema de busca, uma breve Introdução ao Windows Azure Search e como configurá-lo.&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;Guia de &lt;/strong&gt;&lt;b&gt;referência&lt;/b&gt; :&lt;br/&gt;&lt;a href=&quot;http://azure.microsoft.com/en-us/services/search/&quot; target=&quot;_blank&quot; shape=&quot;rect&quot;&gt;http://azure.microsoft.com/en-us/services/search/&lt;/a&gt;&lt;/div&gt;</content>
<category term="Brasil" />

                    <link rel="enclosure" href="http://juliano-sales.net/wp-content/uploads/2014/09/passo-1.jpg" type="image/jpeg"/><link rel="enclosure" href="http://juliano-sales.net/wp-content/uploads/2014/09/passo-2.jpg" type="image/jpeg"/><link rel="enclosure" href="http://juliano-sales.net/wp-content/uploads/2014/09/passo-2-1.jpg" type="image/jpeg"/><link rel="enclosure" href="http://juliano-sales.net/wp-content/uploads/2014/09/passo-2-2.jpg" type="image/jpeg"/><link rel="enclosure" href="http://juliano-sales.net/wp-content/uploads/2014/09/passo-2-3.jpg" type="image/jpeg"/><link rel="enclosure" href="http://juliano-sales.net/wp-content/uploads/2014/09/passo-2-4.jpg" type="image/jpeg"/><link rel="enclosure" href="http://juliano-sales.net/wp-content/uploads/2014/09/passo-2-5.jpg" type="image/jpeg"/><link rel="enclosure" href="http://juliano-sales.net/wp-content/uploads/2014/09/passo-2-6.jpg" type="image/jpeg"/><link rel="enclosure" href="http://juliano-sales.net/wp-content/uploads/2014/09/passo-3.jpg" type="image/jpeg"/>                </entry>
                            <entry>
                    <title>Dicas de algoritmos e estruturas de dados parte – 1</title>
                    <link rel="alternate" href="http://devbrasil.net/xn/detail/2307362:BlogPost:258204"/>
                                        <id>tag:devbrasil.net,2014-07-20:2307362:BlogPost:258204</id>
                                        <updated>2014-07-20T20:03:56.000Z</updated>
                    
                                            <author>
                            <name>Juliano Sales</name>
                            <uri>http://devbrasil.net/profile/JulianoSales</uri>
                        </author>
                    
                    <summary type="html">
                        &lt;p&gt;&lt;span&gt;Vamos falar sobre algoritmos e estrutura de dados básicos, para iniciarmos vamos para o seguinte cenário, temos uma lista de nomes não repetidos e temos que implementar um algoritmo que pesquise um determinado nome caso encontre retorne-o:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;table border=&quot;1&quot; cellspacing=&quot;0&quot; width=&quot;100%&quot;&gt;
&lt;tbody&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot;&gt;&lt;strong&gt;Valor&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td valign=&quot;top&quot;&gt;Angelica&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td valign=&quot;top&quot;&gt;Pedro…&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;                    </summary>

                    <content type="html">
&lt;p&gt;&lt;span&gt;Vamos falar sobre algoritmos e estrutura de dados básicos, para iniciarmos vamos para o seguinte cenário, temos uma lista de nomes não repetidos e temos que implementar um algoritmo que pesquise um determinado nome caso encontre retorne-o:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;table width=&quot;100%&quot; border=&quot;1&quot; cellspacing=&quot;0&quot;&gt;
&lt;tbody&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot;&gt;&lt;strong&gt;Valor&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td valign=&quot;top&quot;&gt;Angelica&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td valign=&quot;top&quot;&gt;Pedro&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td valign=&quot;top&quot;&gt;Paulo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td valign=&quot;top&quot;&gt;Almeida&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td valign=&quot;top&quot;&gt;Bruna&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Poderíamos implementar o seguinte passos de um algorítimo para resolver o problema:&lt;/p&gt;
&lt;div style=&quot;margin-left: 2em;&quot;&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt; Recebemos o nome para realizar a pesquisa.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt; Percorremos cada elemento da lista e comparamos se é igual ao nome da  pesquisa  informada.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Se o nome for idênticos, paramos de percorrer a lista e retornamos o nome.&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Esses passos funcionaria eficientemente com uma lista de poucos elementos, agora imagine que essa mesma lista chegue a ter 1 milhão de registros, creio que não seria prudente utilizar os mesmos passos informados, pois imagine a quantidade de tempo que esse algoritmo levaria para achar um nome no meio dessa lista, então podemos dizer que a nossa solução é ineficiente para esse problema.&lt;/p&gt;
&lt;p&gt;Além do problema com o os passos informados podemos observar um outro problema, o problema com a nossa estrutura de dados pois ela armazena apenas o valor.&lt;/p&gt;
&lt;p&gt;A solução para esse problema seria utilizarmos outra estrutura de dados contendo chave e valor.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;table width=&quot;100%&quot; border=&quot;1&quot; cellspacing=&quot;0&quot;&gt;
&lt;tbody&gt;&lt;tr&gt;&lt;td valign=&quot;top&quot;&gt;&lt;span&gt;&lt;strong&gt;Chave&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;&lt;span&gt;&lt;strong&gt;Valor&lt;/strong&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td valign=&quot;top&quot;&gt;&lt;span&gt;1&lt;/span&gt;&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;&lt;span&gt;Angelica&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td valign=&quot;top&quot;&gt;&lt;span&gt;2&lt;/span&gt;&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;&lt;span&gt;Pedro&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td valign=&quot;top&quot;&gt;&lt;span&gt;3&lt;/span&gt;&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;&lt;span&gt;Paulo&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td valign=&quot;top&quot;&gt;&lt;span&gt;4&lt;/span&gt;&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;&lt;span&gt;Almeida&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;&lt;td valign=&quot;top&quot;&gt;&lt;span&gt;5&lt;/span&gt;&lt;/td&gt;
&lt;td valign=&quot;top&quot;&gt;&lt;span&gt;Bruna&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Para essa nova estrutura de dados vamos fazer algumas modificações nos passos que utilizamos em nossa primeira solução:&lt;/span&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Recebemos o valor para realizar a pesquisa&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Convertemos o valor da pesquisa em um numero&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pegamos esse numero gerado e pesquisamos pela chave da estrutura&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Caso a chave exista retornaríamos o valor encontrado&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Com essas modificações, não precisaríamos percorrer a nossa estrutura para localizarmos o valor pois teríamos a chave do valor informado, nos exemplos que abordei falamos apenas de pesquisa, porém no próximo post  iremos desenvolver toda as operações para pesquisar,adicionar e  excluir os elementos na lista.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Conclusão:&lt;/strong&gt; Muitas vezes o problema não está na nossa implementação e sim na estrutura que estamos utilizando. Uma frase do Linus Torvalds que cabe perfeitamente nesse post &lt;strong&gt;&lt;em&gt;“Maus programadores se preocupam com o código. Bons programadores se preocupam com a estrutura dos dados e seus relacionamentos.”&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Guia de referência:&lt;/strong&gt; Livro - Algoritmos O Guia Essência&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;</content>
<category term="Brasil" />

                                    </entry>
                            <entry>
                    <title>Mensageria usando MSMQ</title>
                    <link rel="alternate" href="http://devbrasil.net/xn/detail/2307362:BlogPost:258092"/>
                                        <id>tag:devbrasil.net,2014-07-16:2307362:BlogPost:258092</id>
                                        <updated>2014-07-16T01:30:00.000Z</updated>
                    
                                            <author>
                            <name>Juliano Sales</name>
                            <uri>http://devbrasil.net/profile/JulianoSales</uri>
                        </author>
                    
                    <summary type="html">
                        &lt;p&gt;Vamos falar sobre o poder da mensageria usando MSMQ, antes de iniciarmos o desenvolvimento caso você não conheça o MSMQ é indispensável acessar o &lt;a href=&quot;http://elemarjr.net/2012/01/25/trocando-mensagens-entre-aplicaes-usando-msmq-usando-c/&quot; target=&quot;_blank&quot;&gt;link&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Nota: Quando criarmos a fila e necessário marcar a opção transacional&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Agora Vamos imaginar que temos uma aplicação que recebe milhares de cadastro por dia, e a cada…&lt;/p&gt;                    </summary>

                    <content type="html">
&lt;p&gt;Vamos falar sobre o poder da mensageria usando MSMQ, antes de iniciarmos o desenvolvimento caso você não conheça o MSMQ é indispensável acessar o &lt;a href=&quot;http://elemarjr.net/2012/01/25/trocando-mensagens-entre-aplicaes-usando-msmq-usando-c/&quot; target=&quot;_blank&quot;&gt;link&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Nota: Quando criarmos a fila e necessário marcar a opção transacional&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Agora Vamos imaginar que temos uma aplicação que recebe milhares de cadastro por dia, e a cada cadastro nossa aplicação deve enviar um e-mail desejando as boas-vindas para esse novo usuário.&lt;/p&gt;
&lt;p&gt;O cadastro será feita de forma automática, quando o usuário enviar os dados eles serão persistido na base de dados, porém o envio do e-mail será feita de uma forma off-line, assim que o usuário realizar o cadastro a nossa aplicação enviara para o MSMQ.&lt;/p&gt;
&lt;p&gt;E uma determinada rotina pegara a mensagem da fila e enviara o e-mail.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Definindo uma arquitetura básica de gerenciamento de Fila &lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://juliano-sales.net/wp-content/uploads/2014/01/fila1.jpg&quot;&gt;&lt;img class=&quot;aligncenter size-full wp-image-835&quot; alt=&quot;fila&quot; src=&quot;http://juliano-sales.net/wp-content/uploads/2014/01/fila1.jpg&quot; width=&quot;651&quot; height=&quot;425&quot;/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Vamos a implementação da nossa classe Gerenciador de fila Base&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;div id=&quot;highlighter_768087&quot; class=&quot;syntaxhighlighter csharp&quot;&gt;&lt;div class=&quot;toolbar&quot;&gt;&lt;span&gt;&lt;a href=&quot;http://juliano-sales.net/2014/01/mensageria-usando-msmq/#&quot; class=&quot;toolbar_item command_help help&quot;&gt; &lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;table border=&quot;0&quot; cellspacing=&quot;0&quot;&gt;
&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;div class=&quot;line number1 index0 alt2&quot;&gt;1&lt;/div&gt;
&lt;div class=&quot;line number2 index1 alt1&quot;&gt;2&lt;/div&gt;
&lt;div class=&quot;line number3 index2 alt2&quot;&gt;3&lt;/div&gt;
&lt;div class=&quot;line number4 index3 alt1&quot;&gt;4&lt;/div&gt;
&lt;div class=&quot;line number5 index4 alt2&quot;&gt;5&lt;/div&gt;
&lt;div class=&quot;line number6 index5 alt1&quot;&gt;6&lt;/div&gt;
&lt;div class=&quot;line number7 index6 alt2&quot;&gt;7&lt;/div&gt;
&lt;div class=&quot;line number8 index7 alt1&quot;&gt;8&lt;/div&gt;
&lt;div class=&quot;line number9 index8 alt2&quot;&gt;9&lt;/div&gt;
&lt;div class=&quot;line number10 index9 alt1&quot;&gt;10&lt;/div&gt;
&lt;div class=&quot;line number11 index10 alt2&quot;&gt;11&lt;/div&gt;
&lt;div class=&quot;line number12 index11 alt1&quot;&gt;12&lt;/div&gt;
&lt;div class=&quot;line number13 index12 alt2&quot;&gt;13&lt;/div&gt;
&lt;div class=&quot;line number14 index13 alt1&quot;&gt;14&lt;/div&gt;
&lt;div class=&quot;line number15 index14 alt2&quot;&gt;15&lt;/div&gt;
&lt;div class=&quot;line number16 index15 alt1&quot;&gt;16&lt;/div&gt;
&lt;div class=&quot;line number17 index16 alt2&quot;&gt;17&lt;/div&gt;
&lt;div class=&quot;line number18 index17 alt1&quot;&gt;18&lt;/div&gt;
&lt;div class=&quot;line number19 index18 alt2&quot;&gt;19&lt;/div&gt;
&lt;div class=&quot;line number20 index19 alt1&quot;&gt;20&lt;/div&gt;
&lt;div class=&quot;line number21 index20 alt2&quot;&gt;21&lt;/div&gt;
&lt;div class=&quot;line number22 index21 alt1&quot;&gt;22&lt;/div&gt;
&lt;div class=&quot;line number23 index22 alt2&quot;&gt;23&lt;/div&gt;
&lt;div class=&quot;line number24 index23 alt1&quot;&gt;24&lt;/div&gt;
&lt;div class=&quot;line number25 index24 alt2&quot;&gt;25&lt;/div&gt;
&lt;div class=&quot;line number26 index25 alt1&quot;&gt;26&lt;/div&gt;
&lt;div class=&quot;line number27 index26 alt2&quot;&gt;27&lt;/div&gt;
&lt;div class=&quot;line number28 index27 alt1&quot;&gt;28&lt;/div&gt;
&lt;div class=&quot;line number29 index28 alt2&quot;&gt;29&lt;/div&gt;
&lt;div class=&quot;line number30 index29 alt1&quot;&gt;30&lt;/div&gt;
&lt;div class=&quot;line number31 index30 alt2&quot;&gt;31&lt;/div&gt;
&lt;/td&gt;
&lt;td class=&quot;code&quot;&gt;&lt;div class=&quot;container&quot;&gt;&lt;div class=&quot;line number1 index0 alt2&quot;&gt;&lt;code class=&quot;csharp keyword&quot;&gt;public&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;abstract&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;class&lt;/code&gt; &lt;code class=&quot;csharp plain&quot;&gt;GerenciadorFilaBase&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number2 index1 alt1&quot;&gt;&lt;code class=&quot;csharp plain&quot;&gt;{&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number3 index2 alt2&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;       &lt;/code&gt;&lt;code class=&quot;csharp keyword&quot;&gt;protected&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;abstract&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;string&lt;/code&gt; &lt;code class=&quot;csharp plain&quot;&gt;CaminhoFilaBase {&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;get&lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;; }&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number4 index3 alt1&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;       &lt;/code&gt;&lt;code class=&quot;csharp keyword&quot;&gt;protected&lt;/code&gt; &lt;code class=&quot;csharp plain&quot;&gt;MessageQueueTransaction MessageQueueTransaction {&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;get&lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;;&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;set&lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;; }&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number5 index4 alt2&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;       &lt;/code&gt;&lt;code class=&quot;csharp keyword&quot;&gt;private&lt;/code&gt; &lt;code class=&quot;csharp plain&quot;&gt;MessageQueue MsmQBase()&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number6 index5 alt1&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;       &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;{&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number7 index6 alt2&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;           &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;var msmq =&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;new&lt;/code&gt; &lt;code class=&quot;csharp plain&quot;&gt;MessageQueue(CaminhoFilaBase);&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number8 index7 alt1&quot;&gt; &lt;/div&gt;
&lt;div class=&quot;line number9 index8 alt2&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;           &lt;/code&gt;&lt;code class=&quot;csharp keyword&quot;&gt;if&lt;/code&gt; &lt;code class=&quot;csharp plain&quot;&gt;(MessageQueue.Exists(CaminhoFilaBase))&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number10 index9 alt1&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;           &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;{&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number11 index10 alt2&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;               &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;msmq.Formatter =&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;new&lt;/code&gt; &lt;code class=&quot;csharp plain&quot;&gt;BinaryMessageFormatter();&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number12 index11 alt1&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;               &lt;/code&gt;&lt;code class=&quot;csharp keyword&quot;&gt;return&lt;/code&gt; &lt;code class=&quot;csharp plain&quot;&gt;msmq;&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number13 index12 alt2&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;           &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;}&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number14 index13 alt1&quot;&gt; &lt;/div&gt;
&lt;div class=&quot;line number15 index14 alt2&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;           &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;msmq = MessageQueue.Create(CaminhoFilaBase,&lt;/code&gt;&lt;code class=&quot;csharp keyword&quot;&gt;true&lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;);&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number16 index15 alt1&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;           &lt;/code&gt;&lt;code class=&quot;csharp keyword&quot;&gt;return&lt;/code&gt; &lt;code class=&quot;csharp plain&quot;&gt;msmq;&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number17 index16 alt2&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;       &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;}&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number18 index17 alt1&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;       &lt;/code&gt;&lt;code class=&quot;csharp keyword&quot;&gt;protected&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;void&lt;/code&gt; &lt;code class=&quot;csharp plain&quot;&gt;AdicionarProximoElemento(&lt;/code&gt;&lt;code class=&quot;csharp keyword&quot;&gt;object&lt;/code&gt; &lt;code class=&quot;csharp plain&quot;&gt;objeto)&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number19 index18 alt2&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;       &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;{&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number20 index19 alt1&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;           &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;MsmQBase().Send(objeto, MessageQueueTransaction);&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number21 index20 alt2&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;       &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;}&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number22 index21 alt1&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;       &lt;/code&gt;&lt;code class=&quot;csharp keyword&quot;&gt;protected&lt;/code&gt; &lt;code class=&quot;csharp plain&quot;&gt;T RemoverProximoElemento&amp;lt;T&amp;gt;()&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number23 index22 alt2&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;       &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;{&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number24 index23 alt1&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;           &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;var proximoElemento = MsmQBase().Receive(MessageQueueTransaction).Body;&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number25 index24 alt2&quot;&gt; &lt;/div&gt;
&lt;div class=&quot;line number26 index25 alt1&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;           &lt;/code&gt;&lt;code class=&quot;csharp keyword&quot;&gt;return&lt;/code&gt; &lt;code class=&quot;csharp plain&quot;&gt;(T)proximoElemento;&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number27 index26 alt2&quot;&gt; &lt;/div&gt;
&lt;div class=&quot;line number28 index27 alt1&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;       &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;}&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number29 index28 alt2&quot;&gt; &lt;/div&gt;
&lt;div class=&quot;line number30 index29 alt1&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;       &lt;/code&gt;&lt;code class=&quot;csharp keyword&quot;&gt;public&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;abstract&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;void&lt;/code&gt; &lt;code class=&quot;csharp plain&quot;&gt;Processar();&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number31 index30 alt2&quot;&gt;&lt;code class=&quot;csharp plain&quot;&gt;}&lt;/code&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;b&gt; &lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Implementação da nossa classe Usuario&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;&lt;div id=&quot;highlighter_196463&quot; class=&quot;syntaxhighlighter csharp&quot;&gt;&lt;div class=&quot;toolbar&quot;&gt;&lt;span&gt;&lt;a href=&quot;http://juliano-sales.net/2014/01/mensageria-usando-msmq/#&quot; class=&quot;toolbar_item command_help help&quot;&gt; &lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;table border=&quot;0&quot; cellspacing=&quot;0&quot;&gt;
&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;div class=&quot;line number1 index0 alt2&quot;&gt;1&lt;/div&gt;
&lt;div class=&quot;line number2 index1 alt1&quot;&gt;2&lt;/div&gt;
&lt;div class=&quot;line number3 index2 alt2&quot;&gt;3&lt;/div&gt;
&lt;div class=&quot;line number4 index3 alt1&quot;&gt;4&lt;/div&gt;
&lt;div class=&quot;line number5 index4 alt2&quot;&gt;5&lt;/div&gt;
&lt;div class=&quot;line number6 index5 alt1&quot;&gt;6&lt;/div&gt;
&lt;/td&gt;
&lt;td class=&quot;code&quot;&gt;&lt;div class=&quot;container&quot;&gt;&lt;div class=&quot;line number1 index0 alt2&quot;&gt;&lt;code class=&quot;csharp plain&quot;&gt; [SerializableAttribute]&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number2 index1 alt1&quot;&gt;&lt;code class=&quot;csharp keyword&quot;&gt; public&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;class&lt;/code&gt; &lt;code class=&quot;csharp plain&quot;&gt;Usuario&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number3 index2 alt2&quot;&gt;&lt;code class=&quot;csharp plain&quot;&gt; {&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number4 index3 alt1&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;    &lt;/code&gt;&lt;code class=&quot;csharp keyword&quot;&gt;public&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;string&lt;/code&gt; &lt;code class=&quot;csharp plain&quot;&gt;Nome {&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;get&lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;;&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;set&lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;; }&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number5 index4 alt2&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;    &lt;/code&gt;&lt;code class=&quot;csharp keyword&quot;&gt;public&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;string&lt;/code&gt; &lt;code class=&quot;csharp plain&quot;&gt;Email {&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;get&lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;;&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;set&lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;; }&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number6 index5 alt1&quot;&gt;&lt;code class=&quot;csharp plain&quot;&gt; }&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number6 index5 alt1&quot;&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Vamos a implementação da nossa classe Email Fila&lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;div id=&quot;highlighter_71266&quot; class=&quot;syntaxhighlighter csharp&quot;&gt;&lt;div class=&quot;toolbar&quot;&gt;&lt;span&gt;&lt;a href=&quot;http://juliano-sales.net/2014/01/mensageria-usando-msmq/#&quot; class=&quot;toolbar_item command_help help&quot;&gt; &lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;toolbar&quot;&gt;&lt;/div&gt;
&lt;table border=&quot;0&quot; cellspacing=&quot;0&quot;&gt;
&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;div class=&quot;line number1 index0 alt2&quot;&gt;1&lt;/div&gt;
&lt;div class=&quot;line number2 index1 alt1&quot;&gt;2&lt;/div&gt;
&lt;div class=&quot;line number3 index2 alt2&quot;&gt;3&lt;/div&gt;
&lt;div class=&quot;line number4 index3 alt1&quot;&gt;4&lt;/div&gt;
&lt;div class=&quot;line number5 index4 alt2&quot;&gt;5&lt;/div&gt;
&lt;div class=&quot;line number6 index5 alt1&quot;&gt;6&lt;/div&gt;
&lt;div class=&quot;line number7 index6 alt2&quot;&gt;7&lt;/div&gt;
&lt;div class=&quot;line number8 index7 alt1&quot;&gt;8&lt;/div&gt;
&lt;div class=&quot;line number9 index8 alt2&quot;&gt;9&lt;/div&gt;
&lt;div class=&quot;line number10 index9 alt1&quot;&gt;10&lt;/div&gt;
&lt;div class=&quot;line number11 index10 alt2&quot;&gt;11&lt;/div&gt;
&lt;div class=&quot;line number12 index11 alt1&quot;&gt;12&lt;/div&gt;
&lt;div class=&quot;line number13 index12 alt2&quot;&gt;13&lt;/div&gt;
&lt;div class=&quot;line number14 index13 alt1&quot;&gt;14&lt;/div&gt;
&lt;div class=&quot;line number15 index14 alt2&quot;&gt;15&lt;/div&gt;
&lt;div class=&quot;line number16 index15 alt1&quot;&gt;16&lt;/div&gt;
&lt;div class=&quot;line number17 index16 alt2&quot;&gt;17&lt;/div&gt;
&lt;div class=&quot;line number18 index17 alt1&quot;&gt;18&lt;/div&gt;
&lt;div class=&quot;line number19 index18 alt2&quot;&gt;19&lt;/div&gt;
&lt;div class=&quot;line number20 index19 alt1&quot;&gt;20&lt;/div&gt;
&lt;div class=&quot;line number21 index20 alt2&quot;&gt;21&lt;/div&gt;
&lt;div class=&quot;line number22 index21 alt1&quot;&gt;22&lt;/div&gt;
&lt;div class=&quot;line number23 index22 alt2&quot;&gt;23&lt;/div&gt;
&lt;div class=&quot;line number24 index23 alt1&quot;&gt;24&lt;/div&gt;
&lt;div class=&quot;line number25 index24 alt2&quot;&gt;25&lt;/div&gt;
&lt;div class=&quot;line number26 index25 alt1&quot;&gt;26&lt;/div&gt;
&lt;div class=&quot;line number27 index26 alt2&quot;&gt;27&lt;/div&gt;
&lt;div class=&quot;line number28 index27 alt1&quot;&gt;28&lt;/div&gt;
&lt;div class=&quot;line number29 index28 alt2&quot;&gt;29&lt;/div&gt;
&lt;div class=&quot;line number30 index29 alt1&quot;&gt;30&lt;/div&gt;
&lt;div class=&quot;line number31 index30 alt2&quot;&gt;31&lt;/div&gt;
&lt;div class=&quot;line number32 index31 alt1&quot;&gt;32&lt;/div&gt;
&lt;div class=&quot;line number33 index32 alt2&quot;&gt;33&lt;/div&gt;
&lt;div class=&quot;line number34 index33 alt1&quot;&gt;34&lt;/div&gt;
&lt;div class=&quot;line number35 index34 alt2&quot;&gt;35&lt;/div&gt;
&lt;div class=&quot;line number36 index35 alt1&quot;&gt;36&lt;/div&gt;
&lt;div class=&quot;line number37 index36 alt2&quot;&gt;37 &lt;/div&gt;
&lt;div class=&quot;line number38 index37 alt1&quot;&gt;38&lt;/div&gt;
&lt;div class=&quot;line number39 index38 alt2&quot;&gt;39&lt;/div&gt;
&lt;div class=&quot;line number40 index39 alt1&quot;&gt;40&lt;/div&gt;
&lt;div class=&quot;line number41 index40 alt2&quot;&gt;41&lt;/div&gt;
&lt;div class=&quot;line number42 index41 alt1&quot;&gt;42&lt;/div&gt;
&lt;div class=&quot;line number43 index42 alt2&quot;&gt;43&lt;/div&gt;
&lt;div class=&quot;line number44 index43 alt1&quot;&gt;44&lt;/div&gt;
&lt;div class=&quot;line number45 index44 alt2&quot;&gt;45&lt;/div&gt;
&lt;div class=&quot;line number46 index45 alt1&quot;&gt;46&lt;/div&gt;
&lt;/td&gt;
&lt;td class=&quot;code&quot;&gt;&lt;div class=&quot;container&quot;&gt;&lt;div class=&quot;line number1 index0 alt2&quot;&gt;&lt;code class=&quot;csharp keyword&quot;&gt;public&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;class&lt;/code&gt; &lt;code class=&quot;csharp plain&quot;&gt;EmailFila : GerenciadorFilaBase&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number2 index1 alt1&quot;&gt;&lt;code class=&quot;csharp plain&quot;&gt;{&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number3 index2 alt2&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;        &lt;/code&gt;&lt;code class=&quot;csharp keyword&quot;&gt;protected&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;override&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;string&lt;/code&gt; &lt;code class=&quot;csharp plain&quot;&gt;CaminhoFilaBase&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number4 index3 alt1&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;        &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;{&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number5 index4 alt2&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;            &lt;/code&gt;&lt;code class=&quot;csharp keyword&quot;&gt;get&lt;/code&gt; &lt;code class=&quot;csharp plain&quot;&gt;{&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;return&lt;/code&gt; &lt;code class=&quot;csharp string&quot;&gt;@&quot;.\private$\email&quot;&lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;; }&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number6 index5 alt1&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;        &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;}&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number7 index6 alt2&quot;&gt; &lt;/div&gt;
&lt;div class=&quot;line number8 index7 alt1&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;        &lt;/code&gt;&lt;code class=&quot;csharp keyword&quot;&gt;public&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;void&lt;/code&gt; &lt;code class=&quot;csharp plain&quot;&gt;AdicionarEmailFila(Usuario usuario)&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number9 index8 alt2&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;        &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;{&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number10 index9 alt1&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;            &lt;/code&gt;&lt;code class=&quot;csharp keyword&quot;&gt;using&lt;/code&gt; &lt;code class=&quot;csharp plain&quot;&gt;(MessageQueueTransaction =&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;new&lt;/code&gt; &lt;code class=&quot;csharp plain&quot;&gt;MessageQueueTransaction())&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number11 index10 alt2&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;            &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;{&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number12 index11 alt1&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;                &lt;/code&gt;&lt;code class=&quot;csharp keyword&quot;&gt;try&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number13 index12 alt2&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;                &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;{&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number14 index13 alt1&quot;&gt; &lt;/div&gt;
&lt;div class=&quot;line number15 index14 alt2&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;                    &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;MessageQueueTransaction.Begin();&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number16 index15 alt1&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;                    &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;AdicionarProximoElemento(usuario);&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number17 index16 alt2&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;                    &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;MessageQueueTransaction.Commit();&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number18 index17 alt1&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;                &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;}&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number19 index18 alt2&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;                &lt;/code&gt;&lt;code class=&quot;csharp keyword&quot;&gt;catch&lt;/code&gt; &lt;code class=&quot;csharp plain&quot;&gt;(Exception)&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number20 index19 alt1&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;                &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;{&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number21 index20 alt2&quot;&gt; &lt;/div&gt;
&lt;div class=&quot;line number22 index21 alt1&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;                    &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;MessageQueueTransaction.Abort();&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number23 index22 alt2&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;                &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;}&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number24 index23 alt1&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;            &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;}&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number25 index24 alt2&quot;&gt; &lt;/div&gt;
&lt;div class=&quot;line number26 index25 alt1&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;        &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;}&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number27 index26 alt2&quot;&gt; &lt;/div&gt;
&lt;div class=&quot;line number28 index27 alt1&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;        &lt;/code&gt;&lt;code class=&quot;csharp keyword&quot;&gt;public&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;override&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;void&lt;/code&gt; &lt;code class=&quot;csharp plain&quot;&gt;Processar()&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number29 index28 alt2&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;        &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;{&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number30 index29 alt1&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;            &lt;/code&gt;&lt;code class=&quot;csharp keyword&quot;&gt;using&lt;/code&gt; &lt;code class=&quot;csharp plain&quot;&gt;(MessageQueueTransaction =&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;new&lt;/code&gt; &lt;code class=&quot;csharp plain&quot;&gt;MessageQueueTransaction())&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number31 index30 alt2&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;            &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;{&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number32 index31 alt1&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;                &lt;/code&gt;&lt;code class=&quot;csharp keyword&quot;&gt;try&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number33 index32 alt2&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;                &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;{&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number34 index33 alt1&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;                    &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;MessageQueueTransaction.Begin();&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number35 index34 alt2&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;                    &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;var proximoElemento = RemoverProximoElemento&amp;lt;Usuario&amp;gt;();&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number36 index35 alt1&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;                    &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;Console.WriteLine(&lt;/code&gt;&lt;code class=&quot;csharp string&quot;&gt;&quot;Nome:{0}\nEmail:{1}&quot;&lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;, proximoElemento.Nome, proximoElemento.Email);&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number37 index36 alt2&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;                    &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;MessageQueueTransaction.Commit();&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number38 index37 alt1&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;                &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;}&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number39 index38 alt2&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;                &lt;/code&gt;&lt;code class=&quot;csharp keyword&quot;&gt;catch&lt;/code&gt; &lt;code class=&quot;csharp plain&quot;&gt;(Exception)&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number40 index39 alt1&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;                &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;{&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number41 index40 alt2&quot;&gt; &lt;/div&gt;
&lt;div class=&quot;line number42 index41 alt1&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;                    &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;MessageQueueTransaction.Abort();&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number43 index42 alt2&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;                &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;}&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number44 index43 alt1&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;            &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;}&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number45 index44 alt2&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;        &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;}&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number46 index45 alt1&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt; &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;}&lt;/code&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Vamos examinar o código da classe acima, temos que implementar alguns atributos e métodos, uns deles é o &lt;b&gt;CaminhoFilaBase&lt;/b&gt; nesse atributo precisamos informar o caminho da fila.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;O método &lt;b&gt;AdicionarEmailFila &lt;/b&gt;recebe por parâmetro um classe &lt;b&gt;Usuario, &lt;/b&gt;com essa classe o método chama o &lt;b&gt;AdicionarProximoElemento&lt;/b&gt; da classe base e adiciona o elemento na fila com o formato do corpo em binário, e para garantir a integridade estamos realizando a operação de forma transacional.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://juliano-sales.net/wp-content/uploads/2014/01/elemento-fila-binaria.jpg&quot;&gt;&lt;img class=&quot;aligncenter size-full wp-image-838&quot; alt=&quot;elemento-fila-binaria&quot; src=&quot;http://juliano-sales.net/wp-content/uploads/2014/01/elemento-fila-binaria.jpg&quot; width=&quot;1003&quot; height=&quot;720&quot;/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;O método &lt;b&gt;Processar&lt;/b&gt; é responsável por remover o nosso objeto da fila e enviar o e-mail, &lt;b&gt;nesse exemplo não implementamos o código responsável que envia o e-mail.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Implementação da classe E-mail fila Test responsável por realizar o teste &lt;/b&gt;&lt;/p&gt;
&lt;div&gt;&lt;div id=&quot;highlighter_162176&quot; class=&quot;syntaxhighlighter csharp&quot;&gt;&lt;div class=&quot;toolbar&quot;&gt;&lt;span&gt;&lt;a href=&quot;http://juliano-sales.net/2014/01/mensageria-usando-msmq/#&quot; class=&quot;toolbar_item command_help help&quot;&gt; &lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;table border=&quot;0&quot; cellspacing=&quot;0&quot;&gt;
&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;div class=&quot;line number1 index0 alt2&quot;&gt;1&lt;/div&gt;
&lt;div class=&quot;line number2 index1 alt1&quot;&gt;2&lt;/div&gt;
&lt;div class=&quot;line number3 index2 alt2&quot;&gt;3&lt;/div&gt;
&lt;div class=&quot;line number4 index3 alt1&quot;&gt;4&lt;/div&gt;
&lt;div class=&quot;line number5 index4 alt2&quot;&gt;5&lt;/div&gt;
&lt;div class=&quot;line number6 index5 alt1&quot;&gt;6&lt;/div&gt;
&lt;div class=&quot;line number7 index6 alt2&quot;&gt;7&lt;/div&gt;
&lt;div class=&quot;line number8 index7 alt1&quot;&gt;8&lt;/div&gt;
&lt;div class=&quot;line number9 index8 alt2&quot;&gt;9&lt;/div&gt;
&lt;div class=&quot;line number10 index9 alt1&quot;&gt;10&lt;/div&gt;
&lt;div class=&quot;line number11 index10 alt2&quot;&gt;11&lt;/div&gt;
&lt;div class=&quot;line number12 index11 alt1&quot;&gt;12&lt;/div&gt;
&lt;div class=&quot;line number13 index12 alt2&quot;&gt;13&lt;/div&gt;
&lt;div class=&quot;line number14 index13 alt1&quot;&gt;14&lt;/div&gt;
&lt;div class=&quot;line number15 index14 alt2&quot;&gt;15&lt;/div&gt;
&lt;div class=&quot;line number16 index15 alt1&quot;&gt;16&lt;/div&gt;
&lt;/td&gt;
&lt;td class=&quot;code&quot;&gt;&lt;div class=&quot;container&quot;&gt;&lt;div class=&quot;line number1 index0 alt2&quot;&gt;&lt;code class=&quot;csharp plain&quot;&gt;[TestClass]&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number2 index1 alt1&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;  &lt;/code&gt;&lt;code class=&quot;csharp keyword&quot;&gt;public&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;class&lt;/code&gt; &lt;code class=&quot;csharp plain&quot;&gt;EmailFilaTest&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number3 index2 alt2&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;  &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;{&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number4 index3 alt1&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;      &lt;/code&gt;&lt;code class=&quot;csharp keyword&quot;&gt;private&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;readonly&lt;/code&gt; &lt;code class=&quot;csharp plain&quot;&gt;EmailFila _emailFila =&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;new&lt;/code&gt; &lt;code class=&quot;csharp plain&quot;&gt;EmailFila();&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number5 index4 alt2&quot;&gt; &lt;/div&gt;
&lt;div class=&quot;line number6 index5 alt1&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;      &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;[TestMethod]&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number7 index6 alt2&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;      &lt;/code&gt;&lt;code class=&quot;csharp keyword&quot;&gt;public&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;void&lt;/code&gt; &lt;code class=&quot;csharp plain&quot;&gt;Deve_adicionar_um_elemento_na_fila()&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number8 index7 alt1&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;      &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;{&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number9 index8 alt2&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;          &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;_emailFila.AdicionarEmailFila(&lt;/code&gt;&lt;code class=&quot;csharp keyword&quot;&gt;new&lt;/code&gt; &lt;code class=&quot;csharp plain&quot;&gt;Usuario() { Nome =&lt;/code&gt; &lt;code class=&quot;csharp string&quot;&gt;&quot;Juliano Sales&quot;&lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;, Email =&lt;/code&gt; &lt;code class=&quot;csharp string&quot;&gt;&quot;juliano.salesg@gmail.com&quot;&lt;/code&gt; &lt;code class=&quot;csharp plain&quot;&gt;});&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number10 index9 alt1&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;      &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;}&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number11 index10 alt2&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;      &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;[TestMethod]&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number12 index11 alt1&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;      &lt;/code&gt;&lt;code class=&quot;csharp keyword&quot;&gt;public&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;void&lt;/code&gt; &lt;code class=&quot;csharp plain&quot;&gt;Deve_processar_o_proximo_elemento_da_fila()&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number13 index12 alt2&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;      &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;{&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number14 index13 alt1&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;          &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;_emailFila.Processar();&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number15 index14 alt2&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;      &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;}&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number16 index15 alt1&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;  &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;}&lt;/code&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Conclusão: &lt;/strong&gt;Com essa abordagem podemos diminuir drasticamente o processamento da nossa aplicação, sempre que tivermos um problema como o apresentado nesse post, podemos utilizar a mesma abordagem, até a próxima pessoal.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div class=&quot;line number31 index30 alt2&quot;&gt;&lt;div class=&quot;line number6 index5 alt1&quot;&gt;&lt;div class=&quot;line number46 index45 alt1&quot;&gt;&lt;div class=&quot;line number16 index15 alt1&quot;&gt;&lt;/div&gt;
&lt;div class=&quot;line number16 index15 alt1&quot;&gt;&lt;p&gt;&lt;b&gt;Links Uteis: &lt;a href=&quot;http://www.linhadecodigo.com.br/artigo/1386/msmq-tem-mensagem-pra-voce.aspx&quot; target=&quot;_blank&quot;&gt;Mauro Zamaro - MSMQ: Tem mensagem pra você!&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Guia de referência: &lt;a href=&quot;http://elemarjr.net/2012/01/25/trocando-mensagens-entre-aplicaes-usando-msmq-usando-c/&quot; target=&quot;_blank&quot;&gt;http://elemarjr.net/2012/01/25/trocando-mensagens-entre-aplicaes-usando-msmq-usando-c/&lt;/a&gt;, &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/ms711472(v=vs.85).aspx&quot; target=&quot;_blank&quot;&gt;Message Queuing&lt;/a&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;http://knockoutjs.com/&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</content>
<category term="Brasil" />

                    <link rel="enclosure" href="http://juliano-sales.net/wp-content/uploads/2014/01/fila1.jpg" type="image/jpeg"/><link rel="enclosure" href="http://juliano-sales.net/wp-content/uploads/2014/01/elemento-fila-binaria.jpg" type="image/jpeg"/>                </entry>
                            <entry>
                    <title>Ferramentas para testar consultas LINQ.</title>
                    <link rel="alternate" href="http://devbrasil.net/xn/detail/2307362:BlogPost:255868"/>
                                        <id>tag:devbrasil.net,2014-04-17:2307362:BlogPost:255868</id>
                                        <updated>2014-04-17T03:13:21.000Z</updated>
                    
                                            <author>
                            <name>Vinicius Roberto de O. Santos</name>
                            <uri>http://devbrasil.net/profile/viniciusoliveira</uri>
                        </author>
                    
                    <summary type="html">
                        &lt;p&gt;&lt;span&gt;En&lt;/span&gt;&lt;span&gt;quanto Visual Studio oferece muito em relação ao suporte ao LINQ, há uma série de ferramentas em sua maioria livres que irá nos auxiliar e ajudar a testar as nossas consultas LINQ, as ferramentas abaixo são interessantes para desenvolvedores que estão iniciando e conhecendo LINQ.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;font-size-3&quot;&gt;&lt;strong&gt;Ferramentas:…&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;                    </summary>

                    <content type="html">
&lt;p&gt;&lt;span&gt;En&lt;/span&gt;&lt;span&gt;quanto Visual Studio oferece muito em relação ao suporte ao LINQ, há uma série de ferramentas em sua maioria livres que irá nos auxiliar e ajudar a testar as nossas consultas LINQ, as ferramentas abaixo são interessantes para desenvolvedores que estão iniciando e conhecendo LINQ.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;font-size-3&quot;&gt;&lt;strong&gt;Ferramentas:&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;strong&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;http://msdn.microsoft.com/en-us/library/ms181091.aspx&quot; target=&quot;_blank&quot;&gt;SQL Server Profiler&lt;/a&gt;&lt;/strong&gt; - Ferramentas de gerenciamento do SQL Server que permite que você monitore todos os comando submetidos ao banco de dados.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;br/&gt;&lt;span&gt;&lt;strong&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;http://www.linqpad.net/&quot; target=&quot;_blank&quot;&gt;LINQPad&lt;/a&gt;&lt;/strong&gt; - livre, uma ótima ferramenta para testar e prototipar consultas LINQ.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;strong&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;http://code.msdn.microsoft.com/csharpsamples&quot; target=&quot;_blank&quot;&gt;LINQ to SQL Visualizer&lt;/a&gt;&lt;/strong&gt; - Permite visualize as consultas que serão emitidas com base no seu LINQ to SQL Query. Você também pode modificar o SQL gerado e visualizar os resultados.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;br/&gt;&lt;span&gt;&lt;strong&gt;&lt;a rel=&quot;nofollow&quot; href=&quot;http://visualstudiogallery.msdn.microsoft.com/en-us/99468ece-689b-481c-868c-19e00e0a4e69&quot; target=&quot;_blank&quot;&gt;LINQ to Entity Visualizer&lt;/a&gt;&lt;/strong&gt; - Permite visualizar as consultas que serão emitidas com base no seu ObjectQuery &amp;lt;T&amp;gt; (LINQ to Entities) consulta. Você também pode visualizar os resultados.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;fonte:&lt;a rel=&quot;nofollow&quot; href=&quot;http://www.thinqlinq.com/Post.aspx/Title/linq-tools&quot; target=&quot;_blank&quot;&gt;http://www.thinqlinq.com/Post.aspx/Title/linq-tools&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Espero que você considere útil a lista de ferramentas acima, se alguém conhecer mais ferramentas, por favor, contribua.&lt;/span&gt;&lt;/p&gt;</content>
<category term="Brasil" />

                                    </entry>
                            <entry>
                    <title>BrEntityCrud</title>
                    <link rel="alternate" href="http://devbrasil.net/xn/detail/2307362:BlogPost:255863"/>
                                        <id>tag:devbrasil.net,2014-04-17:2307362:BlogPost:255863</id>
                                        <updated>2014-04-17T02:00:00.000Z</updated>
                    
                                            <author>
                            <name>Ewerson Felix Suênia Dias</name>
                            <uri>http://devbrasil.net/profile/EwersonFelixSueniaDias</uri>
                        </author>
                    
                    <summary type="html">
                        &lt;h3 class=&quot;post-title entry-title&quot;&gt;Usando o BrEntityCrud&lt;/h3&gt;
&lt;div class=&quot;post-header&quot;&gt;&lt;div class=&quot;post-header-line-1&quot;&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;post-body entry-content&quot; id=&quot;post-body-1156203965771567099&quot;&gt;O &lt;span&gt;BrEntityCrud &lt;/span&gt;iniciou com o nome de EFContextoDB, trata-se de um pequeno &lt;span&gt;framework&lt;/span&gt;inicialmente desenvolvido para ser utilizado com o &lt;span&gt;MySQL&lt;/span&gt;.&lt;br&gt;&lt;/br&gt; O seu uso é bastante simples, estão disponíveis duas…&lt;/div&gt;                    </summary>

                    <content type="html">
&lt;h3 class=&quot;post-title entry-title&quot;&gt;Usando o BrEntityCrud&lt;/h3&gt;
&lt;div class=&quot;post-header&quot;&gt;&lt;div class=&quot;post-header-line-1&quot;&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&quot;post-body entry-content&quot; id=&quot;post-body-1156203965771567099&quot;&gt;O &lt;span&gt;BrEntityCrud &lt;/span&gt;iniciou com o nome de EFContextoDB, trata-se de um pequeno &lt;span&gt;framework&lt;/span&gt;inicialmente desenvolvido para ser utilizado com o &lt;span&gt;MySQL&lt;/span&gt;.&lt;br/&gt; O seu uso é bastante simples, estão disponíveis duas classes, &lt;span&gt;conexao &lt;/span&gt;e &lt;span&gt;contexto&lt;/span&gt;.&lt;br/&gt; &lt;br/&gt; O componente tomou formas depois que utilizei em aplicativos pessoais e após alguns testes resolvi compartilha-o com outros &lt;span&gt;desenvolvedores&lt;/span&gt;, e assim poder melhorar algumas funcionalidades e claro quem tiver interesse em adota-lo fique à vontade.&lt;br/&gt; &lt;br/&gt; &lt;span&gt;Segue o link para download do componente e um exemplo de uso em vb.net:&lt;/span&gt;&lt;br/&gt; &lt;br/&gt; &lt;a target=&quot;_self&quot;&gt;[Download]&lt;/a&gt;&lt;br/&gt; &lt;br/&gt; Abaixo um pequeno exemplo de uso em vb.net:&lt;br/&gt; &lt;br/&gt; 1º) Adicione as suas referências o arquivo: &lt;span&gt;BrEntityCrud.dll&lt;/span&gt;&lt;br/&gt; 2º) Importar o namespace: &lt;span&gt;imports &lt;/span&gt;&lt;span&gt;BrEntityCrud&lt;/span&gt;&lt;br/&gt; &lt;br/&gt; &lt;span&gt;Exemplo1:&lt;/span&gt;&lt;br/&gt; &lt;br/&gt; Class clientes&lt;br/&gt;    &lt;span&gt;&#039;Os campos contidos nesta entidade devem ser identicos aos do banco de dados caso contrário&lt;/span&gt;&lt;br/&gt; &lt;span&gt;   &#039;Causará uma excessão.&lt;/span&gt;&lt;br/&gt;    Property id as integer&lt;br/&gt;    Property nome as string&lt;br/&gt; &lt;span&gt;   Property foto as image&lt;/span&gt;&lt;br/&gt; End class&lt;br/&gt; &lt;br/&gt; &lt;span&gt;Obs:&lt;/span&gt; &lt;span&gt;Após criar o banco de dados tem um método disponível na classe contexto chamado &lt;/span&gt;&lt;br/&gt; &lt;span&gt;CriarTabela&lt;/span&gt;&lt;span&gt;, Ele cria uma tabela com o nome da classe ex: clientes e os campos campos &lt;/span&gt;&lt;br/&gt; &lt;span&gt;correspondentes nesta classe inclusive o seu tipo de dados ficando de fora apenas o tamanho &lt;/span&gt;&lt;br/&gt; &lt;span&gt;do campo. Caso não queira o nome da classe é possível configurar o nome no campo &lt;/span&gt;&lt;br/&gt; &lt;span&gt;NomeTabela &lt;/span&gt;&lt;span&gt;da classe &lt;/span&gt;&lt;span&gt;contexto&lt;/span&gt;&lt;span&gt;. desta forma ele ignora o nome da classe.&lt;/span&gt;&lt;br/&gt; &lt;br/&gt; Sub salvar()&lt;br/&gt;    &lt;span&gt;&#039;Abaixo a declaração do objeto que contem as informações necessárias para comunicação com &lt;/span&gt;&lt;br/&gt; &lt;span&gt;   &#039;o MySQL&lt;/span&gt;&lt;br/&gt;    Dim con as new conexao(&quot;server=localhost;port=3306;database=nomebd;uid=root;password=123;&quot;)&lt;br/&gt;    Dim ctx as new contexto&lt;br/&gt;    ctx.db = con&#039;&lt;br/&gt;   &lt;br/&gt;    Dim cli as new clientes&lt;br/&gt;    cli.nome = &quot;fulano da silva&quot;&lt;br/&gt;    cli.foto = picturebox1.image&lt;span&gt; &lt;/span&gt;&lt;span&gt;&#039;Não precisa converter a foto para salvar no banco de dados.&lt;/span&gt;&lt;br/&gt;    ctx.salvar(cli)&lt;br/&gt; &lt;br/&gt;    if cli.id &amp;gt; 0 then&lt;br/&gt;        Msgbox(&quot;salvo com secesso!&quot;)&lt;br/&gt;    Eles&lt;br/&gt;        Msgbox(&quot;falhou !&quot;)&lt;br/&gt;    End iF&lt;br/&gt; &lt;br/&gt; End Sub&lt;br/&gt; &lt;br/&gt; Sub Pesquisar()&lt;br/&gt;    Dim con as new conexao(&quot;server=localhost;port=3306;database=nomebd;uid=root;password=123;&quot;)&lt;br/&gt;    Dim ctx as new contexto&lt;br/&gt;    Dim cli as new clientes&lt;br/&gt; &lt;br/&gt;    ctx.db = con&lt;br/&gt;    ctx.WhereCampo = &quot;ID&quot;&lt;br/&gt; &lt;br/&gt;    cli.ID = 1 &lt;span&gt;&#039;Id referente ao registro manipulado.&lt;/span&gt;&lt;br/&gt;    ctx.Selecionar(cli)&lt;br/&gt; &lt;br/&gt;    if cli.ID &amp;gt; 0 then&lt;br/&gt;        txt_COD.text =  cli.id&lt;br/&gt;        txt_NOME.text = cli.nome&lt;br/&gt;        picturebox1.image = cli.foto &lt;span&gt;&#039;Não precisa converter a foto para ler do banco de dados.&lt;/span&gt;&lt;br/&gt;    else&lt;br/&gt;        Msgbox(&quot;Nenhum registro encontrado !&quot;)&lt;br/&gt;    End if&lt;br/&gt; End Sub&lt;br/&gt; &lt;br/&gt; &lt;span&gt;Exemplo2:&lt;/span&gt;&lt;br/&gt; &lt;span&gt;Com herança.&lt;/span&gt;&lt;br/&gt; &lt;span&gt;&lt;br/&gt;&lt;/span&gt; Class clientes&lt;br/&gt;    inherits contexto&lt;br/&gt;    Property id as integer&lt;br/&gt;    Property nome as string&lt;br/&gt; &lt;span&gt;   Property foto as image&lt;/span&gt;&lt;br/&gt; End class&lt;br/&gt; &lt;br/&gt; Sub salvar()&lt;br/&gt;    Dim con as new conexao(&quot;server=localhost;port=3306;database=nomebd;uid=root;password=123;&quot;)&lt;br/&gt;    Dim cli as new clientes&lt;br/&gt;    cli.db = con&lt;br/&gt;     &lt;br/&gt;    cli.nome = &quot;fulano da silva&quot;&lt;br/&gt;    cli.foto = picturebox1.image&lt;br/&gt;    cli.salvar&lt;br/&gt; &lt;br/&gt;    if cli.id &amp;gt; 0 then &lt;span&gt;&#039;O campo cli.id já retorna com o id do registro salvo&lt;/span&gt;.&lt;br/&gt;        Msgbox(&quot;salvo com secesso!&quot;)&lt;br/&gt;    Eles&lt;br/&gt;        Msgbox(&quot;falhou !&quot;)&lt;br/&gt;    End iF&lt;br/&gt; End Sub&lt;br/&gt; &lt;br/&gt; Sub Pesquisar()&lt;br/&gt;    Dim con as new conexao(&quot;server=localhost;port=3306;database=nomebd;uid=root;password=123;&quot;)&lt;br/&gt;    Dim cli as new clientes&lt;br/&gt; &lt;br/&gt;    cli.db = con&lt;br/&gt;    cli.WhereCampo = &quot;ID&quot;&lt;br/&gt;    cli.ID = 1&lt;span&gt; &#039;Id referente ao registro manipulado.&lt;/span&gt;&lt;br/&gt;    cli.Selecionar&lt;br/&gt; &lt;br/&gt;    if cli.ID &amp;gt; 0 then&lt;br/&gt;        txt_COD.text =  cli.id&lt;br/&gt;        txt_NOME.text = cli.nome&lt;br/&gt;        picturebox1.image = cli.foto&lt;br/&gt;    else&lt;br/&gt;        Msgbox(&quot;Nenhum registro encontrado !&quot;)&lt;br/&gt;    End if&lt;br/&gt; End Sub&lt;br/&gt; &lt;br/&gt; Dúvidas, Críticas e/ou sugestões serão bem vindas.&lt;/div&gt;</content>
<category term="Brasil" />

                                    </entry>
                            <entry>
                    <title>.NET para iOS, Android e Windows Phone: Uma nova Proposta CrossPlatform</title>
                    <link rel="alternate" href="http://devbrasil.net/xn/detail/2307362:BlogPost:255572"/>
                                        <id>tag:devbrasil.net,2014-04-01:2307362:BlogPost:255572</id>
                                        <updated>2014-04-01T13:24:52.000Z</updated>
                    
                                            <author>
                            <name>Rogério Rodrigues</name>
                            <uri>http://devbrasil.net/profile/RogerioRodrigues</uri>
                        </author>
                    
                    <summary type="html">
                        &lt;p&gt;Quando começamos a nos envolver com desenvolvimento Mobile, fica muito difícil escolher por qual plataforma começar ou defender, digamos assim, dentre tantas opções que temos hoje no mercado.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Cada plataforma vem com uma proposta , comportamento, requisitos , linguagens diferentes e claro , cada pessoa tem a sua linguagem preferida. Porém isso faz de certa forma que os desenvolvedores fiquem restritos à aquela linguagem ou plataforma que vivem aquela história de lealdade e…&lt;/p&gt;                    </summary>

                    <content type="html">
&lt;p&gt;Quando começamos a nos envolver com desenvolvimento Mobile, fica muito difícil escolher por qual plataforma começar ou defender, digamos assim, dentre tantas opções que temos hoje no mercado.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Cada plataforma vem com uma proposta , comportamento, requisitos , linguagens diferentes e claro , cada pessoa tem a sua linguagem preferida. Porém isso faz de certa forma que os desenvolvedores fiquem restritos à aquela linguagem ou plataforma que vivem aquela história de lealdade e defesa da plataforma, porém quem acaba perdendo com isso, é o próprio desenvolvedor.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Pra quem já sabe e trabalha com .NET está em uma posição muito favorável, pois a Microsoft veio com uma parceria e uma nova proposta para aproveitar o .NET com o C# para iOS, Android e Windows Phone.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Ultimamente temos visto muitas novidades vindo nos Smartphones, os telefones foram transformados de simples dispositivos para fazer ligações a verdadeiros computadores moveis e muito poderosos. Muitos deles vem super completos equipados com telas de alta resolução, GPS, Cameras que gravam vídeos e tiram fotos em excelente resolução , aplicativos cada mais mais integrados com varias redes sociais , quase estão fazendo café e muitos deles quase esquentam uma lasanha de tão quente que fica a bateria =D&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Como qualquer área do mercado a coisa é bem dinâmica, principalmente quando se trata de tecnologia. Podemos dizer que a Apple foi o pioneiro nessa revolução dos telefones moveis, vindo em 2007 com o iPhone, trazendo um conceito novo, com tela sensível ao toque, experiência melhor pro usuário, entre outros N recursos. Querendo ou não, ainda é o sistema operacional que mantem como referencia de SO mobile, onde é encontrando tanto no smartphone iPhone como no Tablet iPad e no iPod.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;O Android, quando foi comprado pela Google em 2005, resolveu colocar uma nova proposta no mercado atingindo os aparelhos de todos os níveis, desde o mais básico e barato, até o mais TOP como um Galaxy 5. Desde de 2008 ele vem tendo diversas versões lançadas, o que fez com que alcançasse mais de 50% do mercado e menos de 4 anos de vida e ainda continua a crescer. Essa nova proposta trouxe uma flexibilidade maior para os fabricantes de devices, por se tratar de um SO openSource , muitas versões são modificadas para atender a demanda dos devices que são lançados, fazendo com que eles sejam barateados.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;A Microsoft demorou um pouco para voltar ao mercado com uma nova proposta, então em 2010 lançou o Windows Phone 7, ansiosamente esperada desde a sua ultima versão, o Windows Mobile. Dessa vez a Microsoft trouxe uma proposta bem diferente do iOS e o Android, trazendo para a tela Live Tiles com informações diretas e dinâmicas para o usuário, tendo uma fluidez e proposta de usabilidade natural. Com isso os fabricantes de dispositivos como a Nokia, que adotou o Windows Phone, tiveram uma certa liberdade para projetar seus devices, mas seguindo rigidamente um conjunto mínimo de requisitos que a Microsoft dita, para que seja mantida a estabilidade e qualidade do sistema, evitando problemas de fragmentação , como acontece hoje no Android.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;&quot; src=&quot;http://www.rogerio.eti.br/wp-content/uploads/2014/02/022514_0153_NETparaiOS1.png&quot; class=&quot;thinglinkFetching align-center&quot;/&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Mesmo sendo plataformas móveis, o iOS, Android e Windows Phone, possuem maneiras diferentes de executar suas tarefas, sua linguagens próprias e forma de uso dos hardware diferenciadas. Por exemplo as aplicações iOS são escritas em Objective C, o Android em Java e o Windows Phone utiliza o C# e VB.net. Acredito que, como desenvolvedores, não gostaríamos nem um pouco de que para atingir o maior numero de usuários em várias plataformas, ter que aprender novas linguagens para escrever 3 vezes a nossa aplicação, testar 3 vezes, corrigir bugs 3 vezes e gastar 3 vezes mais tempo para tudo!!! Porque não otimizar o nosso tempo e ganhar mais com isso, diminuindo a nossa curva de produção da nossa APP para mais de uma plataforma?&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;É então essa a proposta, “Escreva uma vez, execute em qualquer lugar” , essa é a proposta, que já não é nova. Essa proposta já havia sido apresentada pela SUN quando foi lançado o Java, com a proposta de ser uma linguagem unificadora para todas as plataformas e dispositivos.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Então uma empresa chamada Xamarin, usando como base o projeto MONO, lançou essa nova e fascinante proposta utilizando o C# e todo o poder da plataforma .net, aliada ao poderoso IDE Visual Studio.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Quam irá ganhar com isso, seremos nós desenvolvedores, reduzindo nosso tempo gasto para escrever e lançar nossos aplicativos.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;O que a Xamarin fez foi trazer a proposta, escrever uma vez , execute em qualquer lugar, utilizado todo o poder do C# junto com as Base Class Libraries, que são usados como uma biblioteca e uma linguagem universal, para expor aos desenvolvedores elementos específicos de cada dispositivo e interface de cada plataforma, pois como já sabemos o .NET roda nativamente no Windows Phone, o que não significa que não iremos rodar nativamente esse código dentro do Android e dentro do iOS, que para isso iremos usar o poder do MonoTouch e do Mono For Android, contido no Xamarin.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;&quot; src=&quot;http://www.rogerio.eti.br/wp-content/uploads/2014/02/022514_0153_NETparaiOS2.png&quot; class=&quot;thinglinkFetching align-center&quot;/&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;O que acontece é que o MonoTouch e o Mono for android disponibiliza o .NET para o iOS e para o Android, usando o Mono, que é um compilador open source e multiplataforma da CLI, um padrão que define um ambiente de execução virtual usado pelo C#.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Se já tiver algum conhecimento no .NET vai conseguir usar tranquilamente o Xamarin associado ao Visual Studio , já que os namespaces e Base Class Libraries à disposição.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Nos próximos posts sobre o assunto, já entrarei numa questão mais técnica e prática, para tentar passar a mensagem do quão será fácil desenvolver para as 3 maiores plataformas reaproveitando ao máximo a nossa regra de negócios.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt=&quot;&quot; src=&quot;http://www.rogerio.eti.br/wp-content/uploads/2014/02/022514_0153_NETparaiOS3.png&quot; class=&quot;thinglinkFetching align-center&quot;/&gt;&lt;/p&gt;
&lt;p&gt;Não vamos precisar nos preocupar com Objective C, Java , vamos poder usar os recursos do C#, generics, LINQ, eventos, recursos de threads, etc.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Hoje para versão Windows não temos versões gratuitas, você pode baixar no site do Xamarin uma versão trial para testar ou caso seja estudante pode solicitar um desconto e adquirir por $99 cada licença.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Saiba Mais em:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://devbrasil.net/group/xamarin&quot; target=&quot;_self&quot;&gt;Comunidade do Xamarin&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://xamarin.com/&quot;&gt;Site Xamarin&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.visualstudio.com/&quot;&gt;Visual Studio&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.rogerio.eti.br&quot; target=&quot;_blank&quot;&gt;Blog Rogério Rodrigues&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;</content>
<category term="Brasil" />

                                    </entry>
                            <entry>
                    <title>Validando models com DataAnnotations e Attributes no ASP.NET MVC</title>
                    <link rel="alternate" href="http://devbrasil.net/xn/detail/2307362:BlogPost:254317"/>
                                        <id>tag:devbrasil.net,2014-02-17:2307362:BlogPost:254317</id>
                                        <updated>2014-02-17T00:00:00.000Z</updated>
                    
                                            <author>
                            <name>Felipe Alberto</name>
                            <uri>http://devbrasil.net/profile/FelipeAlberto</uri>
                        </author>
                    
                    <summary type="html">
                        &lt;p&gt;&lt;span style=&quot;font-family: arial, helvetica, sans-serif; font-size: 14px;&quot;&gt;Nest post vou falar um pouco sobre a utilização de DataAnnotations e Attributes para validação de models em projetos ASP.NET MVC.&lt;/span&gt;&lt;/p&gt;
&lt;div style=&quot;margin-top: 20px;&quot;&gt;&lt;/div&gt;
&lt;div style=&quot;margin-top: 20px;&quot;&gt;&lt;br&gt;&lt;/br&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;span style=&quot;font-family: arial, helvetica, sans-serif;&quot;&gt;&lt;strong style=&quot;line-height: 1.5em;&quot;&gt;Conceitos básicos: &lt;/strong&gt;Em C# (e também em Visual Basic.NET), um Attribute é…&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;                    </summary>

                    <content type="html">
&lt;p&gt;&lt;span style=&quot;font-family: arial, helvetica, sans-serif; font-size: 14px;&quot;&gt;Nest post vou falar um pouco sobre a utilização de DataAnnotations e Attributes para validação de models em projetos ASP.NET MVC.&lt;/span&gt;&lt;/p&gt;
&lt;div style=&quot;margin-top: 20px;&quot;&gt;&lt;/div&gt;
&lt;div style=&quot;margin-top: 20px;&quot;&gt;&lt;br/&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;span style=&quot;font-family: arial, helvetica, sans-serif;&quot;&gt;&lt;strong style=&quot;line-height: 1.5em;&quot;&gt;Conceitos básicos: &lt;/strong&gt;Em C# (e também em Visual Basic.NET), um Attribute é uma classe para associação de metadados ou informações declarativas em classes, métodos ou membros. Utilizar um &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: arial, helvetica, sans-serif; font-size: 14px;&quot;&gt;Attribute&lt;/span&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;span style=&quot;font-family: arial, helvetica, sans-serif;&quot;&gt; é normalmente referido como &quot;decorar com o atributo&quot;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div style=&quot;margin-top: 20px;&quot;&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br/&gt; &lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;span style=&quot;font-family: arial, helvetica, sans-serif;&quot;&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;O&lt;/span&gt; System.ComponentModel.DataAnnotations&lt;/span&gt; é um namespace introduzido no .NET 3.5 que nos fornece um conjunto de atributos que podem ser classificados como:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;br/&gt; &lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;span style=&quot;font-family: arial, helvetica, sans-serif;&quot;&gt;&lt;span style=&quot;color: #008080;&quot;&gt;ValidationAttributes:&lt;/span&gt; Derivam da classe &lt;em&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;a href=&quot;http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.validationattribute(v=vs.95).aspx&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;ValidationAttribute&lt;/span&gt;&lt;/a&gt; &lt;/span&gt;&lt;/em&gt;e são usados para garantir regras de validação que podem ser aplicadas a classes ou membros.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li style=&quot;text-align: left;&quot;&gt;&lt;br/&gt; &lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;span style=&quot;font-family: arial, helvetica, sans-serif;&quot;&gt;&lt;span style=&quot;color: #008080;&quot;&gt;DisplayAttributes:&lt;/span&gt; Usados para especificar como os dados de uma classe ou membro são exibidos.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li style=&quot;text-align: left;&quot;&gt;&lt;br/&gt; &lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;span style=&quot;font-family: arial, helvetica, sans-serif;&quot;&gt;&lt;span style=&quot;color: #008080;&quot;&gt;Data Modeling Attributes:&lt;/span&gt; Usados para especificar a estrutura e o relacionamento entre classes de dados (muito utilizados no Entity Framework Code First).&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br/&gt; &lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;span style=&quot;font-family: arial, helvetica, sans-serif;&quot;&gt;Neste exemplo, utilizarei atributos do tipo ValidationAttributes e DisplayAttributes&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div style=&quot;margin-top: 20px;&quot;&gt;&lt;/div&gt;
&lt;div style=&quot;margin-top: 20px;&quot;&gt;&lt;br/&gt; &lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;span style=&quot;font-family: arial, helvetica, sans-serif;&quot;&gt;&lt;strong&gt;Objetivo:&lt;/strong&gt; Farei aqui um formulário simples de validação de contatos, decorando o modelo com alguns atributos. Não entrarei em questões sobre arquitetura de projeto, e parto do princípio de que o(a) leitor(a) já esteja familiarizado com a estrutura e funcionamento do ASP.NET MVC.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;margin-top: 20px;&quot;&gt;&lt;/div&gt;
&lt;div style=&quot;margin-top: 20px;&quot;&gt;&lt;br/&gt; &lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;span style=&quot;font-family: arial, helvetica, sans-serif;&quot;&gt;&lt;strong&gt;Ferramentas utilizadas:&lt;/strong&gt; Utilizei para este exemplo o Visual Studio 2013, o .NET Framework 4.5, e o projeto foi criado no template ASP.NET Web Application / MVC 5, que já traz consigo as referências para o bootstrap.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;margin-top: 20px;&quot;&gt;&lt;/div&gt;
&lt;div style=&quot;margin-top: 20px;&quot;&gt;&lt;br/&gt; &lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;span style=&quot;font-family: arial, helvetica, sans-serif;&quot;&gt;&lt;strong&gt;Let&#039;s code!:&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;margin-top: 20px; text-align: center;&quot;&gt;&lt;br/&gt; &lt;span style=&quot;font-size: 12px;&quot;&gt;&lt;span style=&quot;font-family: arial, helvetica, sans-serif;&quot;&gt;Criando o Model&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;margin-top: 20px; text-align: center;&quot;&gt;&lt;br/&gt; &lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;span style=&quot;font-family: arial, helvetica, sans-serif;&quot;&gt;&lt;a href=&quot;http://falberthen.files.wordpress.com/2014/02/pic12.png?w=595&quot;&gt;&lt;img alt=&quot;Passo 1: Cria&amp;#xE7;&amp;#xE3;o do Model&quot; class=&quot;size-large wp-image-120&quot; src=&quot;http://falberthen.files.wordpress.com/2014/02/pic12.png?w=595&quot; style=&quot;text-align: center; line-height: 1.5em; width: 595px; height: 277px;&quot;/&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;margin-top: 20px;&quot;&gt;&lt;div style=&quot;margin-top: 10px;&quot;&gt;&lt;div style=&quot;margin-top: 20px;&quot;&gt;&lt;br/&gt; &lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;span style=&quot;font-family: arial, helvetica, sans-serif;&quot;&gt;Este simples modelo define a classe Contato com alguns atributos interessantes em seus membros, sendo eles:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;margin-top: 20px;&quot;&gt;&lt;br/&gt; &lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;span style=&quot;font-family: arial, helvetica, sans-serif;&quot;&gt;&lt;span style=&quot;color: #33cccc;&quot;&gt;[DisplayName]&lt;/span&gt; : Quando nos referirmos ao model através da view, o texto que será exibido na Label é o definido neste atributo, ao invés do nome da propriedade. Isso é muito útil quando o nome da propriedade e do desejado diferem, como no caso do Email (nome da propriedade) e E-mail (nome de exibição).&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;margin-top: 20px;&quot;&gt;&lt;br/&gt; &lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;span style=&quot;font-family: arial, helvetica, sans-serif;&quot;&gt;&lt;span style=&quot;color: #33cccc;&quot;&gt;[Required] &lt;/span&gt;: Especifica que o campo obrigatório.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;margin-top: 20px;&quot;&gt;&lt;br/&gt; &lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;span style=&quot;font-family: arial, helvetica, sans-serif;&quot;&gt;&lt;span style=&quot;color: #33cccc;&quot;&gt;[StringLength]&lt;/span&gt; : Especifica a largura mínima e máxima da string aceitos no campo.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;margin-top: 20px;&quot;&gt;&lt;br/&gt; &lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;span style=&quot;font-family: arial, helvetica, sans-serif;&quot;&gt;&lt;span style=&quot;color: #33cccc;&quot;&gt;[EmailAddress]&lt;/span&gt; : Atributo já pronto para a validação de e-mails.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;margin-top: 20px;&quot;&gt;&lt;br/&gt; &lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;span style=&quot;font-family: arial, helvetica, sans-serif;&quot;&gt;&lt;span style=&quot;color: #33cccc;&quot;&gt;[RegularExpression]&lt;/span&gt; : Atributo que valida se o valor da propriedade satisfaz a uma expressão regular definida. No caso, utilizei para validar um campo que aceita apenas números.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;margin-top: 20px;&quot;&gt;&lt;br/&gt; &lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;span style=&quot;font-family: arial, helvetica, sans-serif;&quot;&gt;&lt;span style=&quot;color: #33cccc;&quot;&gt;[Remote]&lt;/span&gt; : Não é um DataAnnotation, mas sim um atributo específico do ASP.NET MVC. Basta especificar o nome da Action, seguida pelo controller, e ele fará uma requisição AJAX enquanto você preenche o campo, passando o valor digitado como argumento da action fornecida. Utilizei para validar se o endereço digitado já existe.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;margin-top: 20px; text-align: center;&quot;&gt;&lt;/div&gt;
&lt;div style=&quot;margin-top: 20px; text-align: center;&quot;&gt;&lt;br/&gt; &lt;span style=&quot;font-size: 12px;&quot;&gt;&lt;span style=&quot;font-family: arial, helvetica, sans-serif;&quot;&gt;Criando o Controller&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;margin-top: 20px;&quot;&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br/&gt; &lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;span style=&quot;font-family: arial, helvetica, sans-serif;&quot;&gt;&lt;a href=&quot;http://falberthen.files.wordpress.com/2014/02/pic22.png&quot;&gt;&lt;img alt=&quot;Passo 2: Criando o Controller&quot; class=&quot;size-large wp-image-121&quot; height=&quot;530&quot; src=&quot;http://falberthen.files.wordpress.com/2014/02/pic22.png?w=595&quot; width=&quot;595&quot;/&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;span style=&quot;font-family: arial, helvetica, sans-serif;&quot;&gt;O controller contém uma action chamada &lt;span style=&quot;color: #ff0000;&quot;&gt;&quot;ConsultaEmailsCadastrados&quot;,&lt;/span&gt; que graças ao atributo &lt;span style=&quot;color: #33cccc;&quot;&gt;[Remote]&lt;/span&gt; citado anteriormente, é acessado sempre que você digitar algum valor no campo Email. No exemplo, se o e-mail digitado já existir na lista, o método retornará uma resposta inválida e a mensagem de erro especificada será exibida.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;span style=&quot;font-family: arial, helvetica, sans-serif;&quot;&gt;Ao postar o formulário para a action &lt;span style=&quot;color: #ff0000;&quot;&gt;“CadastrarContato”&lt;/span&gt;, devido ao fato da view estar ligada ao model Contato e seus membros, um objeto do tipo &lt;span style=&quot;color: #0000cd;&quot;&gt;“Contato”&lt;/span&gt; será passado como parâmetro. Nesta action verifico o valor booleano da propriedade &lt;em&gt;IsValid&lt;/em&gt; do dicionário &lt;em&gt;ModelState&lt;/em&gt;, que também pode nos fornecer uma lista de erros ocorridos na validação.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br/&gt; &lt;span style=&quot;font-size: 12px;&quot;&gt;&lt;span style=&quot;font-family: arial, helvetica, sans-serif;&quot;&gt;Criando a View&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br/&gt; &lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;span style=&quot;font-family: arial, helvetica, sans-serif;&quot;&gt;&lt;a href=&quot;http://falberthen.files.wordpress.com/2014/02/pic31.png&quot;&gt;&lt;img alt=&quot;Passo 3: Criando a View&quot; class=&quot;size-large wp-image-122&quot; height=&quot;482&quot; src=&quot;http://falberthen.files.wordpress.com/2014/02/pic31.png?w=595&quot; width=&quot;595&quot;/&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;span style=&quot;font-family: arial, helvetica, sans-serif;&quot;&gt;Utilizando o Razor View Engine do ASP.NET MVC e suas funções definidas, crio a GUI de forma que os campos da tela se associem ao model através dos Lambda Expressions. As labels geradas pelo &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: Consolas, monospace; font-size: 13px; line-height: 18.211200714111px;&quot;&gt;&lt;span style=&quot;background-color: #ffd700;&quot;&gt;@&lt;/span&gt;Html.LabelFor&lt;/span&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;span style=&quot;font-family: arial, helvetica, sans-serif;&quot;&gt; irão exibir exatamente o valor definido no atributo  &lt;span style=&quot;color: #33cccc;&quot;&gt;[DisplayName]&lt;/span&gt;, enquanto o&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;font-family: Consolas, monospace; font-size: 13px; line-height: 18.211200714111px;&quot;&gt;&lt;span style=&quot;background-color: #ffd700;&quot;&gt;@&lt;/span&gt;Html.ValidationMessageFor &lt;/span&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;span style=&quot;font-family: arial, helvetica, sans-serif;&quot;&gt;irá exibir as mensagens de erro definidas nos atributos de validação sempre que o input for inválido.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br/&gt; &lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;span style=&quot;font-family: arial, helvetica, sans-serif;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;color: #ff8c00;&quot;&gt;Dica:&lt;/span&gt;&lt;/strong&gt; Você pode usar um&lt;/span&gt;&lt;/span&gt; &lt;span style=&quot;font-family: Consolas, monospace; font-size: 13px; line-height: 18.211200714111px;&quot;&gt;&lt;span style=&quot;background-color: #ffd700;&quot;&gt;@&lt;/span&gt;Html.ValidationSummary &lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;span style=&quot;font-family: arial, helvetica, sans-serif;&quot;&gt;p&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;span style=&quot;font-family: arial, helvetica, sans-serif;&quot;&gt;ara exibir todos os erros de validação de uma vez só.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br/&gt; &lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;span style=&quot;font-family: arial, helvetica, sans-serif;&quot;&gt;&lt;strong&gt;Rodando a aplicação:&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br/&gt; &lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;span style=&quot;font-family: arial, helvetica, sans-serif;&quot;&gt;&lt;a href=&quot;http://falberthen.files.wordpress.com/2014/02/pic42.png&quot;&gt;&lt;img alt=&quot;Rodando a aplica&amp;#xE7;&amp;#xE3;o&quot; class=&quot;aligncenter size-large wp-image-273&quot; height=&quot;286&quot; src=&quot;http://falberthen.files.wordpress.com/2014/02/pic42.png?w=595&quot; width=&quot;595&quot;/&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br/&gt; &lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;span style=&quot;font-family: arial, helvetica, sans-serif;&quot;&gt;Aqui podemos visualizar a validação ocorrendo no lado do cliente, que não permite que o post chegue ao servidor enquanto as regras não forem satisfeitas. Caso você desabilite o Javascript do navegador, a mesma validação ocorrerá somente no server.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&lt;br/&gt; &lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;span style=&quot;font-family: arial, helvetica, sans-serif;&quot;&gt;&lt;strong&gt;Detalhes essenciais:&lt;/strong&gt; Para que a validação no lado do cliente funcione como na imagem, é necessário adicionar 3 bibliotecas Javascript, sendo elas:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br/&gt; &lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;span style=&quot;font-family: arial, helvetica, sans-serif;&quot;&gt;&lt;a href=&quot;http://falberthen.files.wordpress.com/2014/02/pic51.png&quot;&gt;&lt;img alt=&quot;Scripts necess&amp;#xE1;rios&quot; class=&quot;size-full wp-image-124&quot; height=&quot;54&quot; src=&quot;http://falberthen.files.wordpress.com/2014/02/pic51.png&quot; width=&quot;489&quot;/&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br/&gt;  &lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;span style=&quot;font-family: arial, helvetica, sans-serif;&quot;&gt;Vale lembrar que mesmo adicionando-as, você precisará ter a chave &lt;em&gt;“UnobtrusiveJavaScriptEnabled”&lt;/em&gt; habilitada no web.config da aplicação:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br/&gt; &lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;span style=&quot;font-family: arial, helvetica, sans-serif;&quot;&gt;&lt;a href=&quot;http://falberthen.files.wordpress.com/2014/02/pic61.png&quot;&gt;&lt;img alt=&quot;Chave no Web.config&quot; class=&quot;size-full wp-image-125&quot; height=&quot;95&quot; src=&quot;http://falberthen.files.wordpress.com/2014/02/pic61.png&quot; width=&quot;427&quot;/&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br/&gt;  &lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;span style=&quot;font-family: arial, helvetica, sans-serif;&quot;&gt;&lt;strong&gt;Conclusão:&lt;/strong&gt; Com a utilização dos DataAnnotations e Attributes, podemos facilmente validar nossas aplicações, poupando retrabalho e garantindo a segurança dos dados de maneira prática e &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: arial, helvetica, sans-serif; font-size: 14px;&quot;&gt;centralizada&lt;/span&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;span style=&quot;font-family: arial, helvetica, sans-serif;&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://falberthenblogex1.codeplex.com/SourceControl/latest&quot;&gt;Código Fonte deste exemplo&lt;/a&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;/p&gt;
&lt;hr/&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;span style=&quot;font-family: arial, helvetica, sans-serif;&quot;&gt;&lt;span class=&quot;font-size-2&quot;&gt;&lt;strong&gt;Visite também:&lt;u&gt;&lt;br/&gt;&lt;/u&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations(v=vs.110).aspx&quot; target=&quot;_blank&quot;&gt;http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations(v=vs.110).aspx&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;span style=&quot;font-family: arial, helvetica, sans-serif;&quot;&gt;&lt;a href=&quot;http://devbrasil.net/group/aspnet&quot; target=&quot;_self&quot;&gt;Aprofunde seus conhecimentos sobre o tema visitando a comunidade ASP.NET&lt;/a&gt;&lt;br/&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;</content>
<category term="Brasil" />

                    <link rel="enclosure" href="http://falberthen.files.wordpress.com/2014/02/pic22.png" type="image/png"/><link rel="enclosure" href="http://falberthen.files.wordpress.com/2014/02/pic31.png" type="image/png"/><link rel="enclosure" href="http://falberthen.files.wordpress.com/2014/02/pic42.png" type="image/png"/><link rel="enclosure" href="http://falberthen.files.wordpress.com/2014/02/pic51.png" type="image/png"/><link rel="enclosure" href="http://falberthen.files.wordpress.com/2014/02/pic61.png" type="image/png"/>                </entry>
                            <entry>
                    <title>Publicando site ASP.NET no Windows Azure via Visual Studio Online</title>
                    <link rel="alternate" href="http://devbrasil.net/xn/detail/2307362:BlogPost:253157"/>
                                        <id>tag:devbrasil.net,2014-01-13:2307362:BlogPost:253157</id>
                                        <updated>2014-01-13T21:56:34.000Z</updated>
                    
                                            <author>
                            <name>Thiago Lunardi</name>
                            <uri>http://devbrasil.net/profile/ThiagoLunardi</uri>
                        </author>
                    
                    <summary type="html">
                        &lt;p&gt;Integração e agilidade são as palavres da vez no meio de desenvolvedores de software. Ainda mais se estivermos falando de serviço, e não mais de software de prateleira. Isso porquê esse conceito de software de escopo ou caixa fechada, nos dias de hoje, não é mais visto como algo viável, rentável, sustentável ou mesmo lucrativo. E hoje desenvolvedores de software vivem uma realidade que lhes são exigidos alta qualidade, entregas ágeis e em períodos curtos, afim de minimizar os…&lt;/p&gt;                    </summary>

                    <content type="html">
&lt;p&gt;Integração e agilidade são as palavres da vez no meio de desenvolvedores de software. Ainda mais se estivermos falando de serviço, e não mais de software de prateleira. Isso porquê esse conceito de software de escopo ou caixa fechada, nos dias de hoje, não é mais visto como algo viável, rentável, sustentável ou mesmo lucrativo. E hoje desenvolvedores de software vivem uma realidade que lhes são exigidos alta qualidade, entregas ágeis e em períodos curtos, afim de minimizar os riscos.&lt;/p&gt;
&lt;p&gt;Considerando isso, o desenvolvedor, mesmo que trabalhe sozinho, de forma autônoma, necessita ter um ambiente de trabalho que sirva como ferramenta para entregar toda essa expectativa que lhe é exigido. Uma plataforma, que não seja apenas uma IDE de desenvolvimento, mas uma completa plataforma de gestão de aplicação. Uma plataforma que sirva, não apenas como repositório de códigos fontes, mas de gestão e governança destes, criando rastreabilidade entre o que foi desenvolvido e o que foi solicitado pelo seu cliente. E um ambiente de altíssima disponibilidade e escalabilidade para hospedagem e distribuição da sua aplicação de forma fácil, ágil e segura.&lt;/p&gt;
&lt;p&gt;Visando cobrir todas essas necessidades, e ainda excedendo entregando muito mais recursos de produtividade, governança e indicadores que passam segurança e estabilidade agregando valor ao &lt;del&gt;&lt;font color=&quot;#000000&quot;&gt;camarote&lt;/font&gt;&lt;/del&gt; produto, a Microsoft fornece 3 ferramentas, GRATUITAS:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Visual Studio Express for Web&lt;/li&gt;
&lt;li&gt;Visual Studio Online&lt;/li&gt;
&lt;li&gt;Windows Azure Websites&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Todas as três ferramentas já são de grande conhecimento da maioria dos desenvolvedores .NET. Então, em seguida, vou mostrar como publicar seu projeto desenvolvido em ASP.NET (3.5 ou superior) na nuvem do Windows Azure através de implementação contínua do Visual Studio Online.&lt;/p&gt;
&lt;h1&gt;Primeiro passo: Visual Studio Express&lt;/h1&gt;
&lt;p&gt;Primeiramente vou criar um projeto ASP.NET MVC usando o &lt;em&gt;template&lt;/em&gt; padrão do Visual Studio 2013. A ideia é apenas ter uma representação do que será o seu projeto web.&lt;/p&gt;
&lt;p&gt;Com o Visual Studio 2013 aberto, vou no menu &lt;em&gt;File &amp;gt; New Project&lt;/em&gt;. Na janela aberta crio um projeto chamado &lt;strong&gt;MeuSiteNaNuvem&lt;/strong&gt;:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://thiagolunardi.net/wp-content/uploads/2014/01/imagem01.png&quot;&gt;&lt;img width=&quot;300&quot; height=&quot;168&quot; class=&quot;alignnone wp-image-621&quot; alt=&quot;New Project ASP.NET&quot; src=&quot;http://thiagolunardi.net/wp-content/uploads/2014/01/imagem01-300x168.png&quot;/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Na tela seguinte, selecionamento apenas o &lt;em&gt;template&lt;/em&gt; MVC e clicamos OK.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://thiagolunardi.net/wp-content/uploads/2014/01/imagem02.png&quot;&gt;&lt;img width=&quot;300&quot; height=&quot;210&quot; class=&quot;alignnone size-medium wp-image-641&quot; alt=&quot;Template MVC&quot; src=&quot;http://thiagolunardi.net/wp-content/uploads/2014/01/imagem02-300x210.png&quot;/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Com isso já tenho nosso projeto ASP.NET MVC criado. Esse irá representar o seu projeto web que já possui.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://thiagolunardi.net/wp-content/uploads/2014/01/imagem03.png&quot;&gt;&lt;img width=&quot;300&quot; height=&quot;190&quot; class=&quot;alignnone size-medium wp-image-651&quot; alt=&quot;ASP.NET Template WebSite&quot; src=&quot;http://thiagolunardi.net/wp-content/uploads/2014/01/imagem03-300x190.png&quot;/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;Segundo passo: Visual Studio Online&lt;/h1&gt;
&lt;p&gt;Acesso o serviço do Visual Studio Online em &lt;a href=&quot;http://www.visualstudio.com/&quot;&gt;http://www.visualstudio.com/&lt;/a&gt;, crie sua conta e, após tudo configurado, começaremos a na dashboard como na imagem abaixo:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://thiagolunardi.net/wp-content/uploads/2014/01/imagem05.png&quot;&gt;&lt;img width=&quot;300&quot; height=&quot;165&quot; class=&quot;alignnone size-medium wp-image-671&quot; alt=&quot;Visual Studio Online&quot; src=&quot;http://thiagolunardi.net/wp-content/uploads/2014/01/imagem05-300x165.png&quot;/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Já com sua conta rodando e configurada, vamos criar um novo projeto dentro do VSOnline para então defini-lo como o controlador de versão de fontes para o VS2013 e, a partir daí tornar possível fazer toda uma gestão de projeto de desenvolvimento de software, usando metodologia &lt;em&gt;Scrum&lt;/em&gt; ou mesmo &lt;em&gt;Agile Software Development&lt;/em&gt; ou &lt;em&gt;CMMI&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://thiagolunardi.net/wp-content/uploads/2014/01/imagem06.png&quot;&gt;&lt;img width=&quot;300&quot; height=&quot;253&quot; class=&quot;alignnone size-medium wp-image-681&quot; alt=&quot;TFS New Project&quot; src=&quot;http://thiagolunardi.net/wp-content/uploads/2014/01/imagem06-300x253.png&quot;/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Clique em “Create Project” e aguarde. Ao concluir, o &lt;em&gt;Visual Studio Online&lt;/em&gt; irá retornar uma mensagem que eu acho muito legal!&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://thiagolunardi.net/wp-content/uploads/2014/01/imagem07.png&quot;&gt;&lt;img width=&quot;300&quot; height=&quot;253&quot; class=&quot;alignnone size-medium wp-image-691&quot; alt=&quot;Absolutely love this&quot; src=&quot;http://thiagolunardi.net/wp-content/uploads/2014/01/imagem07-300x253.png&quot;/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Clique em “&lt;em&gt;Navigate to Project&lt;/em&gt;” e pronto! Seu ambiente VSOnline já está pronto para receber seu projeto ASP.NET. Sendo assim, voltemos ao &lt;em&gt;Visual Studio Express&lt;/em&gt;, no menu &lt;em&gt;Team &amp;gt; “Connect to Team Foundation Server…”&lt;/em&gt;, adicione como servidor a URL da sua conta no VSOnline (ex: seunome@visualstudio.com) e selecione o nome do projeto que iremos vincular ao nosso site ASP.NET&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://thiagolunardi.net/wp-content/uploads/2014/01/imagem08.png&quot;&gt;&lt;img width=&quot;300&quot; height=&quot;49&quot; class=&quot;alignnone size-medium wp-image-711&quot; alt=&quot;Connect to Team Foundation Server&quot; src=&quot;http://thiagolunardi.net/wp-content/uploads/2014/01/imagem08-300x49.png&quot;/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://thiagolunardi.net/wp-content/uploads/2014/01/imagem09.png&quot;&gt;&lt;img width=&quot;300&quot; height=&quot;216&quot; class=&quot;alignnone size-medium wp-image-721&quot; alt=&quot;Team Projects&quot; src=&quot;http://thiagolunardi.net/wp-content/uploads/2014/01/imagem09-300x216.png&quot;/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Assim que finalizado, e ainda no &lt;em&gt;Visual Studio Express&lt;/em&gt;, vá na aba &lt;em&gt;Solution Explorer&lt;/em&gt;, abra o menu contexto no arquivo da solução aberta, e então clique em “&lt;em&gt;Add Solution to Source Control…&lt;/em&gt;“.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://thiagolunardi.net/wp-content/uploads/2014/01/imagem10.png&quot;&gt;&lt;img width=&quot;224&quot; height=&quot;300&quot; class=&quot;alignnone size-medium wp-image-731&quot; alt=&quot;Add Solution to Source Control&quot; src=&quot;http://thiagolunardi.net/wp-content/uploads/2014/01/imagem10-224x300.png&quot;/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;O Visual Studio suporta conectar tanto em controlador de versão Team Foundation Version Control (atual Visual Studio Online) quanto Git (via GitHub). Selecione TFS e dê OK.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://thiagolunardi.net/wp-content/uploads/2014/01/imagem11.png&quot;&gt;&lt;img width=&quot;300&quot; height=&quot;129&quot; alt=&quot;Choose Source Control&quot; src=&quot;http://thiagolunardi.net/wp-content/uploads/2014/01/imagem11-300x129.png&quot;/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Na janela seguinte você deve selecionar em qual &lt;em&gt;workspace&lt;/em&gt; seus fontes irão se hospedar. Selecione a raiz do projeto que foi criado no VSOnline e dê OK. Para mais detalhes sobre &lt;em&gt;workspace&lt;/em&gt;, pesquise sobre Administração do TFS.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://thiagolunardi.net/wp-content/uploads/2014/01/imagem121.png&quot;&gt;&lt;img width=&quot;298&quot; height=&quot;300&quot; class=&quot;alignnone size-medium wp-image-901&quot; alt=&quot;Indicate your workspace&quot; src=&quot;http://thiagolunardi.net/wp-content/uploads/2014/01/imagem121-298x300.png&quot;/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Perceba que agora todos os arquivos dos projetos da sua solução terão um sinal de mais ( &lt;span style=&quot;color: #00ff00; font-size: medium;&quot;&gt;+&lt;/span&gt; ). Isso indica que são arquivos novos e que serão carregados ao controlador de versão no próximo &lt;em&gt;Check-In&lt;/em&gt;. Não faça o &lt;em&gt;check-in&lt;/em&gt; neste momento ainda.&lt;/p&gt;
&lt;h1&gt;Terceiro passo: Windows Azure&lt;/h1&gt;
&lt;p&gt;Acesse o painel de controle da sua conta no Windows Azure em &lt;a href=&quot;http://manage.windowsazure.com/&quot;&gt;http://manage.windowsazure.com/&lt;/a&gt;. Caso ainda não possua uma conta configurada, crie uma e faça uma assinatura “&lt;em&gt;Pay-As-You-Go&lt;/em&gt;“. Fique tranquilo, pois não iremos consumir nenhum recurso que seja cobrado um centavo sequer.&lt;/p&gt;
&lt;p&gt;Já no painel de controle, clique na aba “&lt;em&gt;WebSites&lt;/em&gt;“, em seguida, no rodapé, vá em &lt;em&gt;Novo &amp;gt; Computação &amp;gt; Site &amp;gt; Criação Rápida&lt;/em&gt; e dê um nome para a URL do seu site dentro do &lt;em&gt;Windows Azure&lt;/em&gt;. Selecione também a região que ficar mais próxima de onde você estará acessando, afim de deixar o tempo de resposta ainda mais curto (na época que escrevi o artigo, a Microsoft ainda estava preparando o datacenter em São Paulo).&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://thiagolunardi.net/wp-content/uploads/2014/01/imagem13.png&quot;&gt;&lt;img width=&quot;300&quot; height=&quot;63&quot; class=&quot;alignnone size-medium wp-image-761&quot; alt=&quot;Novo WebSite&quot; src=&quot;http://thiagolunardi.net/wp-content/uploads/2014/01/imagem13-300x63.png&quot;/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Assim que finalizar a criação do seu site, você será direcionado para essa página. Clique então no último link que diz “&lt;em&gt;Configurar a implantação a partir do controle de origem&lt;/em&gt;” para vincularmos esse website ao controlador de versão do VSOnline.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://thiagolunardi.net/wp-content/uploads/2014/01/imagem14.png&quot;&gt;&lt;img width=&quot;300&quot; height=&quot;237&quot; class=&quot;alignnone size-medium wp-image-771&quot; alt=&quot;Seu site foi criado&quot; src=&quot;http://thiagolunardi.net/wp-content/uploads/2014/01/imagem14-300x237.png&quot;/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;O Windows Azure aceita que os arquivos de seu site seja fornecido por vários repositórios. Selecione a opção Visual Studio Online e continue para o próximo passo clicando na setinha para direita.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://thiagolunardi.net/wp-content/uploads/2014/01/imagem15.png&quot;&gt;&lt;img width=&quot;300&quot; height=&quot;206&quot; class=&quot;alignnone size-medium wp-image-781&quot; alt=&quot;Onde est&amp;#xE1; seu c&amp;#xF3;digo fonte&quot; src=&quot;http://thiagolunardi.net/wp-content/uploads/2014/01/imagem15-300x206.png&quot;/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;No passo seguinte, informa o nome da sua conta Visual Studio Online (ex: seunome.visualstudio.com) e então clique em “Autorizar Agora”.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://thiagolunardi.net/wp-content/uploads/2014/01/imagem16.png&quot;&gt;&lt;img width=&quot;300&quot; height=&quot;188&quot; class=&quot;alignnone size-medium wp-image-791&quot; alt=&quot;Autorizar conex&amp;#xE3;o&quot; src=&quot;http://thiagolunardi.net/wp-content/uploads/2014/01/imagem16-300x188.png&quot;/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Nisso o Windows Azure irá até o VSOnline, irá confirmar suas credenciais e retornará com a lista de projetos que possui em sua conta. Selecione o projeto que deseja publicar neste website e conclua os passos.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://thiagolunardi.net/wp-content/uploads/2014/01/imagem17.png&quot;&gt;&lt;img width=&quot;300&quot; height=&quot;189&quot; class=&quot;alignnone size-medium wp-image-801&quot; alt=&quot;Escolha um reposit&amp;#xF3;rio para implantar&quot; src=&quot;http://thiagolunardi.net/wp-content/uploads/2014/01/imagem17-300x189.png&quot;/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Ao fim do processamento, o &lt;em&gt;Windows Azure&lt;/em&gt; irá te confirmar que tudo está devidamente configurado e vinculado. As configurações do &lt;em&gt;Windows Azure&lt;/em&gt; terminam aqui, agora vamos para o &lt;em&gt;deploy&lt;/em&gt;!&lt;/p&gt;
&lt;h1&gt;Passo final: Implementação contínua&lt;/h1&gt;
&lt;p&gt;Já temos os três ambiente devidamente vinculados e configurados. Agora basta sinalizarmos para o VSOnline que terminamos de alterar o fonte e que podemos enviar os arquivos para nuvem e deixar toda a infra estrutura fazer o trabalho pesado. Volte no Visual Studio Express e, no meu contexto da solução, selecione “&lt;em&gt;Check In&lt;/em&gt;” para iniciarmos o processo de envio dos arquivos para o repositório de código fonte.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://thiagolunardi.net/wp-content/uploads/2014/01/imagem19.png&quot;&gt;&lt;img width=&quot;208&quot; height=&quot;300&quot; class=&quot;alignnone size-medium wp-image-821&quot; alt=&quot;imagem19&quot; src=&quot;http://thiagolunardi.net/wp-content/uploads/2014/01/imagem19-208x300.png&quot;/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Essa opção irá nos levar para a aba do &lt;em&gt;Team Explorer&lt;/em&gt;, já na tela de &lt;em&gt;Pending Changes&lt;/em&gt; (modificações pendentes) detalhando todos os arquivos que estão aguardando subirem para o repositório. No campo de comentário (&lt;em&gt;comment&lt;/em&gt;), insira informações sobre essa subida afim de ter um mínimo de rastreabilidade do que foi modificado a cada &lt;em&gt;Check In&lt;/em&gt;. Caso esteja usando alguma metodologia de gestão de desenvolvimento de software no VSOnline (Backlog, Sprint, Tasks, Impeachment, etc), vc pode vincular esse &lt;em&gt;check in&lt;/em&gt; a algum desses itens através do campo &lt;em&gt;Related Work Items&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://thiagolunardi.net/wp-content/uploads/2014/01/imagem20.png&quot;&gt;&lt;img width=&quot;188&quot; height=&quot;300&quot; class=&quot;alignnone size-medium wp-image-831&quot; alt=&quot;Pending Changes&quot; src=&quot;http://thiagolunardi.net/wp-content/uploads/2014/01/imagem20-188x300.png&quot;/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Clique no botão “Check In” ao topo. Ao concluir o processo de subida, clique no botão “Home” e depois vá em “Builds” para listar a fila de publicações que o ambiente que criamos está gerindo, testando, compilando e validando antes de enviar para o ambiente de publicação.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://thiagolunardi.net/wp-content/uploads/2014/01/imagem21.png&quot;&gt;&lt;img width=&quot;300&quot; height=&quot;194&quot; class=&quot;alignnone size-medium wp-image-841&quot; alt=&quot;Team Explorer Home&quot; src=&quot;http://thiagolunardi.net/wp-content/uploads/2014/01/imagem21-300x194.png&quot;/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Acompanhe todo o processo de build e deploy do fonte que foi enviado para o VSOnline e então submetido (caso passe nos testes e builds) para o ambiente vinculado do Windows Azure.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://thiagolunardi.net/wp-content/uploads/2014/01/imagem22.png&quot;&gt;&lt;img width=&quot;300&quot; height=&quot;190&quot; class=&quot;alignnone size-medium wp-image-851&quot; alt=&quot;My builds&quot; src=&quot;http://thiagolunardi.net/wp-content/uploads/2014/01/imagem22-300x190.png&quot;/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Agora é só acessar a URL do site que foi definido na criação do mesmo no Windows Azure para validar que está publicado com sucesso! No exemplo está publicado em &lt;a href=&quot;http://meusitenanuvem.azurewebsites.net/&quot;&gt;http://meusitenanuvem.azurewebsites.net/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://thiagolunardi.net/wp-content/uploads/2014/01/imagem23.png&quot;&gt;&lt;img width=&quot;300&quot; height=&quot;178&quot; class=&quot;alignnone size-medium wp-image-861&quot; alt=&quot;ASP.NET Template&quot; src=&quot;http://thiagolunardi.net/wp-content/uploads/2014/01/imagem23-300x178.png&quot;/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Também é possível fazer o acompanhamento dos builds via Visual Studio Online, na guia Implantações do site do projeto.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://thiagolunardi.net/wp-content/uploads/2014/01/imagem24.png&quot;&gt;&lt;img width=&quot;300&quot; height=&quot;100&quot; class=&quot;alignnone size-medium wp-image-871&quot; alt=&quot;Implanta&amp;#xE7;&amp;#xF5;es&quot; src=&quot;http://thiagolunardi.net/wp-content/uploads/2014/01/imagem24-300x100.png&quot;/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;Finalizando&lt;/h1&gt;
&lt;p&gt;Esse são os passos mínimos necessários para se ter um ambiente com controle de códigos fontes, implementação contínua, disponibilidade, entre outros. A partir daí, pode-se aumentar a produtividade consumindo mais recursos do Visual Studio Express como projetos de testes unitário, do Visual Studio Online como gestão de desenvolvimento como Srum, e do Windows Azure como vincular recursos adicionar como banco de dados. E tudo isso sem nenhum custo, totalmente gratuito.&lt;/p&gt;
&lt;h1&gt;Para saber mais&lt;/h1&gt;
&lt;p&gt;&lt;a href=&quot;http://devbrasil.net/group/adonet&quot; target=&quot;_self&quot; rel=&quot;nofollow&quot;&gt;Aprofunde seus conhecimentos na comunidade ASP.NET&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://devbrasil.net/group/windowsazure&quot; target=&quot;_self&quot;&gt;Aprofunde seus conhecimentos na comunidade Windows Azure&lt;/a&gt;&lt;/p&gt;</content>
<category term="Brasil" />

                    <link rel="enclosure" href="http://thiagolunardi.net/wp-content/uploads/2014/01/imagem01.png" type="image/png"/><link rel="enclosure" href="http://thiagolunardi.net/wp-content/uploads/2014/01/imagem02.png" type="image/png"/><link rel="enclosure" href="http://thiagolunardi.net/wp-content/uploads/2014/01/imagem03.png" type="image/png"/><link rel="enclosure" href="http://thiagolunardi.net/wp-content/uploads/2014/01/imagem05.png" type="image/png"/><link rel="enclosure" href="http://thiagolunardi.net/wp-content/uploads/2014/01/imagem06.png" type="image/png"/><link rel="enclosure" href="http://thiagolunardi.net/wp-content/uploads/2014/01/imagem07.png" type="image/png"/><link rel="enclosure" href="http://thiagolunardi.net/wp-content/uploads/2014/01/imagem08.png" type="image/png"/><link rel="enclosure" href="http://thiagolunardi.net/wp-content/uploads/2014/01/imagem09.png" type="image/png"/><link rel="enclosure" href="http://thiagolunardi.net/wp-content/uploads/2014/01/imagem10.png" type="image/png"/><link rel="enclosure" href="http://thiagolunardi.net/wp-content/uploads/2014/01/imagem11.png" type="image/png"/><link rel="enclosure" href="http://thiagolunardi.net/wp-content/uploads/2014/01/imagem121.png" type="image/png"/><link rel="enclosure" href="http://thiagolunardi.net/wp-content/uploads/2014/01/imagem13.png" type="image/png"/><link rel="enclosure" href="http://thiagolunardi.net/wp-content/uploads/2014/01/imagem14.png" type="image/png"/><link rel="enclosure" href="http://thiagolunardi.net/wp-content/uploads/2014/01/imagem15.png" type="image/png"/><link rel="enclosure" href="http://thiagolunardi.net/wp-content/uploads/2014/01/imagem16.png" type="image/png"/><link rel="enclosure" href="http://thiagolunardi.net/wp-content/uploads/2014/01/imagem17.png" type="image/png"/><link rel="enclosure" href="http://thiagolunardi.net/wp-content/uploads/2014/01/imagem19.png" type="image/png"/><link rel="enclosure" href="http://thiagolunardi.net/wp-content/uploads/2014/01/imagem20.png" type="image/png"/><link rel="enclosure" href="http://thiagolunardi.net/wp-content/uploads/2014/01/imagem21.png" type="image/png"/><link rel="enclosure" href="http://thiagolunardi.net/wp-content/uploads/2014/01/imagem22.png" type="image/png"/><link rel="enclosure" href="http://thiagolunardi.net/wp-content/uploads/2014/01/imagem23.png" type="image/png"/><link rel="enclosure" href="http://thiagolunardi.net/wp-content/uploads/2014/01/imagem24.png" type="image/png"/>                </entry>
                            <entry>
                    <title>Entity Framework: Convenções (Conventions)</title>
                    <link rel="alternate" href="http://devbrasil.net/xn/detail/2307362:BlogPost:252930"/>
                                        <id>tag:devbrasil.net,2014-01-09:2307362:BlogPost:252930</id>
                                        <updated>2014-01-09T14:02:26.000Z</updated>
                    
                                            <author>
                            <name>Thiago Lunardi</name>
                            <uri>http://devbrasil.net/profile/ThiagoLunardi</uri>
                        </author>
                    
                    <summary type="html">
                        &lt;div&gt;Comecei trabalhar com Entity Framework a pouco tempo. Como disse algumas vezes em minhas redes sociais, eu tenho uma relação de amor e ódio com esse framework. Isso porquê tem horas que me sinto amarrado, e outra que parece ser 10 vezes mais veloz desenvolver com ele do que usando ADO.NET.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;Enfim, nos meus primeiros contatos fui apresentado a um super facilitador do EF, as Convenções. Convenções são conjuntos de regras que são usadas para configurar automaticamente…&lt;/div&gt;                    </summary>

                    <content type="html">
&lt;div&gt;Comecei trabalhar com Entity Framework a pouco tempo. Como disse algumas vezes em minhas redes sociais, eu tenho uma relação de amor e ódio com esse framework. Isso porquê tem horas que me sinto amarrado, e outra que parece ser 10 vezes mais veloz desenvolver com ele do que usando ADO.NET.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;Enfim, nos meus primeiros contatos fui apresentado a um super facilitador do EF, as Convenções. Convenções são conjuntos de regras que são usadas para configurar automaticamente um modelo conceitual com base em definições de classe. As convenções são definidas no namespace &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/system.data.entity.modelconfiguration.conventions(v=vs.113).aspx&quot;&gt;System.Data.Entity.ModelConfiguration.Conventions&lt;/a&gt;.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;Essas convenção se comportam da mesma maneira que no ASP.NET MVC. Através da formatação da nomenclatura de sua classe, propriedade ou variável, o Entity Framework já irá entender de qual entidade do banco de dados está se referindo. E para deixar tudo ainda mais claro, no Entity Framework existem alguns tipos de convenções.&lt;/div&gt;
&lt;h1&gt;Chave Primária (Primary Key)&lt;/h1&gt;
&lt;div&gt;Essa convenção rege que uma propriedade é uma chave primária se, em uma classe, é chamada “ID” (não é caso sensitivo), ou se é chamada pelo nome da classe seguido por “ID”. Se o tipo da propriedade chave primária for numérico ou GUID será configurado como uma coluna de identidade.&lt;/div&gt;
&lt;div&gt;&lt;div&gt;&lt;div class=&quot;syntaxhighlighter csharp&quot; id=&quot;highlighter_944922&quot;&gt;&lt;table border=&quot;0&quot; cellspacing=&quot;0&quot;&gt;
&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;div class=&quot;line number1 index0 alt2&quot;&gt;1&lt;/div&gt;
&lt;div class=&quot;line number2 index1 alt1&quot;&gt;2&lt;/div&gt;
&lt;div class=&quot;line number3 index2 alt2&quot;&gt;3&lt;/div&gt;
&lt;div class=&quot;line number4 index3 alt1&quot;&gt;4&lt;/div&gt;
&lt;div class=&quot;line number5 index4 alt2&quot;&gt;5&lt;/div&gt;
&lt;/td&gt;
&lt;td class=&quot;code&quot;&gt;&lt;div class=&quot;container&quot;&gt;&lt;div class=&quot;line number1 index0 alt2&quot;&gt;&lt;code class=&quot;csharp keyword&quot;&gt;public&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;class&lt;/code&gt; &lt;code class=&quot;csharp plain&quot;&gt;Usuario&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number2 index1 alt1&quot;&gt;&lt;code class=&quot;csharp plain&quot;&gt;{&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number3 index2 alt2&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;    &lt;/code&gt;&lt;code class=&quot;csharp keyword&quot;&gt;public&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;int&lt;/code&gt; &lt;code class=&quot;csharp plain&quot;&gt;UsuarioID {&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;get&lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;;&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;set&lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;; }&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number4 index3 alt1&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;    &lt;/code&gt;&lt;code class=&quot;csharp comments&quot;&gt;//... outras propriedades&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number5 index4 alt2&quot;&gt;&lt;code class=&quot;csharp plain&quot;&gt;}&lt;/code&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h1&gt;Relacionamento (Relationship)&lt;/h1&gt;
&lt;div&gt;Podemos também instruir ao EF onde existem e quais tipos de relacionamentos estão sendo aplicados nas entidades do banco de dados. Apenas usando as regras de convenções, podemos informar se o relacionamento aplicado é &amp;lt;um-para-um&amp;gt;,&amp;lt;um-para-muitos&amp;gt;, ou &amp;lt;muitos-para-muitos&amp;gt;. Até mesmo se a existência de um registro pai é ou não obrigatória dependendo do tipo da propriedade da chave estrangeira em questão.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;div&gt;&lt;div class=&quot;syntaxhighlighter csharp&quot; id=&quot;highlighter_308032&quot;&gt;&lt;table border=&quot;0&quot; cellspacing=&quot;0&quot;&gt;
&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;div class=&quot;line number1 index0 alt2&quot;&gt;01&lt;/div&gt;
&lt;div class=&quot;line number2 index1 alt1&quot;&gt;02&lt;/div&gt;
&lt;div class=&quot;line number3 index2 alt2&quot;&gt;03&lt;/div&gt;
&lt;div class=&quot;line number4 index3 alt1&quot;&gt;04&lt;/div&gt;
&lt;div class=&quot;line number5 index4 alt2&quot;&gt;05&lt;/div&gt;
&lt;div class=&quot;line number6 index5 alt1&quot;&gt;06&lt;/div&gt;
&lt;div class=&quot;line number7 index6 alt2&quot;&gt;07&lt;/div&gt;
&lt;div class=&quot;line number8 index7 alt1&quot;&gt;08&lt;/div&gt;
&lt;div class=&quot;line number9 index8 alt2&quot;&gt;09&lt;/div&gt;
&lt;div class=&quot;line number10 index9 alt1&quot;&gt;10&lt;/div&gt;
&lt;div class=&quot;line number11 index10 alt2&quot;&gt;11&lt;/div&gt;
&lt;div class=&quot;line number12 index11 alt1&quot;&gt;12&lt;/div&gt;
&lt;div class=&quot;line number13 index12 alt2&quot;&gt;13&lt;/div&gt;
&lt;div class=&quot;line number14 index13 alt1&quot;&gt;14&lt;/div&gt;
&lt;div class=&quot;line number15 index14 alt2&quot;&gt;15&lt;/div&gt;
&lt;div class=&quot;line number16 index15 alt1&quot;&gt;16&lt;/div&gt;
&lt;div class=&quot;line number17 index16 alt2&quot;&gt;17&lt;/div&gt;
&lt;div class=&quot;line number18 index17 alt1&quot;&gt;18&lt;/div&gt;
&lt;div class=&quot;line number19 index18 alt2&quot;&gt;19&lt;/div&gt;
&lt;div class=&quot;line number20 index19 alt1&quot;&gt;20&lt;/div&gt;
&lt;div class=&quot;line number21 index20 alt2&quot;&gt;21&lt;/div&gt;
&lt;div class=&quot;line number22 index21 alt1&quot;&gt;22&lt;/div&gt;
&lt;/td&gt;
&lt;td class=&quot;code&quot;&gt;&lt;div class=&quot;container&quot;&gt;&lt;div class=&quot;line number1 index0 alt2&quot;&gt;&lt;code class=&quot;csharp keyword&quot;&gt;public&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;class&lt;/code&gt; &lt;code class=&quot;csharp plain&quot;&gt;Estado&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number2 index1 alt1&quot;&gt;&lt;code class=&quot;csharp plain&quot;&gt;{&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number3 index2 alt2&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;    &lt;/code&gt;&lt;code class=&quot;csharp comments&quot;&gt;// Primary key&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number4 index3 alt1&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;    &lt;/code&gt;&lt;code class=&quot;csharp keyword&quot;&gt;public&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;int&lt;/code&gt; &lt;code class=&quot;csharp plain&quot;&gt;EstadoID {&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;get&lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;;&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;set&lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;; }&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number5 index4 alt2&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;    &lt;/code&gt;&lt;code class=&quot;csharp keyword&quot;&gt;public&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;string&lt;/code&gt; &lt;code class=&quot;csharp plain&quot;&gt;Sigla {&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;get&lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;;&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;set&lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;; }&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number6 index5 alt1&quot;&gt;&lt;/div&gt;
&lt;div class=&quot;line number7 index6 alt2&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;    &lt;/code&gt;&lt;code class=&quot;csharp comments&quot;&gt;// Navigation property&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number8 index7 alt1&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;    &lt;/code&gt;&lt;code class=&quot;csharp keyword&quot;&gt;public&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;virtual&lt;/code&gt; &lt;code class=&quot;csharp plain&quot;&gt;ICollection Cidades {&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;get&lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;;&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;set&lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;; }&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number9 index8 alt2&quot;&gt;&lt;code class=&quot;csharp plain&quot;&gt;}&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number10 index9 alt1&quot;&gt;&lt;/div&gt;
&lt;div class=&quot;line number11 index10 alt2&quot;&gt;&lt;code class=&quot;csharp keyword&quot;&gt;public&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;class&lt;/code&gt; &lt;code class=&quot;csharp plain&quot;&gt;Cidade&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number12 index11 alt1&quot;&gt;&lt;code class=&quot;csharp plain&quot;&gt;{&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number13 index12 alt2&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;    &lt;/code&gt;&lt;code class=&quot;csharp comments&quot;&gt;// Primary Key&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number14 index13 alt1&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;    &lt;/code&gt;&lt;code class=&quot;csharp keyword&quot;&gt;public&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;int&lt;/code&gt; &lt;code class=&quot;csharp plain&quot;&gt;CidadeID {&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;get&lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;;&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;set&lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;; }&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number15 index14 alt2&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;    &lt;/code&gt;&lt;code class=&quot;csharp keyword&quot;&gt;public&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;string&lt;/code&gt; &lt;code class=&quot;csharp plain&quot;&gt;Nome {&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;get&lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;;&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;set&lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;; }&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number16 index15 alt1&quot;&gt;&lt;/div&gt;
&lt;div class=&quot;line number17 index16 alt2&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;    &lt;/code&gt;&lt;code class=&quot;csharp comments&quot;&gt;// Foreign Key&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number18 index17 alt1&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;    &lt;/code&gt;&lt;code class=&quot;csharp keyword&quot;&gt;public&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;int&lt;/code&gt; &lt;code class=&quot;csharp plain&quot;&gt;EstadoID {&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;get&lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;;&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;set&lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;; }&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number19 index18 alt2&quot;&gt;&lt;/div&gt;
&lt;div class=&quot;line number20 index19 alt1&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;    &lt;/code&gt;&lt;code class=&quot;csharp comments&quot;&gt;// Navigation property&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number21 index20 alt2&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;    &lt;/code&gt;&lt;code class=&quot;csharp keyword&quot;&gt;public&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;virtual&lt;/code&gt; &lt;code class=&quot;csharp plain&quot;&gt;Estado Estado {&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;get&lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;;&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;set&lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;; }&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number22 index21 alt1&quot;&gt;&lt;code class=&quot;csharp plain&quot;&gt;}&lt;/code&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h1&gt;Conexão (Connection)&lt;/h1&gt;
&lt;div&gt;Após ter todas as classes de domínio já declaradas de forma a representar as entidades do seu banco de dados, definimos a classe de contexto do tipo DbContext afim de conectarmos esse domínio ao banco de dados e, então, iniciarmos a manipulação de informações persistentes. Para isso também existe uma regra de convenção que podemos usar. Basta criar sua classe de contexto com o mesmo nome da sua &lt;em&gt;Connection String&lt;/em&gt; declarada no &lt;em&gt;web.config&lt;/em&gt; da aplicação web.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;Considerando a seguinte declaração de uma &lt;em&gt;Connection String&lt;/em&gt; no &lt;em&gt;web.config&lt;/em&gt;:&lt;/div&gt;
&lt;div&gt;&lt;div&gt;&lt;div class=&quot;syntaxhighlighter xml&quot; id=&quot;highlighter_57708&quot;&gt;&lt;table border=&quot;0&quot; cellspacing=&quot;0&quot;&gt;
&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;div class=&quot;line number1 index0 alt2&quot;&gt;1&lt;/div&gt;
&lt;div class=&quot;line number2 index1 alt1&quot;&gt;2&lt;/div&gt;
&lt;div class=&quot;line number3 index2 alt2&quot;&gt;3&lt;/div&gt;
&lt;div class=&quot;line number4 index3 alt1&quot;&gt;4&lt;/div&gt;
&lt;div class=&quot;line number5 index4 alt2&quot;&gt;5&lt;/div&gt;
&lt;div class=&quot;line number6 index5 alt1&quot;&gt;6&lt;/div&gt;
&lt;div class=&quot;line number7 index6 alt2&quot;&gt;7&lt;/div&gt;
&lt;/td&gt;
&lt;td class=&quot;code&quot;&gt;&lt;div class=&quot;container&quot;&gt;&lt;div class=&quot;line number1 index0 alt2&quot;&gt;&lt;code class=&quot;xml plain&quot;&gt;&amp;lt;&lt;/code&gt;&lt;code class=&quot;xml keyword&quot;&gt;configuration&lt;/code&gt;&lt;code class=&quot;xml plain&quot;&gt;&amp;gt;&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number2 index1 alt1&quot;&gt;&lt;code class=&quot;xml spaces&quot;&gt;  &lt;/code&gt;&lt;code class=&quot;xml plain&quot;&gt;&amp;lt;&lt;/code&gt;&lt;code class=&quot;xml keyword&quot;&gt;connectionStrings&lt;/code&gt;&lt;code class=&quot;xml plain&quot;&gt;&amp;gt;&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number3 index2 alt2&quot;&gt;&lt;code class=&quot;xml spaces&quot;&gt;    &lt;/code&gt;&lt;code class=&quot;xml plain&quot;&gt;&amp;lt;&lt;/code&gt;&lt;code class=&quot;xml keyword&quot;&gt;add&lt;/code&gt; &lt;code class=&quot;xml color1&quot;&gt;name&lt;/code&gt;&lt;code class=&quot;xml plain&quot;&gt;=&lt;/code&gt;&lt;code class=&quot;xml string&quot;&gt;&quot;BancoPrincipal&quot;&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number4 index3 alt1&quot;&gt;&lt;code class=&quot;xml spaces&quot;&gt;         &lt;/code&gt;&lt;code class=&quot;xml color1&quot;&gt;providerName&lt;/code&gt;&lt;code class=&quot;xml plain&quot;&gt;=&lt;/code&gt;&lt;code class=&quot;xml string&quot;&gt;&quot;System.Data.SqlServer&quot;&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number5 index4 alt2&quot;&gt;&lt;code class=&quot;xml spaces&quot;&gt;         &lt;/code&gt;&lt;code class=&quot;xml color1&quot;&gt;connectionString&lt;/code&gt;&lt;code class=&quot;xml plain&quot;&gt;=&lt;/code&gt;&lt;code class=&quot;xml string&quot;&gt;&quot;Server=.\SQLExpress;AttachDbFilename=MyDataFile.mdf;Database=dbname;&quot;&lt;/code&gt;&lt;code class=&quot;xml plain&quot;&gt;/&amp;gt;&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number6 index5 alt1&quot;&gt;&lt;code class=&quot;xml spaces&quot;&gt;  &lt;/code&gt;&lt;code class=&quot;xml plain&quot;&gt;&amp;lt;/&lt;/code&gt;&lt;code class=&quot;xml keyword&quot;&gt;connectionStrings&lt;/code&gt;&lt;code class=&quot;xml plain&quot;&gt;&amp;gt;&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number7 index6 alt2&quot;&gt;&lt;code class=&quot;xml plain&quot;&gt;&amp;lt;/&lt;/code&gt;&lt;code class=&quot;xml keyword&quot;&gt;configuration&lt;/code&gt;&lt;code class=&quot;xml plain&quot;&gt;&amp;gt;&lt;/code&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;Nossa declaração da classe de contexto, usando as devidas regras de convenção, fica:&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;div&gt;&lt;div class=&quot;syntaxhighlighter csharp&quot; id=&quot;highlighter_920933&quot;&gt;&lt;table border=&quot;0&quot; cellspacing=&quot;0&quot;&gt;
&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;div class=&quot;line number1 index0 alt2&quot;&gt;1&lt;/div&gt;
&lt;div class=&quot;line number2 index1 alt1&quot;&gt;2&lt;/div&gt;
&lt;div class=&quot;line number3 index2 alt2&quot;&gt;3&lt;/div&gt;
&lt;div class=&quot;line number4 index3 alt1&quot;&gt;4&lt;/div&gt;
&lt;/td&gt;
&lt;td class=&quot;code&quot;&gt;&lt;div class=&quot;container&quot;&gt;&lt;div class=&quot;line number1 index0 alt2&quot;&gt;&lt;code class=&quot;csharp keyword&quot;&gt;public&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;class&lt;/code&gt; &lt;code class=&quot;csharp plain&quot;&gt;BancoPrincipal : DbContext&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number2 index1 alt1&quot;&gt;&lt;code class=&quot;csharp plain&quot;&gt;{&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number3 index2 alt2&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;    &lt;/code&gt;&lt;code class=&quot;csharp keyword&quot;&gt;public&lt;/code&gt; &lt;code class=&quot;csharp plain&quot;&gt;DbSet&amp;lt;Usuario&amp;gt; Usuarios {&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;get&lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;;&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;set&lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;; }&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number4 index3 alt1&quot;&gt;&lt;code class=&quot;csharp plain&quot;&gt;}&lt;/code&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;Neste exemplo, o EF saberá que o contexto BancoPrincipal deverá se conectar ao banco de dados usando a &lt;em&gt;ConnectionString&lt;/em&gt; de mesmo nome declarada no &lt;em&gt;web.config&lt;/em&gt;.&lt;/div&gt;
&lt;h1&gt;Mais Convenções&lt;/h1&gt;
&lt;div&gt;Existem, claro, muito mais regras de convenções dentro do Entity Framework. Essas que eu citei são as que tive o primeiro contato quando comecei a trabalhar com EF.&lt;/div&gt;
&lt;div&gt;Abaixo compartilho uma lista de demais convenções do EF para seu estudo.&lt;p&gt; &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://msdn.microsoft.com/en-us/data/jj679962.aspx&quot; rel=&quot;nofollow&quot;&gt;&lt;br/&gt; MSDN Code-First Conventions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://msdn.microsoft.com/en-us/data/dn469439&quot; rel=&quot;nofollow&quot;&gt;&lt;br/&gt; MSDN Model-based Conventions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://msdn.microsoft.com/en-us/data/jj819164.aspx&quot; rel=&quot;nofollow&quot;&gt;&lt;br/&gt; MSDN Custom-Code Conventions&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;Aprendam bem todas as regras que irão se aplicar ao código de vocês e ganhem velocidade no desenvolvimento.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;h1&gt;Para saber mais&lt;/h1&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;a href=&quot;http://devbrasil.net/group/adonet&quot; target=&quot;_self&quot;&gt;Aprofunde seus conhecimentos na comunidade ASP.NET&lt;/a&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;</content>
<category term="Brasil" />

                                    </entry>
                            <entry>
                    <title>DICA: Erro Get/Refresh TFS OAuth token failed with invalid_grant</title>
                    <link rel="alternate" href="http://devbrasil.net/xn/detail/2307362:BlogPost:252364"/>
                                        <id>tag:devbrasil.net,2013-12-11:2307362:BlogPost:252364</id>
                                        <updated>2013-12-11T19:57:36.000Z</updated>
                    
                                            <author>
                            <name>Thiago Oliveira</name>
                            <uri>http://devbrasil.net/profile/ThiagoOliveira</uri>
                        </author>
                    
                    <summary type="html">
                        &lt;p&gt;Alguns usuários tem reportado nos fóruns um erro que vem acontecendo durante o processo de chekin de arquivos para o TFS Online (Visual Studio Online).&lt;/p&gt;
&lt;p&gt;Recentemente esse mesmo erro aconteceu comigo durante o processo de implantação de código. E com isso as alterações feitas no código ou mesmo novos arquivos adicionados, não são implantados. A solução para esse erro é o seguinte:…&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&lt;/p&gt;                    </summary>

                    <content type="html">
&lt;p&gt;Alguns usuários tem reportado nos fóruns um erro que vem acontecendo durante o processo de chekin de arquivos para o TFS Online (Visual Studio Online).&lt;/p&gt;
&lt;p&gt;Recentemente esse mesmo erro aconteceu comigo durante o processo de implantação de código. E com isso as alterações feitas no código ou mesmo novos arquivos adicionados, não são implantados. A solução para esse erro é o seguinte:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&lt;a href=&quot;http://storage.ning.com/topology/rest/1.0/file/get/2230051005?profile=original&quot; target=&quot;_self&quot;&gt;&lt;img width=&quot;531&quot; src=&quot;http://storage.ning.com/topology/rest/1.0/file/get/2230051005?profile=RESIZE_1024x1024&quot; width=&quot;531&quot; class=&quot;align-center&quot;/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;No Menu esquerdo do painel de controle do Windows Azure clique em Desconectar do Visual Studio Online.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;A partir daí vamos criar uma nova conexão. &lt;/p&gt;
&lt;p&gt;Ainda no painel de controle, clique em &quot;Configurar a implantação a partir do seu ponto de origem&quot;.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://storage.ning.com/topology/rest/1.0/file/get/2230051704?profile=original&quot; target=&quot;_self&quot;&gt;&lt;img src=&quot;http://storage.ning.com/topology/rest/1.0/file/get/2230051704?profile=original&quot; width=&quot;531&quot; class=&quot;align-center&quot;/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Será aberto uma tela onde você poderá escolher a sua fonte de dados:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://storage.ning.com/topology/rest/1.0/file/get/2230063871?profile=original&quot; target=&quot;_self&quot;&gt;&lt;img src=&quot;http://storage.ning.com/topology/rest/1.0/file/get/2230063871?profile=original&quot; width=&quot;732&quot; class=&quot;align-center&quot;/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Escolha onde está a sua fonte de dados. Siga os próximos passos autorizando novamente o acesso a sua conta do Visual Studio Online. &lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Em seguida escolha qual aplicação deseja vincular novamente.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Após a conclusão desse processo. O seu histórico de implantação voltará a ser exibido no seu painel do Windows Azure, e também suas implantações voltarão a ser aplicadas.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Para saber mais:&lt;/strong&gt;&lt;br/&gt; &lt;a href=&quot;http://devbrasil.net/group/alm&quot; target=&quot;_self&quot;&gt;Aprofunde seus conhecimentos sobre este tema na comunidade ALM&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;</content>
<category term="Brasil" />

                                    </entry>
                            <entry>
                    <title>Projeto Katana e o desenvolvimento web com .NET - Prática</title>
                    <link rel="alternate" href="http://devbrasil.net/xn/detail/2307362:BlogPost:251864"/>
                                        <id>tag:devbrasil.net,2013-12-04:2307362:BlogPost:251864</id>
                                        <updated>2013-12-04T10:00:00.000Z</updated>
                    
                                            <author>
                            <name>Wilian Santos</name>
                            <uri>http://devbrasil.net/profile/WilianSantos</uri>
                        </author>
                    
                    <summary type="html">
                        &lt;p dir=&quot;ltr&quot;&gt;&lt;span&gt;Na parte anterior do post abordamos uma introdução ao projeto Katana e suas motivações, bem como o OWIN (Open Web Interface for .NET). Neste post introduziremos alguns conceitos na prática bem como as bibliotecas necessárias para a construção de aplicações compatíveis com o OWIN através do projeto Katana. Observação: Link para download do código disponível ao final do post.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;&lt;br&gt;&lt;/br&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p dir=&quot;ltr&quot;&gt;&lt;em&gt;&lt;strong&gt;Criando o…&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;                    </summary>

                    <content type="html">
&lt;p dir=&quot;ltr&quot;&gt;&lt;span&gt;Na parte anterior do post abordamos uma introdução ao projeto Katana e suas motivações, bem como o OWIN (Open Web Interface for .NET). Neste post introduziremos alguns conceitos na prática bem como as bibliotecas necessárias para a construção de aplicações compatíveis com o OWIN através do projeto Katana. Observação: Link para download do código disponível ao final do post.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;&lt;br/&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p dir=&quot;ltr&quot;&gt;&lt;em&gt;&lt;strong&gt;Criando o projeto&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p dir=&quot;ltr&quot;&gt;&lt;span&gt;Para reproduzir os mesmos exemplos é necessário o Visual Studio 2013 ou a versão Express 2013 para Web, que pode ser obtida gratuitamente.&lt;/span&gt;&lt;/p&gt;
&lt;p dir=&quot;ltr&quot;&gt;&lt;span&gt;Nesta prática criaremos uma pequena aplicação e hospedaremos através do IIS e em seguida reutilizaremos o mesmo projeto em um host customizado através de uma aplicação console.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span id=&quot;docs-internal-guid-22e7512a-af53-a1cc-9efa-71ec09d84e70&quot;&gt;&lt;span&gt;Para dar inicio criaremos pelo o Visual Studio uma aplicação ASP.NET vazia conforme&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;&lt;strong&gt;Figura 1&lt;/strong&gt;&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;&lt;a href=&quot;http://storage.ning.com/topology/rest/1.0/file/get/2230050898?profile=original&quot; target=&quot;_self&quot;&gt;&lt;img width=&quot;750&quot; src=&quot;http://storage.ning.com/topology/rest/1.0/file/get/2230050898?profile=RESIZE_1024x1024&quot; width=&quot;647&quot; class=&quot;align-center&quot; height=&quot;446&quot;/&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;strong&gt;&lt;span id=&quot;docs-internal-guid-22e7512a-af56-1701-cd64-2ee56e990ff0&quot;&gt;&lt;span&gt;Figura 1&lt;/span&gt; &lt;span&gt;- Criação do projeto&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span id=&quot;docs-internal-guid-22e7512a-af57-c2ca-49b1-82afdfcbba89&quot;&gt;Em seguida crie um novo item na solução. Escolha a opção OWIN Startup Class conforme figura &lt;strong&gt;Figura 2&lt;/strong&gt;. Serão instalados dois pacotes ao projeto ao incluir esta classe, sendo eles o pacote Microsoft.Owin contendo a base para os outros componentes do projeto Katana e o pacote Owin.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span&gt;&lt;a href=&quot;http://storage.ning.com/topology/rest/1.0/file/get/2230051151?profile=original&quot; target=&quot;_self&quot;&gt;&lt;img width=&quot;647&quot; src=&quot;http://storage.ning.com/topology/rest/1.0/file/get/2230051151?profile=RESIZE_1024x1024&quot; width=&quot;647&quot; class=&quot;align-center&quot;/&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;strong&gt;&lt;span id=&quot;docs-internal-guid-22e7512a-af59-16f4-67a1-fbd4ef29269a&quot;&gt;&lt;span&gt;Figura 2&lt;/span&gt; &lt;span&gt;- Classe startup e referências adicionadas automaticamente.&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span id=&quot;docs-internal-guid-22e7512a-af5b-e9ab-33a6-3cabe5548310&quot;&gt;&lt;span&gt;A classe criada possui uma convenção, incluindo um método void nomeado Configuration e recebe uma instancia de um objeto que implemente a interface IAppBuilder, permitindo a compatibilidade de servers e hosts não somente utilizando o projeto Katana, mas futuras implementações de servers e hosts de terceiros.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p dir=&quot;ltr&quot;&gt;&lt;span&gt;O código da classe startup pode ser conferido a seguir:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;using Owin;&lt;/p&gt;
&lt;p&gt;[assembly: OwinStartup(typeof(KatanaDemo.Startup))]&lt;/p&gt;
&lt;p&gt;namespace KatanaDemo&lt;br/&gt; {&lt;br/&gt;     using AppFunc = Func&amp;lt;IDictionary&amp;lt;string, object&amp;gt;, Task&amp;gt;;&lt;/p&gt;
&lt;p&gt;public class Startup&lt;br/&gt;     {&lt;br/&gt;         public void Configuration(IAppBuilder app)&lt;br/&gt;         {&lt;br/&gt;             // app.UseFoo&lt;br/&gt;             // app.UseBar&lt;br/&gt;         }&lt;br/&gt;     }&lt;br/&gt; }&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;br/&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p dir=&quot;ltr&quot;&gt;&lt;span&gt;O método Configuration será responsável por registrar todos os componentes middleware para serem executados a cada requisição.&lt;/span&gt;&lt;/p&gt;
&lt;p dir=&quot;ltr&quot;&gt;&lt;em&gt;&lt;strong&gt;Middleware&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p dir=&quot;ltr&quot;&gt;&lt;span&gt;Os middlewares são componentes capazes de manusear o objeto&lt;/span&gt; &lt;span&gt;Environment Dictionary&lt;/span&gt;&lt;span&gt;, definido pela especificação OWIN. O middleware pode ser desde um simples componente de autenticação até um framework completo como o ASP.NET WebApi ou SignalR. A porta de entrada para a comunicação entre o server e o middleware é a assinatura do&lt;/span&gt; &lt;span&gt;Application Delegate demonstrado no post anterior&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;br/&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p dir=&quot;ltr&quot;&gt;&lt;em&gt;&lt;strong&gt;Servers e Hosts&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span id=&quot;docs-internal-guid-22e7512a-af5c-3588-5aef-5b31e64b79c8&quot;&gt;&lt;span&gt;Dentro do contexto do OWIN, os Hosts podem ser desde um server IIS, até aplicações Windows Forms e Serviços do Windows, sendo ele responsável pelo carregamento e finalização de componentes internos OWIN. Os Servers são responsáveis pela ligação TCP, construir o&lt;/span&gt; &lt;span&gt;Environment Dictionary&lt;/span&gt; &lt;span&gt;e processar cada um dos componentes registrados no IAppBuilder através da pipeline criada para a execução.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span id=&quot;docs-internal-guid-22e7512a-af5f-e553-0fad-d8974acb8452&quot;&gt;&lt;span&gt;Conforme conferimos na&lt;/span&gt; &lt;strong&gt;Figura 3&lt;/strong&gt;&lt;span&gt;, temos o diagrama demonstrando os participantes deste processo e como se associam.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p dir=&quot;ltr&quot;&gt;&lt;a href=&quot;http://storage.ning.com/topology/rest/1.0/file/get/2230051398?profile=original&quot; target=&quot;_self&quot;&gt;&lt;img src=&quot;http://storage.ning.com/topology/rest/1.0/file/get/2230051398?profile=original&quot; width=&quot;334&quot; class=&quot;align-center&quot; height=&quot;343&quot;/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p dir=&quot;ltr&quot; style=&quot;text-align: center;&quot;&gt;&lt;strong&gt;Figura 3 - &lt;span id=&quot;docs-internal-guid-22e7512a-af60-a563-6cb2-e8784c981723&quot;&gt;&lt;span&gt;Fluxo &lt;span id=&quot;docs-internal-guid-22e7512a-af6c-c6a3-21f1-e3e7d8263c00&quot;&gt;&lt;span&gt;(Host/Server/Pipeline)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p dir=&quot;ltr&quot;&gt;&lt;span&gt;Para darmos continuidade, utilizaremos o server demonstrado na&lt;/span&gt; &lt;strong&gt;Figura 3&lt;/strong&gt; &lt;span&gt;denominado SystemWeb, ele permitirá executarmos nossa aplicação dentro da pipeline do ASP.NET onde a mesma atuara como um Host e Server ao mesmo tempo. Para isso instalamos mais um componente do projeto Katana através de PMC. Execute o comando abaixo:&lt;/span&gt;&lt;/p&gt;
&lt;blockquote&gt;&lt;p dir=&quot;ltr&quot;&gt;&lt;span&gt;&amp;gt; Install-Package Microsoft.Owin.Host.SystemWeb&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p dir=&quot;ltr&quot; style=&quot;text-align: left;&quot;&gt;&lt;strong&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;br/&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p dir=&quot;ltr&quot;&gt;&lt;span&gt;Após concluir a instalação criaremos dois middlewares de exemplo em nosso projeto, um será responsável por devolver uma mensagem “hello katana” e o outro responderá qual o path solicitado através da URL digitada.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;public class HelloMiddleware&lt;br/&gt; {&lt;br/&gt;     readonly AppFunc _next;&lt;/p&gt;
&lt;p&gt;public HelloMiddleware(AppFunc next) { _next = next; }&lt;/p&gt;
&lt;p&gt;public async Task Invoke(IDictionary&amp;lt;string, object&amp;gt; env)&lt;br/&gt;     {&lt;br/&gt;         var responseBody = env[&quot;owin.ResponseBody&quot;] as Stream;&lt;br/&gt;         var hello = System.Text.Encoding.UTF8.GetBytes(&quot;Hello Katana!&quot;);&lt;br/&gt;         await responseBody.WriteAsync(hello, 0, hello.Length);&lt;/p&gt;
&lt;p&gt;await _next.Invoke(env);&lt;br/&gt;     }&lt;br/&gt; }&lt;/p&gt;
&lt;p&gt;public class PathMiddleware : OwinMiddleware&lt;br/&gt; {&lt;br/&gt;     public PathMiddleware(OwinMiddleware next) : base(next) { }&lt;/p&gt;
&lt;p&gt;public override async Task Invoke(IOwinContext context)&lt;br/&gt;     {&lt;br/&gt;         await context.Response.WriteAsync(String.Format(&quot; at {0}&quot;, context.Request.Path.Value));&lt;br/&gt;         //await Next.Invoke(new OwinContext(env));&lt;br/&gt;     }&lt;br/&gt; }&lt;/p&gt;
&lt;p&gt;&lt;span&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p dir=&quot;ltr&quot;&gt;&lt;span&gt;Entenderemos adiante cada middleware, e por hora para utilizar ambos, registraremos na seguinte ordem de nosso método Configuration na classe Startup.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;br/&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p dir=&quot;ltr&quot;&gt;&lt;span&gt;       public void Configuration(IAppBuilder app)&lt;/span&gt;&lt;/p&gt;
&lt;p dir=&quot;ltr&quot;&gt;&lt;span&gt;       {&lt;/span&gt;&lt;/p&gt;
&lt;p dir=&quot;ltr&quot;&gt;&lt;span&gt;           app.Use&amp;lt;HelloMiddleware&amp;gt;();&lt;/span&gt;&lt;/p&gt;
&lt;p dir=&quot;ltr&quot;&gt;&lt;span&gt;           app.Use&amp;lt;PathMiddleware&amp;gt;();&lt;/span&gt;&lt;/p&gt;
&lt;p dir=&quot;ltr&quot;&gt;&lt;span&gt;       }&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;br/&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p dir=&quot;ltr&quot;&gt;&lt;span&gt;Ao executarmos, nossa aplicação com o velho F5, ao acessarmos uma URL especifica como http://localhost:xxx/path/to/pipeline em nosso navegador, teremos o resultado conforme&lt;/span&gt; &lt;strong&gt;Figura 4&lt;/strong&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p dir=&quot;ltr&quot; style=&quot;text-align: center;&quot;&gt;&lt;span&gt;&lt;a href=&quot;http://storage.ning.com/topology/rest/1.0/file/get/2230051607?profile=original&quot; target=&quot;_self&quot;&gt;&lt;img src=&quot;http://storage.ning.com/topology/rest/1.0/file/get/2230051607?profile=original&quot; width=&quot;423&quot; class=&quot;align-center&quot;/&gt;&lt;/a&gt;&lt;strong&gt;&lt;span id=&quot;docs-internal-guid-22e7512a-af70-8856-3523-db68e0ba7a4c&quot;&gt;Figura 4 - Katana através da pipeline do ASP.NET&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p dir=&quot;ltr&quot; style=&quot;text-align: left;&quot;&gt;Nosso primeiro middleware segue uma convenção padrão respeitando a assinatura do Application Delegate, ou seja nosso método Invoke é assíncrono, e recebe o objeto Environment Dictionary, no exemplo obtivemos o objeto que corresponde ao corpo de resposta HTTP com a chave conforme a especificação OWIN descreve e escrevemos uma mensagem no objeto Stream. O segundo middleware é mais interessante pois herdamos de uma classe de auxilio do projeto Katana que visa facilitar a criação de middlewares, facilitando a manipulação de dados do Environment Dictionary de maneira tipada provendo um objeto do tipo OwinContext. Veja que internamente existem alguns recursos para facilitar a execução dos middlewares seguintes de forma encadeada, recebermos o próximo middleware a ser executado e decidirmos se o mesmo poderá ser executado ou não, este tipo de recurso é útil em cenários de autenticação.&lt;/p&gt;
&lt;p dir=&quot;ltr&quot; style=&quot;text-align: left;&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;br/&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p dir=&quot;ltr&quot; style=&quot;text-align: left;&quot;&gt;&lt;em&gt;&lt;strong&gt;Usando uma Framework real&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p dir=&quot;ltr&quot;&gt;&lt;span&gt;Desta vez utilizaremos um framework real em nossa aplicação, o ASP.NET WebApi. Comecemos instalando o pacote que habilita o WebApi para o uso com o OWIN. Pelo PMC execute o seguinte comando:&lt;/span&gt;&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;span&gt;&lt;span id=&quot;docs-internal-guid-22e7512a-af74-f8c0-97a1-f855daf1cafc&quot;&gt;&lt;span&gt;&amp;gt; Install-Package Microsoft.AspNet.WebApi.Owin&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;span&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p dir=&quot;ltr&quot;&gt;&lt;span&gt;Após instalação, criamos um&lt;/span&gt; &lt;span&gt;controller conforme&lt;/span&gt; &lt;span&gt;abaixo em nosso projeto:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;public class ValuesController : ApiController&lt;br/&gt;     {&lt;br/&gt;         public string[] Get()&lt;br/&gt;         {&lt;br/&gt;             return new[] { &quot;SignalR&quot;, &quot;ASP.NET MVC&quot;, &quot;WebApi&quot;, &quot;WebPages&quot;, &quot;WebForms&quot; };&lt;br/&gt;         }&lt;br/&gt;     }&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p dir=&quot;ltr&quot;&gt;&lt;span&gt;E registramos o WebApi em nosso objeto IAppBuilder através de um&lt;/span&gt; &lt;span&gt;extension method&lt;/span&gt; &lt;span&gt;chamada UseWebApi conforme abaixo, incluída com o pacote que acabamos de instalar.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;//..outras diretivas using&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;using System.Web.Http;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;public void Configuration(IAppBuilder app)&lt;br/&gt; {&lt;br/&gt;     var httpConfig = new HttpConfiguration();&lt;br/&gt;     httpConfig.Routes.MapHttpRoute(&quot;default&quot;, &quot;api/{controller}&quot;);&lt;/p&gt;
&lt;p&gt;app.UseWebApi(httpConfig);&lt;/p&gt;
&lt;p&gt;//… outros middlewares&lt;br/&gt; }&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;span id=&quot;docs-internal-guid-22e7512a-af76-7961-110c-6d34372663fd&quot;&gt;&lt;span&gt;Ao executarmos nossa aplicação e entrarmos com a URL http://localhost:xxx/api/values teremos o seguinte resultado conforme&lt;/span&gt; &lt;strong&gt;Figura 5&lt;/strong&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;&lt;a href=&quot;http://storage.ning.com/topology/rest/1.0/file/get/2230051529?profile=original&quot; target=&quot;_self&quot;&gt;&lt;img src=&quot;http://storage.ning.com/topology/rest/1.0/file/get/2230051529?profile=original&quot; width=&quot;385&quot; class=&quot;align-center&quot;/&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;strong&gt;Figura 5 - &lt;span id=&quot;docs-internal-guid-22e7512a-af77-a918-2e08-dc08f9316d26&quot;&gt;&lt;span&gt;WebApi em ação&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p dir=&quot;ltr&quot;&gt;&lt;span&gt;Com isso podemos utilizar o conhecimento que já temos para criar nossas aplicações utilizando outros frameworks disponíveis e compatíveis com o OWIN como ASP.NET SignalR ou NancyFx.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&lt;strong&gt;&lt;span&gt;&lt;span&gt;&lt;br/&gt;&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&lt;em&gt;&lt;strong&gt;Portando a aplicação&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p dir=&quot;ltr&quot;&gt;&lt;span&gt;Antes de concluirmos os exemplos vamos portar esta aplicação para execução em outro ambiente. Para tal, crie uma novo projeto neste mesmo solution utilizado, do tipo Console Application e inclua uma referência de nosso projeto anterior. Observação: Caso esteja no Visual Studio Express, crie o projeto como uma Class Library (Biblioteca de Classes *.dll) e através das propriedades (Alt+Enter) troque o output para Console Application conforme &lt;strong&gt;Figura 6&lt;/strong&gt;&lt;/span&gt;&lt;strong&gt;.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://storage.ning.com/topology/rest/1.0/file/get/2230051708?profile=original&quot; target=&quot;_self&quot;&gt;&lt;img width=&quot;750&quot; src=&quot;http://storage.ning.com/topology/rest/1.0/file/get/2230051708?profile=RESIZE_1024x1024&quot; width=&quot;606&quot; class=&quot;align-center&quot; height=&quot;122&quot;/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;strong&gt;Figura 6&lt;/strong&gt;&lt;/p&gt;
&lt;p dir=&quot;ltr&quot;&gt;&lt;span&gt;Para prosseguir, inclua os mesmos pacotes que foram incluídos no projeto anterior desta mesma solution, com exceção do server SystemWeb, que desta vez será substituído por dois outros componentes do projeto Katana. O primeiro, Microsoft.Owin.Hosting responsável por prover as classes necessárias para realizarmos o Host em um processo customizado, e segundo, o server Microsoft.Owin.Host.HttpListener. Observação: Necessário trocar o projeto Default no PMC para que sejam incluindo os novos pacotes no projeto correto. Execute o comando abaixo.&lt;/span&gt;&lt;/p&gt;
&lt;blockquote&gt;&lt;p dir=&quot;ltr&quot;&gt;&lt;span&gt;&amp;gt; Install-Package Microsoft.Owin.Hosting&lt;/span&gt;&lt;/p&gt;
&lt;p dir=&quot;ltr&quot;&gt;&lt;span&gt;&amp;gt; Install-Package Microsoft.Owin.Host.HttpListener&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;br/&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p dir=&quot;ltr&quot;&gt;&lt;span&gt;Em nossa classe Program do novo projeto incluímos o código abaixo. Inclua as referencias através da diretiva using para enxergar a classe Startup criada no projeto web anteriormente.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;public static void Main(string[] args)&lt;br/&gt; {&lt;br/&gt;     var app = WebApp.Start&amp;lt;Startup&amp;gt;(&quot;http://localhost:1234&quot;);&lt;/p&gt;
&lt;p&gt;Console.WriteLine(&quot;Pressione Enter para fechar...&quot;);&lt;br/&gt;     Console.ReadKey();&lt;/p&gt;
&lt;p&gt;app.Dispose();&lt;br/&gt; }&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;span id=&quot;docs-internal-guid-22e7512a-af7c-dfe9-3411-768226eda581&quot;&gt;&lt;span&gt;Ao rodar a aplicação com o F5, teremos o mesmo resultado do outro projeto porem fora do ambiente do IIS conforme&lt;/span&gt; &lt;strong&gt;Figura 7&lt;/strong&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;a href=&quot;http://storage.ning.com/topology/rest/1.0/file/get/2230051882?profile=original&quot; target=&quot;_self&quot;&gt;&lt;img src=&quot;http://storage.ning.com/topology/rest/1.0/file/get/2230051882?profile=original&quot; width=&quot;623&quot; class=&quot;align-center&quot; height=&quot;276&quot;/&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;strong&gt;&lt;span id=&quot;docs-internal-guid-22e7512a-af7d-b7d0-a0ce-556716927e6d&quot;&gt;&lt;span&gt;Figura 7&lt;/span&gt; &lt;span&gt;- Self-Hosting em ação&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p dir=&quot;ltr&quot;&gt;&lt;em&gt;&lt;strong&gt;Conclusão&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p dir=&quot;ltr&quot;&gt;&lt;span&gt;Conforme conferimos, foi introduzido os conceitos práticos iniciais para a utilização do projeto Katana e o porte de uma aplicação OWIN para outro Host e Server sem necessidade de alteração no código fonte. Seria possível portar para outras plataformas como o runtime Mono ao invés do .NET Framework. Esta independência abre caminhos para muitos recursos, incluindo ferramentas para automação de testes de integração sem a necessidade de levantar o IIS, e isto é só a ponta do que é possível fazer. Vamos ficar atentos aos próximos passos do projeto Katana através do seu Roadmap e as contribuições ao OWIN criados pela comunidade. Para maiores detalhes consulte as referências deste post. Até a próxima e bons estudos!!!&lt;/span&gt;&lt;/p&gt;
&lt;p dir=&quot;ltr&quot;&gt;&lt;em&gt;&lt;strong&gt;Código utilizado neste post:&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p dir=&quot;ltr&quot;&gt;&lt;a href=&quot;http://sdrv.ms/1amhhoQ&quot;&gt;&lt;span&gt;http://sdrv.ms/1amhhoQ&lt;/span&gt;&lt;/a&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&lt;strong&gt;&lt;span&gt;&lt;span&gt;&lt;br/&gt;&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p dir=&quot;ltr&quot;&gt;&lt;em&gt;&lt;strong&gt;Referências:&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p dir=&quot;ltr&quot;&gt;&lt;a href=&quot;http://owin.org&quot;&gt;http://owin.org&lt;/a&gt;&lt;/p&gt;
&lt;p dir=&quot;ltr&quot;&gt;&lt;a href=&quot;http://katanaproject.codeplex.com/&quot;&gt;http://katanaproject.codeplex.com&lt;/a&gt;&lt;/p&gt;
&lt;p dir=&quot;ltr&quot;&gt;&lt;a href=&quot;http://www.asp.net/aspnet/overview/owin-and-katana/an-overview-of-project-katana&quot;&gt;&lt;span&gt;http://www.asp.net/aspnet/overview/owin-and-katana/an-overview-of-project-katana&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p dir=&quot;ltr&quot;&gt;&lt;a href=&quot;http://msdn.microsoft.com/en-us/magazine/dn451439.aspx&quot;&gt;&lt;span&gt;http://msdn.microsoft.com/en-us/magazine/dn451439.aspx&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p dir=&quot;ltr&quot;&gt;&lt;/p&gt;</content>
<category term="Brasil" />

                                    </entry>
                            <entry>
                    <title>Projeto Katana e o desenvolvimento web com .NET - Introdução</title>
                    <link rel="alternate" href="http://devbrasil.net/xn/detail/2307362:BlogPost:251526"/>
                                        <id>tag:devbrasil.net,2013-12-01:2307362:BlogPost:251526</id>
                                        <updated>2013-12-01T18:30:00.000Z</updated>
                    
                                            <author>
                            <name>Wilian Santos</name>
                            <uri>http://devbrasil.net/profile/WilianSantos</uri>
                        </author>
                    
                    <summary type="html">
                        &lt;p dir=&quot;ltr&quot;&gt;&lt;span&gt;Este post é dividido em duas partes, a primeira tem o papel de introduzir o projeto Katana criado pela Microsoft e a especificação OWIN e o que isso contribui ao desenvolvimento web utilizando o .NET Framework, a segunda parte terá como papel, introduzir a parte prática. Porém antes de descrever o Katana é necessário entender as motivações do projeto.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;&lt;br&gt;&lt;/br&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p dir=&quot;ltr&quot;&gt;&lt;em&gt;&lt;strong&gt;Desafios…&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;                    </summary>

                    <content type="html">
&lt;p dir=&quot;ltr&quot;&gt;&lt;span&gt;Este post é dividido em duas partes, a primeira tem o papel de introduzir o projeto Katana criado pela Microsoft e a especificação OWIN e o que isso contribui ao desenvolvimento web utilizando o .NET Framework, a segunda parte terá como papel, introduzir a parte prática. Porém antes de descrever o Katana é necessário entender as motivações do projeto.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;&lt;br/&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p dir=&quot;ltr&quot;&gt;&lt;em&gt;&lt;strong&gt;Desafios&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p dir=&quot;ltr&quot;&gt;&lt;span&gt;Analisando rapidamente a linha do tempo do ASP.NET, sua primeira versão trouxe organização de código e introduziu o paradigma orientado a objetos em contraste as aplicações construídas com o asp clássico, e introduziu também um ambiente visual com controles de servidor (Server Controls) que trazia um ambiente similar ao que desenvolvedores VB6 tinham, visando diminuir a curva de aprendizagem e adoção do desenvolvimento web para desenvolvedores desktop.   &lt;/span&gt;&lt;/p&gt;
&lt;p dir=&quot;ltr&quot;&gt;&lt;span&gt;No entanto a natureza do ASP.NET era monolítica, contendo todas as funcionalidades como os objetos relacionados ao core do HTTP e ao framework WebForms em uma unica dll (System.Web) com um acoplamento a infraestrutura especifica de host do IIS, outro detalhe é que o mesmo fazia parte das releases do Framework .NET. Com este cenário o time do ASP.NET encontrou dificuldades em entregar novos recursos e melhorias conforme a evolução do desenvolvimento para web em geral acontecia.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;&lt;br/&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p dir=&quot;ltr&quot;&gt;&lt;strong&gt;&lt;em&gt;Evolução&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p dir=&quot;ltr&quot;&gt;&lt;span&gt;Devido a evolução constante e novos padrões introduzidos ao desenvolvimento web como o MVC (Model View Controller), foi criado o ASP.NET MVC habilitando alem do desenvolvimento sobre um novo paradigma, também a entrega de releases sem vinculo com as releases do Framework .NET, introduzindo flexibilidade ao time do ASP.NET para introduzir novos recursos. Outros produtos como ASP.NET Web Api e SignalR foram introduzidos mais tarde, desta vez independentes da infraestrutura monolítica do core do ASP.NET e o host especifico do IIS.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;&lt;br/&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p dir=&quot;ltr&quot;&gt;&lt;em&gt;&lt;strong&gt;Futuro já presente&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p dir=&quot;ltr&quot;&gt;&lt;span&gt;Com a adoção de tecnologias como Nodejs e projetos como o Rack que define uma interface entre servidores e frameworks Ruby, a comunidade de desenvolvedores .NET começou a fomentar ideias e discussões no grupo NET HTTP Abstractions, concebendo uma especificação que tinha como proposito definir uma interface de abstração entre servidores e aplicações permitindo um ecossistema rico baseado em componentes para aplicações e servidores web baseados em .NET, dando vida ao OWIN (Open Web Interface for .NET). Segundo a especificação do OWIN, poderíamos rodar aplicações web agnósticas de servidor promovendo uma maior autonomia e a possibilidade de incluir recursos/componentes a sua aplicação conforme necessidade.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;&lt;br/&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p dir=&quot;ltr&quot;&gt;&lt;em&gt;&lt;strong&gt;OWIN&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p dir=&quot;ltr&quot;&gt;&lt;span&gt;Os objetivos do OWIN garantem que novos componentes possam ser facilmente desenvolvidos e consumidos e que aplicações possam ser portadas para diferentes Hosts permitindo inclusive porte para outros sistemas operacionais, como ambiente Unix (Linux/Mac) sem necessidade de recompilação.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;&lt;br/&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p dir=&quot;ltr&quot;&gt;&lt;span&gt;A abstração criada é consistida em dois elementos chave da especificação:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Environment Dictionary - Refere-se a estrutura de dados responsável por armazenar as informações de requisição/resposta da aplicação.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p dir=&quot;ltr&quot;&gt;&lt;span&gt;        &lt;span style=&quot;color: #0000ff;&quot;&gt;&lt;em&gt;IDictionary&amp;lt;string, object&amp;gt; env;&lt;/em&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p dir=&quot;ltr&quot;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Application Delegate - A assinatura de um delegate que define uma interface entre os servidores e os componentes em uma aplicação compatível com o OWIN. Este delegate recebe um dicionário com todas informações de requisição/resposta e retorna objeto Task referente a execução assíncrona de seu componente.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p dir=&quot;ltr&quot;&gt;&lt;em&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;        using AppFunc = Func&amp;lt;&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p dir=&quot;ltr&quot;&gt;&lt;em&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;             IDictionary&amp;lt;string, object&amp;gt;, // environment dictionary&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p dir=&quot;ltr&quot;&gt;&lt;em&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;             Task&amp;gt;; // tarefa assíncrona&lt;/span&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p dir=&quot;ltr&quot;&gt;&lt;span&gt;Não há nenhuma dependência de tipos externos alem da biblioteca padrão do Framework .NET criando uma dependência minima.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;&lt;br/&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p dir=&quot;ltr&quot;&gt;&lt;em&gt;&lt;strong&gt;Projeto Katana&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p dir=&quot;ltr&quot;&gt;&lt;span&gt;Dentro deste contexto, o projeto Katana é a contribuição da Microsoft a especificação OWIN. O projeto não traz um novo framework Microsoft para desenvolvimento web, mas sim um conjunto de ferramentas para construir e compor aplicações baseadas na especificação OWIN criando um ecossistema sustentável para o desenvolvimento web. Produtos como o ASP.NET Web.Api e ASP.NET SignalR já possuem suporte ao OWIN, assim como outros projetos open-source para .NET como FubuMVC, ServiceStack e NancyFx. O projeto Katana disponibiliza vários componentes, entre eles componentes que permitem realizar o host de aplicações web em processos customizados como um serviço do windows ou executáveis e componentes para realizar o host ou servir aplicações compatíveis com o OWIN entre outros componentes.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;&lt;br/&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p dir=&quot;ltr&quot;&gt;&lt;span&gt;Este post introduziu de forma simples o conceito e motivos por trás do projeto Katana e o que vem a ser o OWIN, na segunda parte, abordaremos uma visão mais especifica aplicada a pratica. Para maiores detalhes do projeto Katana e OWIN os links de referências podem ser consultados. Até a próxima parte deste post e bons estudos!&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;&lt;br/&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p dir=&quot;ltr&quot;&gt;&lt;em&gt;&lt;strong&gt;Referências:&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p dir=&quot;ltr&quot;&gt;&lt;a href=&quot;http://owin.org&quot;&gt;http://owin.org&lt;/a&gt;&lt;/p&gt;
&lt;p dir=&quot;ltr&quot;&gt;&lt;a href=&quot;http://katanaproject.codeplex.com/&quot;&gt;http://katanaproject.codeplex.com&lt;/a&gt;&lt;/p&gt;
&lt;p dir=&quot;ltr&quot;&gt;&lt;a href=&quot;http://www.asp.net/aspnet/overview/owin-and-katana/an-overview-of-project-katana&quot;&gt;&lt;span&gt;http://www.asp.net/aspnet/overview/owin-and-katana/an-overview-of-project-katana&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p dir=&quot;ltr&quot;&gt;&lt;span&gt;&lt;a href=&quot;http://msdn.microsoft.com/en-us/magazine/dn451439.aspx&quot;&gt;http://msdn.microsoft.com/en-us/magazine/dn451439.aspx&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span id=&quot;docs-internal-guid-19e3c9fa-af43-d28a-e168-090b543c1ad2&quot;&gt;&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;</content>
<category term="Brasil" />

                                    </entry>
                            <entry>
                    <title>Qualidade de software não importa, o que vale é entregar</title>
                    <link rel="alternate" href="http://devbrasil.net/xn/detail/2307362:BlogPost:246615"/>
                                        <id>tag:devbrasil.net,2013-10-17:2307362:BlogPost:246615</id>
                                        <updated>2013-10-17T13:11:38.000Z</updated>
                    
                                            <author>
                            <name>Ramon Durães</name>
                            <uri>http://devbrasil.net/profile/ramonduraes</uri>
                        </author>
                    
                    <summary type="html">
                        &lt;p&gt;&lt;a href=&quot;http://storage.ning.com/topology/rest/1.0/file/get/2230051689?profile=original&quot; target=&quot;_self&quot;&gt;&lt;img class=&quot;align-left&quot; src=&quot;http://storage.ning.com/topology/rest/1.0/file/get/2230051689?profile=RESIZE_320x320&quot; width=&quot;240&quot;&gt;&lt;/img&gt;&lt;/a&gt; &lt;span style=&quot;font-size: 13px;&quot;&gt;Durante anos acompanhando o mercado de software no Brasil venho me dedicando a conversar com os profissionais de tecnologia em todos os segmentos de empresas e o tema qualidade de software é sempre algo deixado em segundo plano na agenda dos gestores, sendo visto erroneamente como custo e mais trabalho para criar uma solução. Indo contra essa…&lt;/span&gt;&lt;/p&gt;                    </summary>

                    <content type="html">
&lt;p&gt;&lt;a href=&quot;http://storage.ning.com/topology/rest/1.0/file/get/2230051689?profile=original&quot; target=&quot;_self&quot;&gt;&lt;img width=&quot;240&quot; src=&quot;http://storage.ning.com/topology/rest/1.0/file/get/2230051689?profile=RESIZE_320x320&quot; width=&quot;240&quot; class=&quot;align-left&quot;/&gt;&lt;/a&gt;&lt;span style=&quot;font-size: 13px;&quot;&gt;Durante anos acompanhando o mercado de software no Brasil venho me dedicando a conversar com os profissionais de tecnologia em todos os segmentos de empresas e o tema qualidade de software é sempre algo deixado em segundo plano na agenda dos gestores, sendo visto erroneamente como custo e mais trabalho para criar uma solução. Indo contra essa abordagem o Forrester fez um excelente estudo EM 2009 onde comprova que corrigir um bug em produção chega a custar 30 vezes mais, coisa que você já deve saber, porém poucos se dedicam a estudar mais a fundo a origem e como resolver.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Essa visão aplicada em fazer os projetos de qualquer jeito criando sistemas de produção “pseudo” produtivos tem prejudicado toda a indústria de software ao longo dos anos, contribuindo justamente para o contrário, resultando em software mal projetado, inseguro e nada produtivo, permeado por falhas frequentes e um retrabalho absurdo, consumindo os desenvolvedores, usuários e demais participantes do ciclo do projeto.&lt;/p&gt;
&lt;p&gt;É comum receber o contato de clientes relatando que desenvolvedores querem testes, mas sempre chegam com aquele tom de deboche e uma dúvida no ar: “para quê?”, como uma grande interrogação na cabeça do gestor, uma vez que para ele está indo tudo bem, maravilhoso e que fazer software é assim mesmo, árduo, complexo, repetitivo, falho e, principalmente, essas dificuldades só existem devido à características do negócio dele e por isso eles sofrem e estão condenados a viver assim sempre planejando e vendendo sonhos que nunca são entregues conforme o previsto.&lt;/p&gt;
&lt;p&gt;Eu imagino que você certamente se identificou com algo dito até este momento, afinal esses fatos refletem a mais pura essência de como se “conduz” e se pensa um projeto de software nas condições do vai fazendo e coloca em produção que eu assumo (“Go Horse”), pode confiar. Estamos no momento importante para você se permitir uma pausa (“Eu sei que você já escutou isso”) para refletir se esse processo de trabalho na raça, força bruta e retrabalho é realmente a única forma de se construir software e repensar onde foi parar toda a modernização tecnológica que foi criada nos últimos 15 anos e continua sendo ignorada.&lt;/p&gt;
&lt;p&gt;Em todas as minhas pesquisas no mercado de software tenho percebido que ninguém se preocupa em contabilizar o prejuízo, retrabalho, insatisfação de todos que participam, inclusive você e os usuários do sistema, mas, principalmente, o custo para manter um software na UMB (Unidade multiplica bug, equivalente a UTI para seres humanos) durante toda a vida do mesmo, temendo qualquer mudança, atualização que se torna cada vez mais nociva a estabilização do projeto.&lt;/p&gt;
&lt;p&gt;Se você tem um software hoje hospedado na UMB ((Unidade multiplica bug) sabe responder rapidamente o tamanho do backlog de mudanças que não consegue implementar por falta de tempo (“$”); sabe responder os seus sonhos não realizados que impedem de atender o cliente de forma mais moderna com um software simples e fácil de atualizar, pois está preso em um ciclo vicioso de manutenção recorrente que consome todo o seu tempo de repensar, inovar e progredir no produto.&lt;/p&gt;
&lt;p&gt;Não existe produtividade ou evolução com segurança em software feito de qualquer jeito sem sustentação. É o mesmo que ter um edifício sem a devida fundação que sustente a carga de pessoas. Eu sei que as palavras carga e escalar são proibidas de falar em projetos de software, mas chega um momento que não aguentamos e temos que colocar o dedo na ferida e começar a dizer não. Quando eu digo não, é não mesmo. Chegou o momento de tomar uma atitude de mudança e parar de esperar resultados sem você fazer nada de diferente.&lt;/p&gt;
&lt;p&gt;Para pensar em um ciclo moderno de software é importante entender e discutir os requisitos desde o início, tornando as pessoas parte do processo. É preciso pensar mais no problema a ser resolvido antes mesmo de iniciar a codificação. Com as tecnologias modernas é possível pensar e separar corretamente a inteligência da aplicação criando código simples e de fácil manutenção que quando integrado a testes unitários automatizados passam a compartilhar a qualidade para todos do projeto. Hoje podemos criar ciclos de qualidade indo desde funcionalidades até carga usando serviços de nuvem, o que aumenta a sua produtividade com a redução do retrabalho eliminando problemas recorrentes que nunca se resolvem numa abordagem tradicional.&lt;/p&gt;
&lt;p&gt;Adotar práticas de qualidade é mais atitude do que qualquer outra ação e precisa estar na mente de todos que participam do ciclo de desenvolvimento de software. Você precisa conquistar o coração do seu cliente com um produto orientado aos seus desejos e que funcione corretamente. Qualquer pessoa que contribuir no projeto precisa ter em mente o quanto é importante aquela qualidade que ele está somando ao projeto.&lt;/p&gt;
&lt;p&gt;Hoje não existe mais desculpa para viver no mundo de “Alice do software”, achando que jogar a sujeira debaixo do tapete e deixar o cliente pagar a conta da falta de qualidade é a solução. Um cliente insatisfeito custa muito caro para o negócio. Ele vai reclamar do produto e esse ciclo repetitivo de ir e voltar desestimula todo a equipe que perde a percepção de entrega do projeto. Por isso, hoje, pensar em qualidade é fundamental para ter produtividade e satisfação entre todos. Reduza os custos do seu projeto eliminando defeitos recorrentes e repetitivos ainda no início.&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;Para saber mais:&lt;/strong&gt;&lt;br/&gt;&lt;a href=&quot;http://devbrasil.net/group/alm&quot; target=&quot;_self&quot;&gt;Aprofunde seus conhecimentos sobre este tema na comunidade ALM&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;/p&gt;</content>
<category term="Brasil" />

                                    </entry>
                            <entry>
                    <title>NoSQL: uma nova necessidade !</title>
                    <link rel="alternate" href="http://devbrasil.net/xn/detail/2307362:BlogPost:241703"/>
                                        <id>tag:devbrasil.net,2013-10-14:2307362:BlogPost:241703</id>
                                        <updated>2013-10-14T20:30:37.000Z</updated>
                    
                                            <author>
                            <name>Paulo Moura</name>
                            <uri>http://devbrasil.net/profile/PauloMoura163</uri>
                        </author>
                    
                    <summary type="html">
                        &lt;p align=&quot;center&quot;&gt;&lt;b&gt;NoSQL: uma nova necessidade !&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Desde 1987, quando a linguagem SQL virou um padrão ISO, os bancos de dados relacionais (definidos em 1970 por Edgar Codd) tornaram-se um padrão para o desenvolvimento de aplicações com bases de dados. SQL, relacional e RDBMS (Relational DataBase Management System) tornaram-se quase sinônimos e instalaram-se na mente de todos os desenvolvedores por décadas. Ninguém imaginava outra forma de trabalhar com grandes massas de…&lt;/p&gt;                    </summary>

                    <content type="html">
&lt;p align=&quot;center&quot;&gt;&lt;b&gt;NoSQL: uma nova necessidade !&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Desde 1987, quando a linguagem SQL virou um padrão ISO, os bancos de dados relacionais (definidos em 1970 por Edgar Codd) tornaram-se um padrão para o desenvolvimento de aplicações com bases de dados. SQL, relacional e RDBMS (Relational DataBase Management System) tornaram-se quase sinônimos e instalaram-se na mente de todos os desenvolvedores por décadas. Ninguém imaginava outra forma de trabalhar com grandes massas de dados.&lt;/p&gt;
&lt;p&gt;Mas o cenário mudou ! O custo dos dispositivos de armazenamento de dados caiu vertiginosamente, o poder de processamento disparou, a Internet passou a exigir bancos de dados de tamanhos que antes não eram imaginados e os órgãos de segurança e controle passaram a vislumbrar a possibilidade de criar bases de dados gigantescas que pudessem satisfazer seu apetite de controlar os cidadãos.&lt;/p&gt;
&lt;p&gt;Como resposta, várias organizações passaram a desenvolver e utilizar bancos de dados não relacionais, que suportassem suas demandas. As formas normais foram esquecidas e a regra passou a ser a velocidade de acesso e resposta às requisições. Não tenho notícia de quando as organizações governamentais iniciaram este movimento, mas 5 empresas privadas foram pioneiras: em 2004 a Amazon iniciou o desenvolvimento do banco de dados hoje comercializado como Dynamo DB e a Google iniciou o desenvolvimento do BigTable, lançado em 2006. Seguindo a inspiração da Amazon, a LinkedIn iniciou o projeto Voldemort criando uma base de dados não relacional e não SQL para gerenciar seus 135 milhões de membros. Yahoo criou o Sherpa em 2009. FaceBook baseou-se nas soluções da Amazon e da Google e desenvolveu a sua, que passou a ser distribuída como código aberto em 2008 com o nome de Apache Cassandra.&lt;/p&gt;
&lt;p&gt;O que estes 5 bancos de dados tem em comum ?   Deixaram de ser relacionais, abandonaram o padrão SQL e o conceito ACID (Atomicidade, Consistência, Isolamento e Durabilidade). As formas normais foram flexibilizadas e surgiram os termos  N1NF (non first normal form) e MRNN (Modelo relacional Não Normalizado). As técnicas de modelagem mudaram e agora falamos em denormalização, agregação, junções laterais, redução dimensional, índices compostos e distribuição de chaves em vários servidores. A prioridade passou a ser &lt;u&gt;alta performance&lt;/u&gt; e &lt;u&gt;alta escalabilidade&lt;/u&gt;.&lt;/p&gt;
&lt;p&gt;A performance alcançada nestes projetos foi surpreendente, superior a 10 vezes a conseguida com bancos relacionais, e em muitas arquiteturas a performance se mantém praticamente constante independente do tamanho da base de dados.  &lt;u&gt;A performance passou a ser previsível !&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;O sucesso desta abordagem levou a criação de vários novos bancos de dados não relacionais, muitos de código aberto, alguns suportando SQL, outros com ACID, cada um com suas características especiais. Muitos armazenam os dados em formato JSON. Todos passaram a ser classificados como NoSQL.&lt;/p&gt;
&lt;p&gt;O termo NoSQL foi utilizado pela primeira vez em 1998 quando Carlos Strozzi criou um banco de dados relacional não SQL. Este termo voltou a ser utilizado em 2009 por Johan Oskarsson em um evento sobre banco de dados de código aberto. Na verdade seu significado era de ser não MySQL, não Sql Server, etc ... NoSQL passou a ser utilizado para designar todos os bancos de dados não relacionais (NoRDBMS), e entendido como Not Only SQL por alguns.&lt;/p&gt;
&lt;p&gt;Quatro arquiteturas se destacaram e hoje podemos classificar os bancos de dados NoSQL em 5 tipos:&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;b&gt;1. Key-Value Databases&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;É a arquitetura mais simples, utilizada pela primeira vez no Amazon Dynamo DB.&lt;/p&gt;
&lt;p&gt;                &lt;span style=&quot;color: #ff6600;&quot;&gt;cor : vermelho&lt;/span&gt;&lt;br/&gt; &lt;span style=&quot;color: #ff6600;&quot;&gt;                idade : 30            &lt;/span&gt; &lt;br/&gt; &lt;span style=&quot;color: #ff6600;&quot;&gt;                nome : Ana&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Vários pares chave/valor podem pertencer a um conjunto geralmente chamado de &lt;i&gt;Bucket&lt;/i&gt;.&lt;/p&gt;
&lt;p&gt;Exemplo de programação:&lt;/p&gt;
&lt;p&gt;                &lt;span style=&quot;color: #ff6600;&quot;&gt;Set(chave,valor)                 // cria um par chave-valor&lt;/span&gt;&lt;br/&gt; &lt;span style=&quot;color: #ff6600;&quot;&gt;                Get(chave)                        // lê o conteúdo da chave&lt;/span&gt;&lt;br/&gt; &lt;span style=&quot;color: #ff6600;&quot;&gt;                Delete(chave)                     // exclui a chave&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Exemplos de bancos de dados key-value: SimpleDB, Voldemort, Tokyo Cabinet, Oracle NoSQL, MemcaheDB, Redis, Hbase, Riak, FatDB, Hibari, Aerospike, BangDB.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;b&gt;2. Tabular Databases (Column Family)&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Acrescenta mais um grau de complexidade à arquitetura anterior, antes tínhamos bucket, key e value. Agora temos Column family, Key, Column name e value.&lt;/p&gt;
&lt;p&gt;             &lt;span style=&quot;color: #ff6600;&quot;&gt;   Key 4564564 ;  nome : Ana ; idade : 30 ; cidade : São Paulo&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Uma Column Family de assemelha a uma tabela de um banco de dados relacional, e geralmente precisa ter suas colunas predefinidas.&lt;/p&gt;
&lt;p&gt;Exemplo de programação:&lt;/p&gt;
&lt;p&gt;                &lt;span style=&quot;color: #ff6600;&quot;&gt;Set pessoas[‘4564564’] [‘nome’]=’Ana’                         /&lt;/span&gt;&lt;br/&gt; &lt;span style=&quot;color: #ff6600;&quot;&gt;                Set pessoas[‘4564564’] [‘idade’]=30                            / inclui uma coluna&lt;/span&gt;&lt;br/&gt; &lt;span style=&quot;color: #ff6600;&quot;&gt;                Set pessoas[‘4564564’] [‘cidade’]=’São Paulo’               /&lt;/span&gt;&lt;br/&gt; &lt;span style=&quot;color: #ff6600;&quot;&gt;                Get pessoas[‘4564564’]                                            // lê uma coluna&lt;/span&gt;&lt;br/&gt; &lt;span style=&quot;color: #ff6600;&quot;&gt;                Drop column pessoas[‘4564564’]                                /// exclui uma coluna&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Exemplos de bancos de dados tabulares:  Cassandra, Hypertable, Apache Hbase, Apache Accumulo, BigTable, Mnesia, OpenLink Virtuoso, Clouddata, Cloudera, HPCC, Stratosphere.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;b&gt;3. Document Databases&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Inspirados no banco de dados Lotus Notes, agora comercializado como Lotus Domino, basicamente permite o armazenamento de registros aleatórios, geralmente sem necessidade de pré-definição.&lt;/p&gt;
&lt;p&gt;              &lt;span style=&quot;color: #ff6600;&quot;&gt;  idpessoa : 4564564 ; nome : Ana ; idade : 30 ; cidade : São Paulo&lt;/span&gt;&lt;br/&gt; &lt;span style=&quot;color: #ff6600;&quot;&gt;                idpessoa : 6865476 ; nome : Bia ; estado : PB ; sexo : F&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Cada documento pode ter vários pares de valores e pertencer a uma coleção de documentos.&lt;/p&gt;
&lt;p&gt;Exemplo de programação:&lt;/p&gt;
&lt;p&gt;                &lt;span style=&quot;color: #ff6600;&quot;&gt;dp.pessoa.insert( { idpessoa : 4564564,&lt;/span&gt;&lt;br/&gt; &lt;span style=&quot;color: #ff6600;&quot;&gt;                                                     nome: “Ana”&lt;/span&gt;&lt;br/&gt; &lt;span style=&quot;color: #ff6600;&quot;&gt;                                                     idade: 30&lt;/span&gt;&lt;br/&gt; &lt;span style=&quot;color: #ff6600;&quot;&gt;                                                     cidade: “São Paulo”      }  )    // inclui um documento&lt;/span&gt;&lt;br/&gt; &lt;span style=&quot;color: #ff6600;&quot;&gt;                db.pessoas.find( {idpessoa : 4564564} )                        // lê um documento&lt;/span&gt;&lt;br/&gt; &lt;span style=&quot;color: #ff6600;&quot;&gt;                db.pessoas.remove( {idpessoa : 4564564} )                   // exclui um documento&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Exemplos de bancos de dados de documentos: MongoDB, Apache CouchDB, RavenDB, BaseX, eXist, Cloudant, Clusterpoint, Jackrabbit, IBM Lotus Domino, OrientDB, Sedna, TokuMX, ElasticSearch, RethinkDB, ThruDB, Terrastore, RaptorDB.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;b&gt;4. Graph Databases&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;São bancos de dados que utilizam estruturas gráficas compostas de nodos e barras. Tantos os nodos quanto as barras podem possuir propriedades que conforme o banco podem dispensar uma pré-definição.&lt;/p&gt;
&lt;p&gt;              &lt;span style=&quot;color: #ff6600;&quot;&gt;  “Ana”(idade:30)    “reside em”(desde:1997)    “Porto Alegre”(estado:RS)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Cada nodo possui seu endereço ID e o endereço das barras a ele ligadas, cada barra de ligação possui a direção, seu ID próprio e os IDs dos nodos interligados.&lt;/p&gt;
&lt;p&gt;Para o caso acima, em um banco de dados relacional teríamos 3 tabelas:&lt;/p&gt;
&lt;p&gt;     &lt;span style=&quot;color: #ff6600;&quot;&gt;&lt;b&gt;Pessoa       &lt;/b&gt; &lt;span class=&quot;font-size-1&quot; style=&quot;color: #999999;&quot;&gt;-&lt;u&gt;1 x MUITOS&lt;/u&gt;-&amp;gt;&lt;/span&gt;   &lt;span style=&quot;color: #800000;&quot;&gt; &lt;/span&gt; &lt;b&gt;&lt;span style=&quot;color: #800000;&quot;&gt;Residência &lt;/span&gt;              &lt;/b&gt; &lt;span class=&quot;font-size-1&quot; style=&quot;color: #999999;&quot;&gt;-&lt;u&gt;MUITOS x 1&lt;/u&gt;-&amp;gt;&lt;/span&gt;&lt;b&gt;   Cidade&lt;/b&gt;&lt;/span&gt;&lt;br/&gt;&lt;span style=&quot;color: #ff6600;&quot; class=&quot;font-size-1&quot;&gt;     IdPessoa – Nome       &lt;span style=&quot;color: #800000;&quot;&gt;IdResidência - IdPessoa – Ano – IdCidade&lt;/span&gt;                  IdCidade – Nome&lt;/span&gt;&lt;br/&gt;&lt;span style=&quot;color: #ff6600;&quot;&gt;     IdAna – Ana          &lt;span style=&quot;color: #800000;&quot;&gt;Id1997   -   IdAna – 1997 – IdPoa&lt;/span&gt;                 IdPoa – Porto Alegre&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Neste caso, sempre que fosse necessário acessar os dados da residência de Ana, precisaríamos utilizar uma pesquisa indexada na tabela “Residência” para encontrar “IdAna” e outra na tabela “Cidade” para encontrar “IdPoa”. Estas pesquisas por chave binária em uma base com bilhões de registros exigiriam centenas ou milhares de acessos e sua performance se degradaria ainda mais, cada vez que a base de dados aumentasse.&lt;/p&gt;
&lt;p&gt;                &lt;span style=&quot;color: #ff6600;&quot;&gt;&lt;b&gt;&lt;u&gt;Ana&lt;/u&gt;&lt;/b&gt;                           &lt;b&gt;&lt;u&gt;1997&lt;/u&gt;&lt;/b&gt;                                     &lt;b&gt;&lt;u&gt;Porto Alegre&lt;/u&gt;&lt;/b&gt;&lt;/span&gt;&lt;br/&gt; &lt;span style=&quot;color: #ff6600;&quot;&gt;                * IdAna                     * Id1997                                 * IdPoa&lt;/span&gt; &lt;br/&gt; &lt;span style=&quot;color: #ff6600;&quot;&gt;                out: Id1997                in: IdAna                                 in: Id1997&lt;/span&gt;&lt;br/&gt;&lt;span style=&quot;color: #ff6600;&quot;&gt;                                               out: IdPoa&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;No banco de dados não relacional tipo &lt;i&gt;Graph&lt;/i&gt;, serão necessários apenas um acesso à tabela “Residência” e outro à tabela “Cidade”, pois estando em “Ana” temos o endereço da barra de ligação “Residência” e nesta temos o endereço de “Porto Alegre”. E serão sempre dois acessos, independente do tamanho da base de dados ! Não existe uma modelagem de dados relacionando as tabelas, o relacionamento é feito caso a caso pelas barras de ligação.&lt;/p&gt;
&lt;p&gt;Nestas bases de dados, as operações de leitura transversal são praticamente instantâneas, precisamos apenas de um nodo raiz onde iniciar nossas buscas. É claro que para chegar ao nodo raiz, teremos que nos utilizar de algoritmos semelhantes aos utilizados nas bases relacionais. Mas em uma transação on-line, o nodo raiz é definido no início da operação.&lt;/p&gt;
&lt;p&gt;Exemplo de programação:&lt;/p&gt;
&lt;p&gt; &lt;span style=&quot;color: #ff6600;&quot; class=&quot;font-size-2&quot;&gt;Create vertex Pessoa set nome = ’Ana’, idade = 30                    // inclui o nodo Ana&lt;/span&gt;&lt;br/&gt;&lt;span style=&quot;color: #ff6600;&quot; class=&quot;font-size-2&quot;&gt; Create vertex Cidade set nome = ’Porto Alegre’, estado = ‘RS’      // inclui o nodo Porto Alegre&lt;/span&gt;&lt;br/&gt;&lt;span style=&quot;color: #ff6600;&quot; class=&quot;font-size-2&quot;&gt; Create edge Residencia&lt;/span&gt;&lt;br/&gt;&lt;span style=&quot;color: #ff6600;&quot; class=&quot;font-size-2&quot;&gt;          from (select from Pessoa where nome = ’Ana’)&lt;/span&gt;&lt;br/&gt;&lt;span style=&quot;color: #ff6600;&quot; class=&quot;font-size-2&quot;&gt;          to    (select from Cidade where nome = ’Porto Alegre’)       // inclui a ligação&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Exemplos de bancos de dados tipo &lt;i&gt;Graph&lt;/i&gt;: DEX, Neo4j, OrientDB, InfiniteGraph, AllegroGraph, FlockDB, Sones GraphDB, OWLIM, VelocityGraph, Trinity, Meronymy, Fallen 8.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;b&gt;5. Outros Bancos de Dados não relacionais&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Na prática muitos bancos de dados não relacionais usam uma ou várias das 4 arquiteturas acima simultaneamente. É comum encontrar o mesmo banco de dados em várias classificações.&lt;/p&gt;
&lt;p&gt;Bancos que adotam outras arquiteturas não relacionais:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Multimodel Databases: ArangoDB, Datomic.&lt;/li&gt;
&lt;li&gt;Object Databases: Versant, JADE, db4o, Objectivity, Starcounter, Perst, HSS, ZODB, magma, NEO, Morantex, ODABA, EyeDB, FramerD.&lt;/li&gt;
&lt;li&gt;Grid &amp;amp; Cloud Databases: GigaSpaces, GemFire, Infinispan, Queplix, Hazelcast.&lt;/li&gt;
&lt;li&gt;XML Databases: EMC Document XDB, Qizx, Berkeley DB XML.&lt;/li&gt;
&lt;li&gt;Multidimensional Databases: Globals, Cache, SciDB, MiniM DB, rasdaman.&lt;/li&gt;
&lt;li&gt;Multivalue Databases: U2, OpenInsight, Reality, OpenQM, jBase.&lt;/li&gt;
&lt;li&gt;Tuple Store Databases: Apache River, Tarantool.&lt;/li&gt;
&lt;li&gt;Triple/Quad Store: Meronymy SPARQL, Apache JENA.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Bancos de Dados Híbridos&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Novos bancos de dados estão chegando ao mercado, agora suportando arquiteturas híbridas com bases relacionais e não relacionais, dados estruturados e não estruturados.  Acredito que este seja o futuro, várias arquiteturas na mesma base de dados, com integração através de uma nova linguagem SQL. Mas levará um tempo até a estabilização da arquitetura não relacional, para que se tenha uma integração eficiente entre elas.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Conclusão&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Com certeza dispomos agora de um cardápio mais extenso na busca de soluções. Infelizmente, segundo pesquisa realizada pela Information Week, apenas 56% dos profissionais de TI já ouviram falar de NoSQL e apenas 1% consideram bancos de dados NoSQL como parte de sua direção estratégica. A lista de empresas que hoje utilizam bases NoSQL não pode ser desconsiderada, além das 5 pioneiras temos: Comcast, Netflix, Pitney Bowes, Disney, RSA, Symantec, HP, AT&amp;amp;T, Impetus, ebay, Ericsson, Adobe, Cisco, MTV, ...&lt;/p&gt;
&lt;p&gt;É claro que os bancos de dados relacionais sempre terão o seu espaço, mas porque não utilizar várias arquiteturas e ter o melhor de cada mundo ?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Graph Databases são extremamente eficientes em sistemas de relacionamento (CRMs) e inteligência,&lt;/li&gt;
&lt;li&gt;Document Databases se adéquam perfeitamente às necessidades de gestão de conteúdo,&lt;/li&gt;
&lt;li&gt;Key Value Databases pela sua simplicidade tornam-se extremamente rápidos em bases de dados gigantescas,&lt;/li&gt;
&lt;li&gt;Multidimensional Databases superam as expectativas em sistemas de BI (Business Intelligence) e OLAP (On-line Analytical Processing).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Precisamos repensar as técnicas de modelagem em nossos projetos, as formas normais serão boas em alguns casos. Agora existe uma etapa anterior de projeto onde com base na demanda e nos requisitos precisaremos decidir o tipo de modelagem, normalizada ou não, os bancos de dados que serão utilizados e as formas de integração entre eles.&lt;/p&gt;</content>
<category term="Brasil" />

                                    </entry>
                            <entry>
                    <title>Utilizando o Live SDK com Windows Phone</title>
                    <link rel="alternate" href="http://devbrasil.net/xn/detail/2307362:BlogPost:241678"/>
                                        <id>tag:devbrasil.net,2013-10-14:2307362:BlogPost:241678</id>
                                        <updated>2013-10-14T11:18:12.000Z</updated>
                    
                                            <author>
                            <name>Julio Arruda</name>
                            <uri>http://devbrasil.net/profile/JulioCesarBuenodeArruda</uri>
                        </author>
                    
                    <summary type="html">
                        &lt;p&gt;Boa Tarde Pessoal,&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;O Live SDK permite que desenvolvedores possam utilizar informações da conta Windows Live dos usuários em suas aplicações, permite que seja obtido o Nome , e-mail, contatos, permite que trabalhe com arquivos do SkyDrive do usuário, e o melhor, tudo isso pode ser utilizado também no Windows Phone, para isso, basta baixar o SDK(que pode ser baixado &lt;a href=&quot;http://msdn.microsoft.com/pt-BR/live/ff621310&quot;&gt;aqui&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Para utilizar o Live SDK, são…&lt;/p&gt;                    </summary>

                    <content type="html">
&lt;p&gt;Boa Tarde Pessoal,&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;O Live SDK permite que desenvolvedores possam utilizar informações da conta Windows Live dos usuários em suas aplicações, permite que seja obtido o Nome , e-mail, contatos, permite que trabalhe com arquivos do SkyDrive do usuário, e o melhor, tudo isso pode ser utilizado também no Windows Phone, para isso, basta baixar o SDK(que pode ser baixado &lt;a href=&quot;http://msdn.microsoft.com/pt-BR/live/ff621310&quot;&gt;aqui&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Para utilizar o Live SDK, são disponibilizadas uma série de escopos de permissões para definir oque sua aplicação pode fazer (e que pode ser encontrado na integra &lt;a href=&quot;http://msdn.microsoft.com/pt-br/library/live/hh243646.aspx&quot;&gt;aqui&lt;/a&gt;), vou listar aqui, as que serão utilizadas em nosso exemplo, e oque cada um faz:&lt;/p&gt;
&lt;p&gt;wl.basic = Acesso de leitura a informações básicas de perfil do usuário. Também permite acesso de leitura a uma lista de contatos do usuário.&lt;/p&gt;
&lt;p&gt;wl.signin = Comportamento de logon único. Com o &lt;em&gt;logon único&lt;/em&gt;, os usuários que já estão conectados no Live Connect também entram em seu site.&lt;/p&gt;
&lt;p&gt;wl.skydrive_update = Acesso de leitura e gravação aos arquivos do usuário armazenados no SkyDrive.&lt;/p&gt;
&lt;p&gt;wl.emails = Acesso de leitura a endereços de email pessoais, preferidos e comerciais do usuário.&lt;/p&gt;
&lt;p&gt;Bom, o intuito deste artigo, é mostrar como é simples utilizar o Live SDK em nossas aplicações, e também subir arquivos no skydrive&lt;/p&gt;
&lt;p&gt;Após baixar o Live SDK e instalar em sua maquina, é necessário incluir as referencias no Visual Studio conforme print abaixo: &lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://julio-arruda.azurewebsites.net/image.axd?picture=%2f2013%2f10%2fprintSky1.png&quot; alt=&quot;&quot; width=&quot;505&quot; height=&quot;346&quot;/&gt;&lt;/p&gt;
&lt;p&gt;Após incluir essas referencias, é necessário incluir os namespaces no CS:&lt;/p&gt;
&lt;p&gt;using Microsoft.Live;&lt;/p&gt;
&lt;p&gt;using Microsoft.Live.Controls;&lt;/p&gt;
&lt;p&gt;após isso, vamos arrastar para nossa tela, o componente &quot;SignInButton&quot;, que pode se encontra em sua ToolBox. &lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://julio-arruda.azurewebsites.net/image.axd?picture=%2f2013%2f10%2fprintSky2.png&quot; alt=&quot;&quot; width=&quot;629&quot; height=&quot;376&quot;/&gt;&lt;/p&gt;
&lt;p&gt;Caso o &quot;SignInButton&quot; não esteja disponivel em sua ToolBox, basta inclui-lo clicando com o botão direito do Mouse, selecionar &quot;Choose Itens&quot;, e selecionar a opção &quot;SignInButton&quot; &lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://julio-arruda.azurewebsites.net/image.axd?picture=%2f2013%2f10%2fprintSky3.png&quot; alt=&quot;&quot; width=&quot;460&quot; height=&quot;330&quot;/&gt;&lt;/p&gt;
&lt;p&gt;Após isso, basta arrastar o botão para a tela.&lt;/p&gt;
&lt;p&gt;No código do botão criado, é necessário adicionar as seguintes propriedades:&lt;/p&gt;
&lt;p&gt;ClientId = Id da sua aplicação criada no dev.live.com&lt;/p&gt;
&lt;p&gt;Scopes  = os scopos informados no inicio do Post&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;No Code Behind, adicionei os seguintes códigos para acesso em toda a tela:&lt;/p&gt;
&lt;p&gt;        LiveConnectClient liveClient;&lt;/p&gt;
&lt;p&gt;        LiveConnectSession session;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;No evento do SignInButton, adicionei o seguinte seguimento de código que é responsavel por realizar o login na Live.&lt;/p&gt;
&lt;p&gt;    private void signInButton1_SessionChanged(object sender, LiveConnectSessionChangedEventArgs e)&lt;/p&gt;
&lt;p&gt;        {&lt;/p&gt;
&lt;p&gt;            if (e.Status == LiveConnectSessionStatus.Connected)&lt;/p&gt;
&lt;p&gt;            {&lt;/p&gt;
&lt;p&gt;                liveClient = new LiveConnectClient(e.Session);&lt;/p&gt;
&lt;p&gt;                session = e.Session;&lt;/p&gt;
&lt;p&gt;                liveClient.GetCompleted += new EventHandler&amp;lt;LiveOperationCompletedEventArgs&amp;gt;(OnGetCompleted);&lt;/p&gt;
&lt;p&gt;                liveClient.GetAsync(&quot;me&quot;, null);&lt;/p&gt;
&lt;p&gt;            }&lt;/p&gt;
&lt;p&gt;            else&lt;/p&gt;
&lt;p&gt;            {&lt;/p&gt;
&lt;p&gt;                MessageBox.Show(&quot;Erro ao Realizar Login&quot;);&lt;/p&gt;
&lt;p&gt;                liveClient = null;&lt;/p&gt;
&lt;p&gt;            }&lt;/p&gt;
&lt;p&gt;        }&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;        void OnGetCompleted(object sender, LiveOperationCompletedEventArgs e)&lt;/p&gt;
&lt;p&gt;        {&lt;/p&gt;
&lt;p&gt;            if (e.Error == null)&lt;/p&gt;
&lt;p&gt;            {&lt;/p&gt;
&lt;p&gt;                if (e.Result.ContainsKey(&quot;name&quot;))&lt;/p&gt;
&lt;p&gt;                {&lt;/p&gt;
&lt;p&gt;                    Dictionary&amp;lt;string, object&amp;gt; dicionarioEmails = (Dictionary&amp;lt;string, object&amp;gt;)e.Result[&quot;emails&quot;];&lt;/p&gt;
&lt;p&gt;                    txtEmail.Text = dicionarioEmails[&quot;account&quot;].ToString();&lt;/p&gt;
&lt;p&gt;                    txtNome.Text = e.Result[&quot;name&quot;].ToString();&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;                }&lt;/p&gt;
&lt;p&gt;            }&lt;/p&gt;
&lt;p&gt;            else&lt;/p&gt;
&lt;p&gt;            {&lt;/p&gt;
&lt;p&gt;                MessageBox.Show(e.Error.ToString());&lt;/p&gt;
&lt;p&gt;            }&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;        }&lt;/p&gt;
&lt;p&gt;ao Clicar no SignInButton, ele executará estes métodos, e abrirá uma janela do browser para que você possa realizar o login no windows live, e logo em seguida uma tela de autorização das permissões solicitadas pela aplicação&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://julio-arruda.azurewebsites.net/image.axd?picture=%2f2013%2f10%2fprintSky4.png&quot; alt=&quot;&quot; width=&quot;161&quot; height=&quot;268&quot;/&gt;&lt;img src=&quot;http://julio-arruda.azurewebsites.net/image.axd?picture=%2f2013%2f10%2fprintSky5.png&quot; alt=&quot;&quot; width=&quot;160&quot; height=&quot;268&quot;/&gt;&lt;img src=&quot;http://julio-arruda.azurewebsites.net/image.axd?picture=%2f2013%2f10%2fprintSky6.png&quot; alt=&quot;&quot; width=&quot;161&quot; height=&quot;269&quot;/&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Tendo realizado isso, estaremos conectados a nossa conta do Windows Live.&lt;/p&gt;
&lt;p&gt;Agora, vamos criar um pequeno arquivo texto e adiciona-lo ao skydrive.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;para fazer isso, vamos criar um evento no Code Behind  que irá converter o conteudo do TextBox existente na tela para um MemoryStream e vamos em seguida adiciona-lo a nosso diretorio raiz do SkyDrive.&lt;/p&gt;
&lt;p&gt;o seguimento de código deve ficar semelhante a isso:&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;     private void button1_Click(object sender, RoutedEventArgs e)&lt;/p&gt;
&lt;p&gt;        {&lt;/p&gt;
&lt;p&gt;            if (session != null)&lt;/p&gt;
&lt;p&gt;            {&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;                string nomeArquivo = &quot;ExemploSkydrive.txt&quot;;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;                byte[] arrayBytes = Encoding.UTF8.GetBytes(this.textBox1.Text);&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;                MemoryStream stream = new MemoryStream(arrayBytes);&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;                LiveConnectClient cliente = new LiveConnectClient(session);&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;                cliente.UploadCompleted += new EventHandler&amp;lt;LiveOperationCompletedEventArgs&amp;gt;(cliente_UploadCompleted);&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;                cliente.UploadAsync(&quot;me/skydrive&quot;, nomeArquivo, stream, OverwriteOption.Overwrite);&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;            }&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;            else&lt;/p&gt;
&lt;p&gt;            {&lt;/p&gt;
&lt;p&gt;                MessageBox.Show(&quot;É necessário estar conectado ao Skydrive&quot;);&lt;/p&gt;
&lt;p&gt;            }&lt;/p&gt;
&lt;p&gt;        }&lt;/p&gt;
&lt;p&gt;        void cliente_UploadCompleted(object sender, LiveOperationCompletedEventArgs e)&lt;/p&gt;
&lt;p&gt;        {&lt;/p&gt;
&lt;p&gt;            if (e.Result[&quot;id&quot;] != null)&lt;/p&gt;
&lt;p&gt;            {&lt;/p&gt;
&lt;p&gt;                MessageBox.Show(string.Format(&quot;Arquivo {0} salvo com sucesso!&quot;, e.Result[&quot;name&quot;].ToString()));&lt;/p&gt;
&lt;p&gt;            }&lt;/p&gt;
&lt;p&gt;            else&lt;/p&gt;
&lt;p&gt;            {&lt;/p&gt;
&lt;p&gt;                MessageBox.Show(&quot;Erro ao Salvar Arquivo no Skydrive&quot;);&lt;/p&gt;
&lt;p&gt;            }&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;        }&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;O código que se encontra no evento do Botão, é oque realizará o &quot;salvamento&quot; do arquivo no Skydrive, e o evento cliente_UploadCompleted é oque verificará o retorno da execução, por exemplo se o arquivo foi ou não criado.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Bom pessoal, como vocês podem ver, utilizar o Live SDK para salvar arquivos no SkyDrive é uma tarefa bem simples e muito útil que pode facilitar e muito a vida tanto do desenvolvedor quanto do usuário, e tornará sua aplicação mais rica e útil , oque pode chamar a atenção dos usuários.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Segue abaixo aplicação de exemplo para download:&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://julio-arruda.azurewebsites.net/FILES%2f2013%2f10%2fSkydriveAccess.rar.axdx&quot;&gt;SkydriveAccess.rar (380,12 kb)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Participe do Grupo &lt;a href=&quot;http://devbrasil.net/group/webmobile&quot; target=&quot;_self&quot;&gt;Windows Phone&lt;/a&gt; no DevBrasil&lt;/p&gt;</content>
<category term="Brasil" />

                                    </entry>
                            <entry>
                    <title>Task&#039;s Windows Phone</title>
                    <link rel="alternate" href="http://devbrasil.net/xn/detail/2307362:BlogPost:241661"/>
                                        <id>tag:devbrasil.net,2013-10-08:2307362:BlogPost:241661</id>
                                        <updated>2013-10-08T17:00:00.000Z</updated>
                    
                                            <author>
                            <name>Julio Arruda</name>
                            <uri>http://devbrasil.net/profile/JulioCesarBuenodeArruda</uri>
                        </author>
                    
                    <summary type="html">
                        &lt;p&gt;Neste artigo, vou escrever sobre as Task&#039;s para enviar e-mail&#039;s, salvar contatos, enviar SMS, Tirar Fotos, e também utilizar o Search do Windows Phone.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Bem, vamos começar.&lt;/p&gt;
&lt;p&gt; &lt;img alt=&quot;&quot; height=&quot;210&quot; src=&quot;http://julio-arruda.azurewebsites.net/image.axd?picture=%2f2013%2f10%2ftask1.png&quot; width=&quot;126&quot;&gt;&lt;/img&gt;&lt;/p&gt;
&lt;p&gt;Para começar, é necessário que você referencie em seu projeto o seguinte Namespace:&lt;/p&gt;
&lt;p&gt;using Microsoft.Phone.Tasks;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Não sei se é do conhecimento de todos, que quando a Microsoft desenvolveu o Windows Phone, ela colocou algumas restrições quanto a execução de…&lt;/p&gt;                    </summary>

                    <content type="html">
&lt;p&gt;Neste artigo, vou escrever sobre as Task&#039;s para enviar e-mail&#039;s, salvar contatos, enviar SMS, Tirar Fotos, e também utilizar o Search do Windows Phone.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Bem, vamos começar.&lt;/p&gt;
&lt;p&gt; &lt;img src=&quot;http://julio-arruda.azurewebsites.net/image.axd?picture=%2f2013%2f10%2ftask1.png&quot; alt=&quot;&quot; width=&quot;126&quot; height=&quot;210&quot;/&gt;&lt;/p&gt;
&lt;p&gt;Para começar, é necessário que você referencie em seu projeto o seguinte Namespace:&lt;/p&gt;
&lt;p&gt;using Microsoft.Phone.Tasks;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Não sei se é do conhecimento de todos, que quando a Microsoft desenvolveu o Windows Phone, ela colocou algumas restrições quanto a execução de algumas tarefas sem o consentimento do usuário, como por exemplo efetuar chamadas, enviar e-mail&#039;s, enviar SMS, salvar um contato na agenda.&lt;/p&gt;
&lt;p&gt;Todas estas coisas, quando vamos fazer em nosso app, dependemos da autorização do usuário, e para realizar tais tarefas, utilizamos as Tasks do Windows Phone&lt;/p&gt;
&lt;p&gt;Vamos ver alguns deles neste artigo.&lt;/p&gt;
&lt;p&gt;O primeiro que irei abordar é o &quot;EmailComposeTask&quot;, que faz parte do Namespace &quot;Microsoft.Phone.Tasks&quot;, e é utilizada para compor e-mail&#039;s. Com o &quot;EmailComposeTask&quot;, você pode montar um e-mail e o usuário escolherá por qual conta ele irá enviar o e-mail, se vai alterar o assunto, o conteúdo do e-mail, ou até mesmo o destinatário. Ou seja, você pode induzir o usuário a lhe enviar um e-mail, mais não quer dizer que necessariamente ele vai lhe enviar este e-mail, ou se o e-mail vai com o conteúdo que você definiu.&lt;/p&gt;
&lt;p&gt;A baixo segue uma instancia do &quot;EmailComposeTask&quot;:&lt;/p&gt;
&lt;p&gt;            EmailComposeTask email = new EmailComposeTask();&lt;/p&gt;
&lt;p&gt;            //a propriedade &quot;To&quot; define o destinatario do e-mail&lt;/p&gt;
&lt;p&gt;            email.To = &quot;julio.arruda@outlook.com&quot;;&lt;/p&gt;
&lt;p&gt;            //A propriedade &quot;Bcc&quot; define a quem o e-mail será enviado como cópia oculta&lt;/p&gt;
&lt;p&gt;            email.Bcc = &quot;julio.arruda@outlook.com&quot;;&lt;/p&gt;
&lt;p&gt;            //A propriedade &quot;Cc&quot; define a quem o e-mail será enviado com cópia&lt;/p&gt;
&lt;p&gt;            email.Cc = &quot;julio.arruda@outlook.com&quot;;&lt;/p&gt;
&lt;p&gt;            //A propriedade &quot;Subject&quot; define o Assunto do e-mail&lt;/p&gt;
&lt;p&gt;            email.Subject = &quot;Sample SendMail&quot;;&lt;/p&gt;
&lt;p&gt;            //A propriedade &quot;Body&quot; define o corpo do e-mail&lt;/p&gt;
&lt;p&gt;            email.Body = &quot;E-mail de exemplo&quot;;&lt;/p&gt;
&lt;p&gt;            //O Evento &quot;Show&quot; abre o aplicativo de e-mail para enviar&lt;/p&gt;
&lt;p&gt;            email.Show();&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;O Próximo item da lista é a criação de um contato na agenda, e da mesma maneira que enviar um e-mail, é necessária a confirmação do usuário, onde também o usuário pode alterar qualquer uma das informações cadastradas, complementar ou até mesmo não salvar nenhuma delas.&lt;/p&gt;
&lt;p&gt;O processo é todo muito simples, utilizamos o &quot;SaveContactTask&quot; para instanciar um novo contato, e seguimos os parâmetros abaixo:&lt;/p&gt;
&lt;p&gt;            SaveContactTask contact = new SaveContactTask();&lt;/p&gt;
&lt;p&gt;            //A Propriedade &quot;FirstName&quot; define o primeiro nome &lt;/p&gt;
&lt;p&gt;            contact.FirstName = &quot;Julio&quot;;&lt;/p&gt;
&lt;p&gt;            //A propriedade &quot;LastName&quot; define o Ultimo nome&lt;/p&gt;
&lt;p&gt;            contact.LastName = &quot;Arruda&quot;;&lt;/p&gt;
&lt;p&gt;            //A propriedade &quot;JobTitle&quot; define a profissão &lt;/p&gt;
&lt;p&gt;            contact.JobTitle = &quot;Programador .NET&quot;;&lt;/p&gt;
&lt;p&gt;            //A propriedade &quot;PersonalEmail&quot; define o e-mail pessoal&lt;/p&gt;
&lt;p&gt;            contact.PersonalEmail = &quot;julio.arruda@outlook.com&quot;;&lt;/p&gt;
&lt;p&gt;            //A propriedade &quot;MobilePhone&quot; define o numero de celular&lt;/p&gt;
&lt;p&gt;            contact.MobilePhone = &quot;9999999999&quot;;&lt;/p&gt;
&lt;p&gt;            //pO evento &quot;Show&quot; exibe a tela para salvar o contato&lt;/p&gt;
&lt;p&gt;            contact.Show();&lt;/p&gt;
&lt;p&gt;Neste código, abordei apenas algumas das propriedades de um contato, existem mais vários campos a serem preenchidos que devem ser analizados quando a sua necessidade&lt;/p&gt;
&lt;p&gt;Segue um print de uma tela para salvar o contato do exemplo. &lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://julio-arruda.azurewebsites.net/image.axd?picture=%2f2013%2f10%2fcontact.png&quot; alt=&quot;&quot; width=&quot;101&quot; height=&quot;169&quot;/&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;O próximo item, é como  escrever um SMS para ser enviado pelo usuário, mais lembrando que assim como os anteriores, o SMS não é enviado automaticamente, é necessária uma interação com o usuário, onde o mesmo pode alterar tudo, ou até mesmo não enviar.&lt;/p&gt;
&lt;p&gt;Faremos uso do: &quot;SmsComposeTask&quot; para instanciar uma nova SMS, e seguir os parâmetros conforme exemplo abaixo:&lt;/p&gt;
&lt;p&gt;            SmsComposeTask sms = new SmsComposeTask();&lt;/p&gt;
&lt;p&gt;            //A propriedade &quot;Body&quot; define o conteudo do SMS&lt;/p&gt;
&lt;p&gt;            sms.Body = &quot;Teste de Envio de SMS &quot;;&lt;/p&gt;
&lt;p&gt;            //A propriedade &quot;To&quot; define para quem será enviado o SMS&lt;/p&gt;
&lt;p&gt;            sms.To = &quot;9999999999&quot;;&lt;/p&gt;
&lt;p&gt;            //O método &quot;Show&quot; exibe a tela de envio do SMS&lt;/p&gt;
&lt;p&gt;            sms.Show();&lt;/p&gt;
&lt;p&gt;Segue um print do SMS do exemplo: &lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://julio-arruda.azurewebsites.net/image.axd?picture=%2f2013%2f10%2fsms.png&quot; alt=&quot;&quot; width=&quot;135&quot; height=&quot;225&quot;/&gt;&lt;/p&gt;
&lt;p&gt;O próximo item que irei abordar é como realizar uma ligação, assim como os demais, é uma ação que depende do usuário para ser executada, nós enviamos uma solicitação para realizar a chamada, mas cabe ao usuário aceitar ou não.&lt;/p&gt;
&lt;p&gt;Para isso, utilizamos o &quot;PhoneCallTask&quot; para instanciar uma nova ligação, e preenchemos as propriedades como abaixo:&lt;/p&gt;
&lt;p&gt;            PhoneCallTask call = new PhoneCallTask();&lt;/p&gt;
&lt;p&gt;            //A pripriedade &quot;DisplayName&quot; define o nome que será exibido no display enquanto a ligação estiver sendo realizada&lt;/p&gt;
&lt;p&gt;            call.DisplayName = &quot;Julio Arruda&quot;;&lt;/p&gt;
&lt;p&gt;            //A propriedade &quot;PhoneNumber&quot; define o numero a que defe ser realizada a ligação&lt;/p&gt;
&lt;p&gt;            call.PhoneNumber = &quot;88051287&quot;;&lt;/p&gt;
&lt;p&gt;            //O evento &quot;Show&quot; pergunta ao usuário se ele quer ou não realizar a ligação&lt;/p&gt;
&lt;p&gt;            call.Show();&lt;/p&gt;
&lt;p&gt; Segue print&#039;s da ligação&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://julio-arruda.azurewebsites.net/image.axd?picture=%2f2013%2f10%2fcall1.png&quot; alt=&quot;&quot; width=&quot;159&quot; height=&quot;265&quot;/&gt;&lt;img src=&quot;http://julio-arruda.azurewebsites.net/image.axd?picture=%2f2013%2f10%2fcall2.png&quot; alt=&quot;&quot; width=&quot;157&quot; height=&quot;261&quot;/&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Outra propriedade que temos de interessante, é a utilização da câmera do windows phone, para isso faremos o uso de: &quot;CameraCaptureTask&quot;, e devemos realizar o procedimento de acordo com o exemplo abaixo:&lt;/p&gt;
&lt;p&gt;        private void button4_Click(object sender, RoutedEventArgs e)&lt;/p&gt;
&lt;p&gt;        {&lt;/p&gt;
&lt;p&gt;            //Instancia do CameraCaptureTask&lt;/p&gt;
&lt;p&gt;          CameraCaptureTask  cameraCaptureTask = new CameraCaptureTask();&lt;/p&gt;
&lt;p&gt;            //Definição do Evento quando a foto for tirada&lt;/p&gt;
&lt;p&gt;          cameraCaptureTask.Completed += new EventHandler&amp;lt;PhotoResult&amp;gt;(cameraCaptureTask_Completed);&lt;/p&gt;
&lt;p&gt;            //Chama a Câmera&lt;/p&gt;
&lt;p&gt;          cameraCaptureTask.Show();&lt;/p&gt;
&lt;p&gt;        }&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;        //Evento que é executado quando a foto é tidada&lt;/p&gt;
&lt;p&gt;        void cameraCaptureTask_Completed(object sender, PhotoResult e)&lt;/p&gt;
&lt;p&gt;        {&lt;/p&gt;
&lt;p&gt;            //Valido se a foto foi tirada&lt;/p&gt;
&lt;p&gt;            if (e.TaskResult == TaskResult.OK)&lt;/p&gt;
&lt;p&gt;            {&lt;/p&gt;
&lt;p&gt;                //caso tenha sido tirada exibo um messagebox com o nome da foto&lt;/p&gt;
&lt;p&gt;                MessageBox.Show(e.OriginalFileName);&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;            }&lt;/p&gt;
&lt;p&gt;            &lt;/p&gt;
&lt;p&gt;        }&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Segue um print com a mensagem do caminho da foto: &lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://julio-arruda.azurewebsites.net/image.axd?picture=%2f2013%2f10%2fcamera.png&quot; alt=&quot;&quot; width=&quot;147&quot; height=&quot;244&quot;/&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Outra coisa interessante de utilizar é o Search, onde podemos realizar buscas no aparelho e na internet de acordo com o parâmetro informado.&lt;/p&gt;
&lt;p&gt;Para isso utilizamos o: &quot;SearchTask&quot;, com os parametros informados abaixo:&lt;/p&gt;
&lt;p&gt;            SearchTask search = new SearchTask();&lt;/p&gt;
&lt;p&gt;            //A propriedade &quot;SearchQuery&quot; define o parametro que deve ser buscado&lt;/p&gt;
&lt;p&gt;            search.SearchQuery = &quot;Julio Arruda&quot;;&lt;/p&gt;
&lt;p&gt;            //O evento &quot;Show&quot; exibe a tela ddo Search&lt;/p&gt;
&lt;p&gt;            search.Show();&lt;/p&gt;
&lt;p&gt;Seguem prints do search&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;http://julio-arruda.azurewebsites.net/image.axd?picture=%2f2013%2f10%2fsearch1.png&quot; alt=&quot;&quot; width=&quot;155&quot; height=&quot;258&quot;/&gt;&lt;img src=&quot;http://julio-arruda.azurewebsites.net/image.axd?picture=%2f2013%2f10%2fsearch2.png&quot; alt=&quot;&quot; width=&quot;156&quot; height=&quot;260&quot;/&gt;&lt;img src=&quot;http://julio-arruda.azurewebsites.net/image.axd?picture=%2f2013%2f10%2fsearch3.png&quot; alt=&quot;&quot; width=&quot;152&quot; height=&quot;254&quot;/&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Bom pessoal, é simples mais de momento é isso.&lt;/p&gt;
&lt;p&gt;Espero que tenha ajudado.&lt;/p&gt;
&lt;p&gt;Abaixo estou postando o aplicativo de exemplo.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://julio-arruda.azurewebsites.net/FILES%2f2013%2f10%2fSample1.rar.axdx&quot;&gt;Sample1.rar (68,55 kb)&lt;/a&gt;&lt;/p&gt;</content>
<category term="Brasil" />

                                    </entry>
                            <entry>
                    <title>Deixando o seu  Java Script em um modelo arquitetural</title>
                    <link rel="alternate" href="http://devbrasil.net/xn/detail/2307362:BlogPost:240216"/>
                                        <id>tag:devbrasil.net,2013-09-08:2307362:BlogPost:240216</id>
                                        <updated>2013-09-08T18:33:31.000Z</updated>
                    
                                            <author>
                            <name>Juliano Sales</name>
                            <uri>http://devbrasil.net/profile/JulianoSales</uri>
                        </author>
                    
                    <summary type="html">
                        &lt;p&gt;Alguns meses atrás eu estava participando de um grande projeto para o Submarino porém nesse projeto nós estávamos enfrentando um grave problema, nós não estávamos conseguindo ter 100 % de controle dos nossos Java Script.&lt;/p&gt;
&lt;p&gt;Por causa dessa falta de controle nós estávamos enfrentando inúmeros bugs e a cada vez que precisávamos adicionar uma nova funcionalidade ou até mesmo dar uma manutenção em uma tela era sempre uma tarefa muito árdua.&lt;/p&gt;
&lt;p&gt;Depois de algumas horas cheguei a seguinte…&lt;/p&gt;                    </summary>

                    <content type="html">
&lt;p&gt;Alguns meses atrás eu estava participando de um grande projeto para o Submarino porém nesse projeto nós estávamos enfrentando um grave problema, nós não estávamos conseguindo ter 100 % de controle dos nossos Java Script.&lt;/p&gt;
&lt;p&gt;Por causa dessa falta de controle nós estávamos enfrentando inúmeros bugs e a cada vez que precisávamos adicionar uma nova funcionalidade ou até mesmo dar uma manutenção em uma tela era sempre uma tarefa muito árdua.&lt;/p&gt;
&lt;p&gt;Depois de algumas horas cheguei a seguinte arquitetura, segue abaixo o modelo arquitetural.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;a href=&quot;http://storage.ning.com/topology/rest/1.0/file/get/2230052954?profile=original&quot; target=&quot;_self&quot;&gt;&lt;img width=&quot;639&quot; src=&quot;http://storage.ning.com/topology/rest/1.0/file/get/2230052954?profile=RESIZE_1024x1024&quot; width=&quot;608&quot; height=&quot;368&quot;/&gt;&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Conhecendo as camadas da arquitetura:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Service&lt;/b&gt;: Camada responsável por consumir e expor algumas funcionalidade que pode ser reutilizada por outras funcionalidade no sistema.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Model&lt;/b&gt;: Camada responsável por prover métodos e informações necessárias para a nossa View e comunicar-se com nossa aplicação server-side.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;View&lt;/b&gt;: Camada responsável por prover métodos   e funcionalidades para iterações com o usuário.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Implementando o modelo arquitetural:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Vamos imaginar por um momento que temos um sistema e precisamos realizar um cadastro de participante.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;“O código completo do projeto pode ser consultado no final do artigo.”&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Dentro do arquivo &lt;b&gt;Participante.js&lt;/b&gt; localizado na pasta Scripts temos a seguinte implementação.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;table border=&quot;0&quot; cellspacing=&quot;0&quot;&gt;
&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;div class=&quot;line number1 index0 alt2&quot;&gt;1&lt;/div&gt;
&lt;div class=&quot;line number2 index1 alt1&quot;&gt;2&lt;/div&gt;
&lt;div class=&quot;line number3 index2 alt2&quot;&gt;3&lt;/div&gt;
&lt;div class=&quot;line number4 index3 alt1&quot;&gt;4&lt;/div&gt;
&lt;div class=&quot;line number5 index4 alt2&quot;&gt;5&lt;/div&gt;
&lt;div class=&quot;line number6 index5 alt1&quot;&gt;6&lt;/div&gt;
&lt;div class=&quot;line number7 index6 alt2&quot;&gt;7&lt;/div&gt;
&lt;div class=&quot;line number8 index7 alt1&quot;&gt;8&lt;/div&gt;
&lt;div class=&quot;line number9 index8 alt2&quot;&gt;9&lt;/div&gt;
&lt;div class=&quot;line number10 index9 alt1&quot;&gt;10&lt;/div&gt;
&lt;div class=&quot;line number11 index10 alt2&quot;&gt;11&lt;/div&gt;
&lt;div class=&quot;line number12 index11 alt1&quot;&gt;12&lt;/div&gt;
&lt;div class=&quot;line number13 index12 alt2&quot;&gt;13&lt;/div&gt;
&lt;div class=&quot;line number14 index13 alt1&quot;&gt;14&lt;/div&gt;
&lt;div class=&quot;line number15 index14 alt2&quot;&gt;15&lt;/div&gt;
&lt;div class=&quot;line number16 index15 alt1&quot;&gt;16&lt;/div&gt;
&lt;div class=&quot;line number17 index16 alt2&quot;&gt;17&lt;/div&gt;
&lt;div class=&quot;line number18 index17 alt1&quot;&gt;18&lt;/div&gt;
&lt;div class=&quot;line number19 index18 alt2&quot;&gt;19&lt;/div&gt;
&lt;div class=&quot;line number20 index19 alt1&quot;&gt;20&lt;/div&gt;
&lt;div class=&quot;line number21 index20 alt2&quot;&gt;21&lt;/div&gt;
&lt;div class=&quot;line number22 index21 alt1&quot;&gt;22&lt;/div&gt;
&lt;div class=&quot;line number23 index22 alt2&quot;&gt;23&lt;/div&gt;
&lt;div class=&quot;line number24 index23 alt1&quot;&gt;24&lt;/div&gt;
&lt;div class=&quot;line number25 index24 alt2&quot;&gt;25&lt;/div&gt;
&lt;div class=&quot;line number26 index25 alt1&quot;&gt;26&lt;/div&gt;
&lt;div class=&quot;line number27 index26 alt2&quot;&gt;27&lt;/div&gt;
&lt;div class=&quot;line number28 index27 alt1&quot;&gt;28&lt;/div&gt;
&lt;div class=&quot;line number29 index28 alt2&quot;&gt;29   &lt;/div&gt;
&lt;div class=&quot;line number30 index29 alt1&quot;&gt;30&lt;/div&gt;
&lt;div class=&quot;line number31 index30 alt2&quot;&gt;31&lt;/div&gt;
&lt;div class=&quot;line number32 index31 alt1&quot;&gt;32&lt;/div&gt;
&lt;div class=&quot;line number33 index32 alt2&quot;&gt;33&lt;/div&gt;
&lt;div class=&quot;line number34 index33 alt1&quot;&gt;34&lt;/div&gt;
&lt;div class=&quot;line number35 index34 alt2&quot;&gt;35&lt;/div&gt;
&lt;div class=&quot;line number36 index35 alt1&quot;&gt;36&lt;/div&gt;
&lt;div class=&quot;line number37 index36 alt2&quot;&gt;37&lt;/div&gt;
&lt;div class=&quot;line number38 index37 alt1&quot;&gt;38&lt;/div&gt;
&lt;div class=&quot;line number39 index38 alt2&quot;&gt;39&lt;/div&gt;
&lt;div class=&quot;line number40 index39 alt1&quot;&gt;40&lt;/div&gt;
&lt;div class=&quot;line number41 index40 alt2&quot;&gt;41&lt;/div&gt;
&lt;div class=&quot;line number42 index41 alt1&quot;&gt;42&lt;/div&gt;
&lt;div class=&quot;line number43 index42 alt2&quot;&gt;43&lt;/div&gt;
&lt;div class=&quot;line number44 index43 alt1&quot;&gt;44&lt;/div&gt;
&lt;div class=&quot;line number45 index44 alt2&quot;&gt;45&lt;/div&gt;
&lt;div class=&quot;line number46 index45 alt1&quot;&gt;46&lt;/div&gt;
&lt;div class=&quot;line number47 index46 alt2&quot;&gt;47&lt;/div&gt;
&lt;div class=&quot;line number48 index47 alt1&quot;&gt;48&lt;/div&gt;
&lt;/td&gt;
&lt;td class=&quot;code&quot;&gt;&lt;div class=&quot;container&quot;&gt;&lt;div class=&quot;line number1 index0 alt2&quot;&gt;&lt;code class=&quot;js keyword&quot;&gt;var&lt;/code&gt; &lt;code class=&quot;js plain&quot;&gt;ParticipanteService = {&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number2 index1 alt1&quot;&gt;&lt;code class=&quot;js spaces&quot;&gt;    &lt;/code&gt;&lt;code class=&quot;js plain&quot;&gt;validacaoEmail:&lt;/code&gt; &lt;code class=&quot;js keyword&quot;&gt;function&lt;/code&gt; &lt;code class=&quot;js plain&quot;&gt;(email) {&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number3 index2 alt2&quot;&gt;&lt;code class=&quot;js spaces&quot;&gt;        &lt;/code&gt;&lt;code class=&quot;js keyword&quot;&gt;return&lt;/code&gt; &lt;code class=&quot;js plain&quot;&gt;email.length &amp;gt; 3;&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number4 index3 alt1&quot;&gt;&lt;code class=&quot;js spaces&quot;&gt;    &lt;/code&gt;&lt;code class=&quot;js plain&quot;&gt;}&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number5 index4 alt2&quot;&gt;&lt;code class=&quot;js plain&quot;&gt;};&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number6 index5 alt1&quot;&gt;&lt;code class=&quot;js keyword&quot;&gt;var&lt;/code&gt; &lt;code class=&quot;js plain&quot;&gt;ParticipanteModel =&lt;/code&gt; &lt;code class=&quot;js keyword&quot;&gt;function&lt;/code&gt; &lt;code class=&quot;js plain&quot;&gt;() {&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number7 index6 alt2&quot;&gt; &lt;/div&gt;
&lt;div class=&quot;line number8 index7 alt1&quot;&gt;&lt;code class=&quot;js spaces&quot;&gt;    &lt;/code&gt;&lt;code class=&quot;js keyword&quot;&gt;var&lt;/code&gt; &lt;code class=&quot;js plain&quot;&gt;self =&lt;/code&gt; &lt;code class=&quot;js keyword&quot;&gt;this&lt;/code&gt;&lt;code class=&quot;js plain&quot;&gt;;&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number9 index8 alt2&quot;&gt;&lt;code class=&quot;js spaces&quot;&gt;    &lt;/code&gt;&lt;code class=&quot;js plain&quot;&gt;self.url =&lt;/code&gt; &lt;code class=&quot;js string&quot;&gt;&quot;/Participante/InserirParticipante&quot;&lt;/code&gt;&lt;code class=&quot;js plain&quot;&gt;;&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number10 index9 alt1&quot;&gt;&lt;code class=&quot;js spaces&quot;&gt;    &lt;/code&gt;&lt;code class=&quot;js plain&quot;&gt;self.Participante = {&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number11 index10 alt2&quot;&gt;&lt;code class=&quot;js spaces&quot;&gt;        &lt;/code&gt;&lt;code class=&quot;js plain&quot;&gt;nome:&lt;/code&gt; &lt;code class=&quot;js string&quot;&gt;&#039;&#039;&lt;/code&gt;&lt;code class=&quot;js plain&quot;&gt;,&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number12 index11 alt1&quot;&gt;&lt;code class=&quot;js spaces&quot;&gt;        &lt;/code&gt;&lt;code class=&quot;js plain&quot;&gt;sobreNome:&lt;/code&gt; &lt;code class=&quot;js string&quot;&gt;&#039;&#039;&lt;/code&gt;&lt;code class=&quot;js plain&quot;&gt;,&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number13 index12 alt2&quot;&gt;&lt;code class=&quot;js spaces&quot;&gt;        &lt;/code&gt;&lt;code class=&quot;js plain&quot;&gt;email:&lt;/code&gt; &lt;code class=&quot;js string&quot;&gt;&#039;&#039;&lt;/code&gt;&lt;code class=&quot;js plain&quot;&gt;,&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number14 index13 alt1&quot;&gt;&lt;code class=&quot;js spaces&quot;&gt;        &lt;/code&gt;&lt;code class=&quot;js plain&quot;&gt;senha:&lt;/code&gt; &lt;code class=&quot;js string&quot;&gt;&#039;&#039;&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number15 index14 alt2&quot;&gt;&lt;code class=&quot;js spaces&quot;&gt;    &lt;/code&gt;&lt;code class=&quot;js plain&quot;&gt;};&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number16 index15 alt1&quot;&gt; &lt;/div&gt;
&lt;div class=&quot;line number17 index16 alt2&quot;&gt;&lt;code class=&quot;js spaces&quot;&gt;    &lt;/code&gt;&lt;code class=&quot;js plain&quot;&gt;self.inserirParticipante =&lt;/code&gt; &lt;code class=&quot;js keyword&quot;&gt;function&lt;/code&gt; &lt;code class=&quot;js plain&quot;&gt;(done) {&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number18 index17 alt1&quot;&gt;&lt;code class=&quot;js spaces&quot;&gt;        &lt;/code&gt;&lt;code class=&quot;js plain&quot;&gt;$.ajax({&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number19 index18 alt2&quot;&gt;&lt;code class=&quot;js spaces&quot;&gt;            &lt;/code&gt;&lt;code class=&quot;js plain&quot;&gt;url: self.url,&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number20 index19 alt1&quot;&gt;&lt;code class=&quot;js spaces&quot;&gt;            &lt;/code&gt;&lt;code class=&quot;js plain&quot;&gt;type:&lt;/code&gt; &lt;code class=&quot;js string&quot;&gt;&#039;POST&#039;&lt;/code&gt;&lt;code class=&quot;js plain&quot;&gt;,&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number21 index20 alt2&quot;&gt;&lt;code class=&quot;js spaces&quot;&gt;            &lt;/code&gt;&lt;code class=&quot;js plain&quot;&gt;data: self.Participante,&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number22 index21 alt1&quot;&gt;&lt;code class=&quot;js spaces&quot;&gt;            &lt;/code&gt;&lt;code class=&quot;js plain&quot;&gt;success:&lt;/code&gt; &lt;code class=&quot;js keyword&quot;&gt;function&lt;/code&gt; &lt;code class=&quot;js plain&quot;&gt;(retorno) {&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number23 index22 alt2&quot;&gt;&lt;code class=&quot;js spaces&quot;&gt;                &lt;/code&gt;&lt;code class=&quot;js keyword&quot;&gt;return&lt;/code&gt; &lt;code class=&quot;js plain&quot;&gt;done(retorno);&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number24 index23 alt1&quot;&gt;&lt;code class=&quot;js spaces&quot;&gt;            &lt;/code&gt;&lt;code class=&quot;js plain&quot;&gt;}&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number25 index24 alt2&quot;&gt;&lt;code class=&quot;js spaces&quot;&gt;        &lt;/code&gt;&lt;code class=&quot;js plain&quot;&gt;});&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number26 index25 alt1&quot;&gt;&lt;code class=&quot;js spaces&quot;&gt;    &lt;/code&gt;&lt;code class=&quot;js plain&quot;&gt;};&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number27 index26 alt2&quot;&gt; &lt;/div&gt;
&lt;div class=&quot;line number28 index27 alt1&quot;&gt;&lt;code class=&quot;js plain&quot;&gt;};&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number29 index28 alt2&quot;&gt;&lt;code class=&quot;js keyword&quot;&gt;var&lt;/code&gt; &lt;code class=&quot;js plain&quot;&gt;ParticipanteView =&lt;/code&gt; &lt;code class=&quot;js keyword&quot;&gt;function&lt;/code&gt; &lt;code class=&quot;js plain&quot;&gt;() {&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number30 index29 alt1&quot;&gt;&lt;code class=&quot;js spaces&quot;&gt;    &lt;/code&gt;&lt;code class=&quot;js keyword&quot;&gt;var&lt;/code&gt; &lt;code class=&quot;js plain&quot;&gt;self =&lt;/code&gt; &lt;code class=&quot;js keyword&quot;&gt;this&lt;/code&gt;&lt;code class=&quot;js plain&quot;&gt;;&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number31 index30 alt2&quot;&gt;&lt;code class=&quot;js spaces&quot;&gt;    &lt;/code&gt;&lt;code class=&quot;js plain&quot;&gt;self.model =&lt;/code&gt; &lt;code class=&quot;js keyword&quot;&gt;new&lt;/code&gt; &lt;code class=&quot;js plain&quot;&gt;ParticipanteModel();&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number32 index31 alt1&quot;&gt;&lt;code class=&quot;js spaces&quot;&gt;    &lt;/code&gt;&lt;code class=&quot;js plain&quot;&gt;self.salvar =&lt;/code&gt; &lt;code class=&quot;js keyword&quot;&gt;function&lt;/code&gt; &lt;code class=&quot;js plain&quot;&gt;() {&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number33 index32 alt2&quot;&gt;&lt;code class=&quot;js spaces&quot;&gt;        &lt;/code&gt;&lt;code class=&quot;js plain&quot;&gt;self.model.Participante = $(&lt;/code&gt;&lt;code class=&quot;js string&quot;&gt;&quot;form&quot;&lt;/code&gt;&lt;code class=&quot;js plain&quot;&gt;).serialize();&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number34 index33 alt1&quot;&gt;&lt;code class=&quot;js spaces&quot;&gt;        &lt;/code&gt;&lt;code class=&quot;js plain&quot;&gt;self.model.inserirParticipante(&lt;/code&gt;&lt;code class=&quot;js keyword&quot;&gt;function&lt;/code&gt; &lt;code class=&quot;js plain&quot;&gt;(retorno) {&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number35 index34 alt2&quot;&gt;&lt;code class=&quot;js spaces&quot;&gt;            &lt;/code&gt;&lt;code class=&quot;js plain&quot;&gt;alert(retorno);&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number36 index35 alt1&quot;&gt;&lt;code class=&quot;js spaces&quot;&gt;        &lt;/code&gt;&lt;code class=&quot;js plain&quot;&gt;});&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number37 index36 alt2&quot;&gt;&lt;code class=&quot;js spaces&quot;&gt;    &lt;/code&gt;&lt;code class=&quot;js plain&quot;&gt;};&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number38 index37 alt1&quot;&gt;&lt;code class=&quot;js spaces&quot;&gt;    &lt;/code&gt;&lt;code class=&quot;js plain&quot;&gt;self.render =&lt;/code&gt; &lt;code class=&quot;js keyword&quot;&gt;function&lt;/code&gt; &lt;code class=&quot;js plain&quot;&gt;() {&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number39 index38 alt2&quot;&gt;&lt;code class=&quot;js spaces&quot;&gt;        &lt;/code&gt;&lt;code class=&quot;js plain&quot;&gt;$(&lt;/code&gt;&lt;code class=&quot;js string&quot;&gt;&quot;#btnGravar&quot;&lt;/code&gt;&lt;code class=&quot;js plain&quot;&gt;).click(&lt;/code&gt;&lt;code class=&quot;js keyword&quot;&gt;function&lt;/code&gt; &lt;code class=&quot;js plain&quot;&gt;() {&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number40 index39 alt1&quot;&gt;&lt;code class=&quot;js spaces&quot;&gt;            &lt;/code&gt;&lt;code class=&quot;js keyword&quot;&gt;var&lt;/code&gt; &lt;code class=&quot;js plain&quot;&gt;isEmail = ParticipanteService.validacaoEmail($(&lt;/code&gt;&lt;code class=&quot;js string&quot;&gt;&quot;#email&quot;&lt;/code&gt;&lt;code class=&quot;js plain&quot;&gt;).val());&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number41 index40 alt2&quot;&gt;&lt;code class=&quot;js spaces&quot;&gt;            &lt;/code&gt;&lt;code class=&quot;js keyword&quot;&gt;if&lt;/code&gt; &lt;code class=&quot;js plain&quot;&gt;(isEmail)&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number42 index41 alt1&quot;&gt;&lt;code class=&quot;js spaces&quot;&gt;                &lt;/code&gt;&lt;code class=&quot;js plain&quot;&gt;self.salvar();&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number43 index42 alt2&quot;&gt;&lt;code class=&quot;js spaces&quot;&gt;            &lt;/code&gt;&lt;code class=&quot;js keyword&quot;&gt;else&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number44 index43 alt1&quot;&gt;&lt;code class=&quot;js spaces&quot;&gt;                &lt;/code&gt;&lt;code class=&quot;js plain&quot;&gt;alert(&lt;/code&gt;&lt;code class=&quot;js string&quot;&gt;&quot;O e-mail não é valido!&quot;&lt;/code&gt;&lt;code class=&quot;js plain&quot;&gt;);&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number45 index44 alt2&quot;&gt; &lt;/div&gt;
&lt;div class=&quot;line number46 index45 alt1&quot;&gt;&lt;code class=&quot;js spaces&quot;&gt;        &lt;/code&gt;&lt;code class=&quot;js plain&quot;&gt;});&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number47 index46 alt2&quot;&gt;&lt;code class=&quot;js spaces&quot;&gt;    &lt;/code&gt;&lt;code class=&quot;js plain&quot;&gt;}();&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number48 index47 alt1&quot;&gt;&lt;code class=&quot;js plain&quot;&gt;}();&lt;/code&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;b&gt;&lt;br/&gt;&lt;/b&gt;&lt;b&gt;Conclusão&lt;/b&gt;: Podemos observar que com essa arquitetura proposta conseguimos separar as responsabilidades e cada camada e especialista em uma determinada tarefa, uma simples brecha no nosso código pode ser o início do fracasso do nosso projeto.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Links Uteis:&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Código fonte do projeto&lt;b&gt;:&lt;/b&gt; &lt;a href=&quot;https://github.com/julianosaless/ModeloArquiteturalJS&quot;&gt;https://github.com/julianosaless/ModeloArquiteturalJS&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Guia de referência: &lt;a href=&quot;http://knockoutjs.com/&quot;&gt;http://knockoutjs.com/&lt;/a&gt;, &lt;a href=&quot;http://backbonejs.org/&quot;&gt;http://backbonejs.org/&lt;/a&gt; ,&lt;a href=&quot;http://devbrasil.net/group/jquery&quot;&gt;http://devbrasil.net/group/jquery&lt;/a&gt;,&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://devbrasil.net/group/aspnet&quot;&gt;http://devbrasil.net/group/aspnet&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;</content>
<category term="Brasil" />

                                    </entry>
                            <entry>
                    <title>Método Virtual C#</title>
                    <link rel="alternate" href="http://devbrasil.net/xn/detail/2307362:BlogPost:240038"/>
                                        <id>tag:devbrasil.net,2013-09-07:2307362:BlogPost:240038</id>
                                        <updated>2013-09-07T22:56:42.000Z</updated>
                    
                                            <author>
                            <name>Juliano Sales</name>
                            <uri>http://devbrasil.net/profile/JulianoSales</uri>
                        </author>
                    
                    <summary type="html">
                        &lt;p style=&quot;text-align: left;&quot;&gt;Olá tudo bem, vamos a definição da Microsoft sobre &lt;strong&gt;Métodos Virtuais&lt;/strong&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&lt;em&gt;“A virtual function is a member function that you expect to be redefined in derived classes. When you refer to a derived class object using a pointer or a reference to the base class, you can call a virtual function for that object and execute the derived class’s version of the function.”&lt;/em&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt; …&lt;/p&gt;                    </summary>

                    <content type="html">
&lt;p style=&quot;text-align: left;&quot;&gt;Olá tudo bem, vamos a definição da Microsoft sobre &lt;strong&gt;Métodos Virtuais&lt;/strong&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&lt;em&gt;“A virtual function is a member function that you expect to be redefined in derived classes. When you refer to a derived class object using a pointer or a reference to the base class, you can call a virtual function for that object and execute the derived class’s version of the function.”&lt;/em&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt; &lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;Para melhorar o nosso entendimento vamos conferir o diagrama de class abaixo.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&lt;a href=&quot;http://juliano-sales.net/wp-content/uploads/2013/07/diagrama.jpg&quot;&gt;&lt;img class=&quot;aligncenter size-large wp-image-790&quot; title=&quot;diagrama&quot; src=&quot;http://juliano-sales.net/wp-content/uploads/2013/07/diagrama-1024x420.jpg&quot; alt=&quot;&quot; width=&quot;617&quot; height=&quot;253&quot;/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;Segue um exemplo básico mostrando o poder do polimorfismo.&lt;/p&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;&lt;div id=&quot;highlighter_433741&quot; class=&quot;syntaxhighlighter csharp&quot;&gt;&lt;div class=&quot;toolbar&quot;&gt;&lt;span&gt;&lt;a href=&quot;http://juliano-sales.net/2013/07/metodo-virtual-c/#&quot; class=&quot;toolbar_item command_help help&quot;&gt; &lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;table border=&quot;0&quot; cellspacing=&quot;0&quot;&gt;
&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;div class=&quot;line number1 index0 alt2&quot;&gt;1&lt;/div&gt;
&lt;div class=&quot;line number2 index1 alt1&quot;&gt;2&lt;/div&gt;
&lt;div class=&quot;line number3 index2 alt2&quot;&gt;3&lt;/div&gt;
&lt;div class=&quot;line number4 index3 alt1&quot;&gt;4&lt;/div&gt;
&lt;div class=&quot;line number5 index4 alt2&quot;&gt;5&lt;/div&gt;
&lt;div class=&quot;line number6 index5 alt1&quot;&gt;6&lt;/div&gt;
&lt;div class=&quot;line number7 index6 alt2&quot;&gt;7&lt;/div&gt;
&lt;div class=&quot;line number8 index7 alt1&quot;&gt;8&lt;/div&gt;
&lt;div class=&quot;line number9 index8 alt2&quot;&gt;9&lt;/div&gt;
&lt;div class=&quot;line number10 index9 alt1&quot;&gt;10&lt;/div&gt;
&lt;div class=&quot;line number11 index10 alt2&quot;&gt;11&lt;/div&gt;
&lt;div class=&quot;line number12 index11 alt1&quot;&gt;12&lt;/div&gt;
&lt;div class=&quot;line number13 index12 alt2&quot;&gt;13&lt;/div&gt;
&lt;div class=&quot;line number14 index13 alt1&quot;&gt;14&lt;/div&gt;
&lt;div class=&quot;line number15 index14 alt2&quot;&gt;15&lt;/div&gt;
&lt;div class=&quot;line number16 index15 alt1&quot;&gt;16&lt;/div&gt;
&lt;div class=&quot;line number17 index16 alt2&quot;&gt;17&lt;/div&gt;
&lt;div class=&quot;line number18 index17 alt1&quot;&gt;18&lt;/div&gt;
&lt;div class=&quot;line number19 index18 alt2&quot;&gt;19&lt;/div&gt;
&lt;div class=&quot;line number20 index19 alt1&quot;&gt;20&lt;/div&gt;
&lt;div class=&quot;line number21 index20 alt2&quot;&gt;21&lt;/div&gt;
&lt;div class=&quot;line number22 index21 alt1&quot;&gt;22&lt;/div&gt;
&lt;div class=&quot;line number23 index22 alt2&quot;&gt;23&lt;/div&gt;
&lt;div class=&quot;line number24 index23 alt1&quot;&gt;24&lt;/div&gt;
&lt;/td&gt;
&lt;td class=&quot;code&quot;&gt;&lt;div class=&quot;container&quot;&gt;&lt;div class=&quot;line number1 index0 alt2&quot;&gt;&lt;code class=&quot;csharp keyword&quot;&gt;public&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;class&lt;/code&gt; &lt;code class=&quot;csharp plain&quot;&gt;Pessoa&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number2 index1 alt1&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;    &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;{&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number3 index2 alt2&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;        &lt;/code&gt;&lt;code class=&quot;csharp keyword&quot;&gt;public&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;virtual&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;string&lt;/code&gt; &lt;code class=&quot;csharp plain&quot;&gt;Nome()&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number4 index3 alt1&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;        &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;{&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number5 index4 alt2&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;            &lt;/code&gt;&lt;code class=&quot;csharp keyword&quot;&gt;return&lt;/code&gt; &lt;code class=&quot;csharp string&quot;&gt;&quot;Nome Padrao&quot;&lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;;&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number6 index5 alt1&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;        &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;}&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number7 index6 alt2&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;    &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;}&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number8 index7 alt1&quot;&gt; &lt;/div&gt;
&lt;div class=&quot;line number9 index8 alt2&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;    &lt;/code&gt;&lt;code class=&quot;csharp keyword&quot;&gt;public&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;class&lt;/code&gt; &lt;code class=&quot;csharp plain&quot;&gt;Ricardo : Pessoa&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number10 index9 alt1&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;    &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;{&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number11 index10 alt2&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;        &lt;/code&gt;&lt;code class=&quot;csharp keyword&quot;&gt;public&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;override&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;string&lt;/code&gt; &lt;code class=&quot;csharp plain&quot;&gt;Nome()&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number12 index11 alt1&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;        &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;{&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number13 index12 alt2&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;            &lt;/code&gt;&lt;code class=&quot;csharp keyword&quot;&gt;return&lt;/code&gt; &lt;code class=&quot;csharp string&quot;&gt;&quot;Ricardo&quot;&lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;;&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number14 index13 alt1&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;        &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;}&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number15 index14 alt2&quot;&gt; &lt;/div&gt;
&lt;div class=&quot;line number16 index15 alt1&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;    &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;}&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number17 index16 alt2&quot;&gt; &lt;/div&gt;
&lt;div class=&quot;line number18 index17 alt1&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;    &lt;/code&gt;&lt;code class=&quot;csharp keyword&quot;&gt;public&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;class&lt;/code&gt; &lt;code class=&quot;csharp plain&quot;&gt;Paulo : Pessoa&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number19 index18 alt2&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;    &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;{&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number20 index19 alt1&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;        &lt;/code&gt;&lt;code class=&quot;csharp keyword&quot;&gt;public&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;override&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;string&lt;/code&gt; &lt;code class=&quot;csharp plain&quot;&gt;Nome()&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number21 index20 alt2&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;        &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;{&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number22 index21 alt1&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;            &lt;/code&gt;&lt;code class=&quot;csharp keyword&quot;&gt;return&lt;/code&gt; &lt;code class=&quot;csharp string&quot;&gt;&quot;Paulo&quot;&lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;;&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number23 index22 alt2&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;        &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;}&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number24 index23 alt1&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;    &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;}&lt;/code&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;Agora vamos aos testes&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt; &lt;/p&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;&lt;div id=&quot;highlighter_376196&quot; class=&quot;syntaxhighlighter csharp&quot;&gt;&lt;table border=&quot;0&quot; cellspacing=&quot;0&quot;&gt;
&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;div class=&quot;line number1 index0 alt2&quot;&gt;1&lt;/div&gt;
&lt;div class=&quot;line number2 index1 alt1&quot;&gt;2&lt;/div&gt;
&lt;div class=&quot;line number3 index2 alt2&quot;&gt;3&lt;/div&gt;
&lt;div class=&quot;line number4 index3 alt1&quot;&gt;4&lt;/div&gt;
&lt;div class=&quot;line number5 index4 alt2&quot;&gt;5&lt;/div&gt;
&lt;div class=&quot;line number6 index5 alt1&quot;&gt;6&lt;/div&gt;
&lt;div class=&quot;line number7 index6 alt2&quot;&gt;7&lt;/div&gt;
&lt;div class=&quot;line number8 index7 alt1&quot;&gt;8&lt;/div&gt;
&lt;div class=&quot;line number9 index8 alt2&quot;&gt;9&lt;/div&gt;
&lt;div class=&quot;line number10 index9 alt1&quot;&gt;10&lt;/div&gt;
&lt;div class=&quot;line number11 index10 alt2&quot;&gt;11&lt;/div&gt;
&lt;div class=&quot;line number12 index11 alt1&quot;&gt;12&lt;/div&gt;
&lt;div class=&quot;line number13 index12 alt2&quot;&gt;13&lt;/div&gt;
&lt;div class=&quot;line number14 index13 alt1&quot;&gt;14&lt;/div&gt;
&lt;div class=&quot;line number15 index14 alt2&quot;&gt;15&lt;/div&gt;
&lt;div class=&quot;line number16 index15 alt1&quot;&gt;16&lt;/div&gt;
&lt;div class=&quot;line number17 index16 alt2&quot;&gt;17&lt;/div&gt;
&lt;div class=&quot;line number18 index17 alt1&quot;&gt;18&lt;/div&gt;
&lt;/td&gt;
&lt;td class=&quot;code&quot;&gt;&lt;div class=&quot;container&quot;&gt;&lt;div class=&quot;line number1 index0 alt2&quot;&gt;&lt;code class=&quot;csharp plain&quot;&gt;[TestClass]&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number2 index1 alt1&quot;&gt;&lt;code class=&quot;csharp keyword&quot;&gt;public&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;class&lt;/code&gt; &lt;code class=&quot;csharp plain&quot;&gt;TestMetodoVirtual&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number3 index2 alt2&quot;&gt;&lt;code class=&quot;csharp plain&quot;&gt;{&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number4 index3 alt1&quot;&gt; &lt;/div&gt;
&lt;div class=&quot;line number5 index4 alt2&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;    &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;[TestMethod]&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number6 index5 alt1&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;    &lt;/code&gt;&lt;code class=&quot;csharp keyword&quot;&gt;public&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;void&lt;/code&gt; &lt;code class=&quot;csharp plain&quot;&gt;deve_retornar_nome_ricardo()&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number7 index6 alt2&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;    &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;{&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number8 index7 alt1&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;        &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;Pessoa pessoa =&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;new&lt;/code&gt; &lt;code class=&quot;csharp plain&quot;&gt;Ricardo();&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number9 index8 alt2&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;        &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;Assert.AreEqual(&lt;/code&gt;&lt;code class=&quot;csharp string&quot;&gt;&quot;Ricardo&quot;&lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;, pessoa.Nome());&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number10 index9 alt1&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;    &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;}&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number11 index10 alt2&quot;&gt; &lt;/div&gt;
&lt;div class=&quot;line number12 index11 alt1&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;    &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;[TestMethod]&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number13 index12 alt2&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;    &lt;/code&gt;&lt;code class=&quot;csharp keyword&quot;&gt;public&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;void&lt;/code&gt; &lt;code class=&quot;csharp plain&quot;&gt;deve_retornar_nome_paulo()&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number14 index13 alt1&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;    &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;{&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number15 index14 alt2&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;        &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;Pessoa pessoa =&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;new&lt;/code&gt; &lt;code class=&quot;csharp plain&quot;&gt;Paulo();&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number16 index15 alt1&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;        &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;Assert.AreEqual(&lt;/code&gt;&lt;code class=&quot;csharp string&quot;&gt;&quot;Paulo&quot;&lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;, pessoa.Nome());&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number17 index16 alt2&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;    &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;}&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number18 index17 alt1&quot;&gt;&lt;code class=&quot;csharp plain&quot;&gt;}&lt;/code&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&lt;strong&gt;Conclusão&lt;/strong&gt;:&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;Apesar desse exemplo bem simples existe vários Framework que utilizam essa estrategia, uma dica legal e utilizar e conhecer o &lt;strong&gt;&lt;a href=&quot;http://www.c2.com/cgi/wiki?HookMethod&quot; target=&quot;_blank&quot;&gt;Hook Method &lt;/a&gt;, &lt;/strong&gt;até aproxima pessoal.&lt;/p&gt;</content>
<category term="Brasil" />

                    <link rel="enclosure" href="http://juliano-sales.net/wp-content/uploads/2013/07/diagrama.jpg" type="image/jpeg"/>                </entry>
                            <entry>
                    <title>Class abstratas x Interface</title>
                    <link rel="alternate" href="http://devbrasil.net/xn/detail/2307362:BlogPost:238789"/>
                                        <id>tag:devbrasil.net,2013-08-08:2307362:BlogPost:238789</id>
                                        <updated>2013-08-08T14:00:00.000Z</updated>
                    
                                            <author>
                            <name>Juliano Sales</name>
                            <uri>http://devbrasil.net/profile/JulianoSales</uri>
                        </author>
                    
                    <summary type="html">
                        &lt;p style=&quot;text-align: left;&quot;&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;Tanto as classes abstratas e quanto as interfaces podem definir métodos abstratos que precisam ser implementados pelas class que estende ou implementa, porém somente as classes abstratas podem possuir métodos concretos.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;Apesar dessa diferença vamos notar que teremos a repostas mais conceitual do que relacionada com questões referente a linguagem.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;Quando a abstração e…&lt;/p&gt;                    </summary>

                    <content type="html">
&lt;p style=&quot;text-align: left;&quot;&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;Tanto as classes abstratas e quanto as interfaces podem definir métodos abstratos que precisam ser implementados pelas class que estende ou implementa, porém somente as classes abstratas podem possuir métodos concretos.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;Apesar dessa diferença vamos notar que teremos a repostas mais conceitual do que relacionada com questões referente a linguagem.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;Quando a abstração e um comportamento então creio que a melhor solução e utilizar uma interface, quando a abstração e mais conceitual, algo que precisa ser especializado e refinado creio que a melhor solução e construir uma class abstrata.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;Por um momento vamos imaginar que precisamos criar uma árvore.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;Vamos as características de uma árvore, toda árvore possui algumas características listada abaixo.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;Arvore:&lt;/p&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;Folha.&lt;/li&gt;
&lt;li&gt;Galho.&lt;/li&gt;
&lt;li&gt;Tronco.&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;Fruto&lt;/span&gt;.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;Note que a característica fruto está em vermelho como não é novidade tem árvore que são frutíferas e arvores que não são.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;Então podemos dizer que todas as árvores em um determinado ponto tem uma característica comum, porém existe características incomuns quando falamos de outros pontos, como no exemplo o fruto seria uma característica incomum.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;Nesse exemplo poderíamos utilizar uma class abstrata, abaixo irei colocar alguns exemplos dessa implementação.&lt;/p&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;&lt;div id=&quot;highlighter_475301&quot; class=&quot;syntaxhighlighter csharp&quot;&gt;&lt;div class=&quot;toolbar&quot;&gt;&lt;span&gt;&lt;a href=&quot;http://juliano-sales.net/2013/07/class-abstratas-x-interface/?preview=true&amp;amp;preview_id=797&amp;amp;preview_nonce=ce518ee61d#&quot; class=&quot;toolbar_item command_help help&quot;&gt; &lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;table border=&quot;0&quot; cellspacing=&quot;0&quot;&gt;
&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;blockquote&gt;&lt;div class=&quot;line number1 index0 alt2&quot;&gt;1&lt;/div&gt;
&lt;div class=&quot;line number2 index1 alt1&quot;&gt;2&lt;/div&gt;
&lt;div class=&quot;line number3 index2 alt2&quot;&gt;3&lt;/div&gt;
&lt;div class=&quot;line number4 index3 alt1&quot;&gt;4&lt;/div&gt;
&lt;div class=&quot;line number5 index4 alt2&quot;&gt;5&lt;/div&gt;
&lt;div class=&quot;line number6 index5 alt1&quot;&gt;6&lt;/div&gt;
&lt;div class=&quot;line number7 index6 alt2&quot;&gt;7&lt;/div&gt;
&lt;div class=&quot;line number8 index7 alt1&quot;&gt;8&lt;/div&gt;
&lt;div class=&quot;line number9 index8 alt2&quot;&gt;9&lt;/div&gt;
&lt;div class=&quot;line number10 index9 alt1&quot;&gt;10&lt;/div&gt;
&lt;div class=&quot;line number11 index10 alt2&quot;&gt;11&lt;/div&gt;
&lt;div class=&quot;line number12 index11 alt1&quot;&gt;12&lt;/div&gt;
&lt;div class=&quot;line number13 index12 alt2&quot;&gt;13&lt;/div&gt;
&lt;div class=&quot;line number14 index13 alt1&quot;&gt;14&lt;/div&gt;
&lt;div class=&quot;line number15 index14 alt2&quot;&gt;15&lt;/div&gt;
&lt;div class=&quot;line number16 index15 alt1&quot;&gt;16&lt;/div&gt;
&lt;div class=&quot;line number17 index16 alt2&quot;&gt;17&lt;/div&gt;
&lt;div class=&quot;line number18 index17 alt1&quot;&gt;18&lt;/div&gt;
&lt;div class=&quot;line number19 index18 alt2&quot;&gt;19&lt;/div&gt;
&lt;div class=&quot;line number20 index19 alt1&quot;&gt;20&lt;/div&gt;
&lt;/blockquote&gt;
&lt;/td&gt;
&lt;td class=&quot;code&quot;&gt;&lt;div class=&quot;container&quot;&gt;&lt;blockquote&gt;&lt;div class=&quot;line number1 index0 alt2&quot;&gt;&lt;code class=&quot;csharp keyword&quot;&gt;public&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;abstract&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;class&lt;/code&gt; &lt;code class=&quot;csharp plain&quot;&gt;Arvore&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number2 index1 alt1&quot;&gt;&lt;code class=&quot;csharp plain&quot;&gt;{&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number3 index2 alt2&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;       &lt;/code&gt;&lt;code class=&quot;csharp keyword&quot;&gt;public&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;void&lt;/code&gt; &lt;code class=&quot;csharp plain&quot;&gt;Folha()&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number4 index3 alt1&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;       &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;{&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number5 index4 alt2&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;           &lt;/code&gt;&lt;code class=&quot;csharp keyword&quot;&gt;throw&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;new&lt;/code&gt; &lt;code class=&quot;csharp plain&quot;&gt;NotImplementedException();&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number6 index5 alt1&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;       &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;}&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number7 index6 alt2&quot;&gt; &lt;/div&gt;
&lt;div class=&quot;line number8 index7 alt1&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;       &lt;/code&gt;&lt;code class=&quot;csharp keyword&quot;&gt;public&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;void&lt;/code&gt; &lt;code class=&quot;csharp plain&quot;&gt;Galho()&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number9 index8 alt2&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;       &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;{&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number10 index9 alt1&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;           &lt;/code&gt;&lt;code class=&quot;csharp keyword&quot;&gt;throw&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;new&lt;/code&gt; &lt;code class=&quot;csharp plain&quot;&gt;NotImplementedException();&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number11 index10 alt2&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;       &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;}&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number12 index11 alt1&quot;&gt; &lt;/div&gt;
&lt;div class=&quot;line number13 index12 alt2&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;       &lt;/code&gt;&lt;code class=&quot;csharp keyword&quot;&gt;public&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;void&lt;/code&gt; &lt;code class=&quot;csharp plain&quot;&gt;Tronco()&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number14 index13 alt1&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;       &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;{&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number15 index14 alt2&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;           &lt;/code&gt;&lt;code class=&quot;csharp keyword&quot;&gt;throw&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;new&lt;/code&gt; &lt;code class=&quot;csharp plain&quot;&gt;NotImplementedException();&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number16 index15 alt1&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;       &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;}&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number17 index16 alt2&quot;&gt; &lt;/div&gt;
&lt;div class=&quot;line number18 index17 alt1&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;       &lt;/code&gt;&lt;code class=&quot;csharp keyword&quot;&gt;public&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;abstract&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;string&lt;/code&gt; &lt;code class=&quot;csharp plain&quot;&gt;Fruto();&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number19 index18 alt2&quot;&gt; &lt;/div&gt;
&lt;div class=&quot;line number20 index19 alt1&quot;&gt;&lt;code class=&quot;csharp plain&quot;&gt;}&lt;/code&gt;&lt;/div&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;&lt;div id=&quot;highlighter_496629&quot; class=&quot;syntaxhighlighter csharp&quot;&gt;&lt;div class=&quot;toolbar&quot;&gt;&lt;span&gt;&lt;a href=&quot;http://juliano-sales.net/2013/07/class-abstratas-x-interface/?preview=true&amp;amp;preview_id=797&amp;amp;preview_nonce=ce518ee61d#&quot; class=&quot;toolbar_item command_help help&quot;&gt; &lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;table border=&quot;0&quot; cellspacing=&quot;0&quot;&gt;
&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;blockquote&gt;&lt;div class=&quot;line number1 index0 alt2&quot;&gt;1&lt;/div&gt;
&lt;div class=&quot;line number2 index1 alt1&quot;&gt;2&lt;/div&gt;
&lt;div class=&quot;line number3 index2 alt2&quot;&gt;3&lt;/div&gt;
&lt;div class=&quot;line number4 index3 alt1&quot;&gt;4&lt;/div&gt;
&lt;div class=&quot;line number5 index4 alt2&quot;&gt;5&lt;/div&gt;
&lt;div class=&quot;line number6 index5 alt1&quot;&gt;6&lt;/div&gt;
&lt;div class=&quot;line number7 index6 alt2&quot;&gt;7&lt;/div&gt;
&lt;/blockquote&gt;
&lt;/td&gt;
&lt;td class=&quot;code&quot;&gt;&lt;div class=&quot;container&quot;&gt;&lt;blockquote&gt;&lt;div class=&quot;line number1 index0 alt2&quot;&gt;&lt;code class=&quot;csharp keyword&quot;&gt;public&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;class&lt;/code&gt; &lt;code class=&quot;csharp plain&quot;&gt;Abacateiro : Arvore&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number2 index1 alt1&quot;&gt;&lt;code class=&quot;csharp plain&quot;&gt;{&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number3 index2 alt2&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;        &lt;/code&gt;&lt;code class=&quot;csharp keyword&quot;&gt;public&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;override&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;string&lt;/code&gt; &lt;code class=&quot;csharp plain&quot;&gt;Fruto()&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number4 index3 alt1&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;        &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;{&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number5 index4 alt2&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;            &lt;/code&gt;&lt;code class=&quot;csharp keyword&quot;&gt;return&lt;/code&gt; &lt;code class=&quot;csharp string&quot;&gt;&quot;Abacate&quot;&lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;;&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number6 index5 alt1&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;        &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;}&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number7 index6 alt2&quot;&gt;&lt;code class=&quot;csharp plain&quot;&gt;}&lt;/code&gt;&lt;/div&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;&lt;div id=&quot;highlighter_692739&quot; class=&quot;syntaxhighlighter csharp&quot;&gt;&lt;div class=&quot;toolbar&quot;&gt;&lt;span&gt;&lt;a href=&quot;http://juliano-sales.net/2013/07/class-abstratas-x-interface/?preview=true&amp;amp;preview_id=797&amp;amp;preview_nonce=ce518ee61d#&quot; class=&quot;toolbar_item command_help help&quot;&gt; &lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;table border=&quot;0&quot; cellspacing=&quot;0&quot;&gt;
&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;blockquote&gt;&lt;div class=&quot;line number1 index0 alt2&quot;&gt;1&lt;/div&gt;
&lt;div class=&quot;line number2 index1 alt1&quot;&gt;2&lt;/div&gt;
&lt;div class=&quot;line number3 index2 alt2&quot;&gt;3&lt;/div&gt;
&lt;div class=&quot;line number4 index3 alt1&quot;&gt;4&lt;/div&gt;
&lt;div class=&quot;line number5 index4 alt2&quot;&gt;5&lt;/div&gt;
&lt;div class=&quot;line number6 index5 alt1&quot;&gt;6&lt;/div&gt;
&lt;div class=&quot;line number7 index6 alt2&quot;&gt;7&lt;/div&gt;
&lt;/blockquote&gt;
&lt;/td&gt;
&lt;td class=&quot;code&quot;&gt;&lt;div class=&quot;container&quot;&gt;&lt;blockquote&gt;&lt;div class=&quot;line number1 index0 alt2&quot;&gt;&lt;code class=&quot;csharp keyword&quot;&gt;public&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;class&lt;/code&gt; &lt;code class=&quot;csharp plain&quot;&gt;Goiabeira : Arvore&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number2 index1 alt1&quot;&gt;&lt;code class=&quot;csharp plain&quot;&gt;{&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number3 index2 alt2&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;       &lt;/code&gt;&lt;code class=&quot;csharp keyword&quot;&gt;public&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;override&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;string&lt;/code&gt; &lt;code class=&quot;csharp plain&quot;&gt;Fruto()&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number4 index3 alt1&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;       &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;{&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number5 index4 alt2&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;           &lt;/code&gt;&lt;code class=&quot;csharp keyword&quot;&gt;return&lt;/code&gt; &lt;code class=&quot;csharp string&quot;&gt;&quot;Goiaba&quot;&lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;;&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number6 index5 alt1&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;       &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;}&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number7 index6 alt2&quot;&gt;&lt;code class=&quot;csharp plain&quot;&gt;}&lt;/code&gt;&lt;/div&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;Testando nossa implementação:&lt;/p&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;&lt;div id=&quot;highlighter_962589&quot; class=&quot;syntaxhighlighter csharp&quot;&gt;&lt;div class=&quot;toolbar&quot;&gt;&lt;span&gt;&lt;a href=&quot;http://juliano-sales.net/2013/07/class-abstratas-x-interface/?preview=true&amp;amp;preview_id=797&amp;amp;preview_nonce=ce518ee61d#&quot; class=&quot;toolbar_item command_help help&quot;&gt; &lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;table border=&quot;0&quot; cellspacing=&quot;0&quot;&gt;
&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;blockquote&gt;&lt;div class=&quot;line number1 index0 alt2&quot;&gt;1&lt;/div&gt;
&lt;div class=&quot;line number2 index1 alt1&quot;&gt;2&lt;/div&gt;
&lt;div class=&quot;line number3 index2 alt2&quot;&gt;3&lt;/div&gt;
&lt;div class=&quot;line number4 index3 alt1&quot;&gt;4&lt;/div&gt;
&lt;div class=&quot;line number5 index4 alt2&quot;&gt;5&lt;/div&gt;
&lt;div class=&quot;line number6 index5 alt1&quot;&gt;6&lt;/div&gt;
&lt;div class=&quot;line number7 index6 alt2&quot;&gt;7&lt;/div&gt;
&lt;div class=&quot;line number8 index7 alt1&quot;&gt;8&lt;/div&gt;
&lt;div class=&quot;line number9 index8 alt2&quot;&gt;9&lt;/div&gt;
&lt;div class=&quot;line number10 index9 alt1&quot;&gt;10&lt;/div&gt;
&lt;div class=&quot;line number11 index10 alt2&quot;&gt;11&lt;/div&gt;
&lt;div class=&quot;line number12 index11 alt1&quot;&gt;12&lt;/div&gt;
&lt;div class=&quot;line number13 index12 alt2&quot;&gt;13&lt;/div&gt;
&lt;div class=&quot;line number14 index13 alt1&quot;&gt;14&lt;/div&gt;
&lt;div class=&quot;line number15 index14 alt2&quot;&gt;15&lt;/div&gt;
&lt;div class=&quot;line number16 index15 alt1&quot;&gt;16&lt;/div&gt;
&lt;div class=&quot;line number17 index16 alt2&quot;&gt;17&lt;/div&gt;
&lt;div class=&quot;line number18 index17 alt1&quot;&gt;18&lt;/div&gt;
&lt;/blockquote&gt;
&lt;/td&gt;
&lt;td class=&quot;code&quot;&gt;&lt;div class=&quot;container&quot;&gt;&lt;blockquote&gt;&lt;div class=&quot;line number1 index0 alt2&quot;&gt;&lt;code class=&quot;csharp plain&quot;&gt;[TestClass]&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number2 index1 alt1&quot;&gt;&lt;code class=&quot;csharp keyword&quot;&gt;public&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;class&lt;/code&gt; &lt;code class=&quot;csharp plain&quot;&gt;TesteArvoreAbstract&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number3 index2 alt2&quot;&gt;&lt;code class=&quot;csharp plain&quot;&gt;{&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number4 index3 alt1&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;    &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;[TestMethod]&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number5 index4 alt2&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;    &lt;/code&gt;&lt;code class=&quot;csharp keyword&quot;&gt;public&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;void&lt;/code&gt; &lt;code class=&quot;csharp plain&quot;&gt;deve_retornar_o_fruto_goiaba()&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number6 index5 alt1&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;    &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;{&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number7 index6 alt2&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;        &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;Arvore arvore = &lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;new&lt;/code&gt; &lt;code class=&quot;csharp plain&quot;&gt;Goiabeira();&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number8 index7 alt1&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;        &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;Assert.AreEqual(&lt;/code&gt;&lt;code class=&quot;csharp string&quot;&gt;&quot;Goiaba&quot;&lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;, arvore.Fruto());&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number9 index8 alt2&quot;&gt; &lt;/div&gt;
&lt;div class=&quot;line number10 index9 alt1&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;    &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;}&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number11 index10 alt2&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;    &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;[TestMethod]&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number12 index11 alt1&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;    &lt;/code&gt;&lt;code class=&quot;csharp keyword&quot;&gt;public&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;void&lt;/code&gt; &lt;code class=&quot;csharp plain&quot;&gt;deve_retornar_o_fruto_abacate()&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number13 index12 alt2&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;    &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;{&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number14 index13 alt1&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;        &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;Arvore arvore =&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;new&lt;/code&gt; &lt;code class=&quot;csharp plain&quot;&gt;Abacateiro();&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number15 index14 alt2&quot;&gt; &lt;/div&gt;
&lt;div class=&quot;line number16 index15 alt1&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;        &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;Assert.AreEqual(&lt;/code&gt;&lt;code class=&quot;csharp string&quot;&gt;&quot;Abacate&quot;&lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;, arvore.Fruto());&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number17 index16 alt2&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;    &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;}&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number18 index17 alt1&quot;&gt;&lt;code class=&quot;csharp plain&quot;&gt;}&lt;/code&gt;&lt;/div&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;Outra maneira interessante seria:&lt;/p&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;&lt;div id=&quot;highlighter_344&quot; class=&quot;syntaxhighlighter csharp&quot;&gt;&lt;div class=&quot;toolbar&quot;&gt;&lt;span&gt;&lt;a href=&quot;http://juliano-sales.net/2013/07/class-abstratas-x-interface/?preview=true&amp;amp;preview_id=797&amp;amp;preview_nonce=ce518ee61d#&quot; class=&quot;toolbar_item command_help help&quot;&gt; &lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;table border=&quot;0&quot; cellspacing=&quot;0&quot;&gt;
&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;blockquote&gt;&lt;div class=&quot;line number1 index0 alt2&quot;&gt;1&lt;/div&gt;
&lt;div class=&quot;line number2 index1 alt1&quot;&gt;2&lt;/div&gt;
&lt;div class=&quot;line number3 index2 alt2&quot;&gt;3&lt;/div&gt;
&lt;div class=&quot;line number4 index3 alt1&quot;&gt;4&lt;/div&gt;
&lt;div class=&quot;line number5 index4 alt2&quot;&gt;5&lt;/div&gt;
&lt;div class=&quot;line number6 index5 alt1&quot;&gt;6&lt;/div&gt;
&lt;/blockquote&gt;
&lt;/td&gt;
&lt;td class=&quot;code&quot;&gt;&lt;div class=&quot;container&quot;&gt;&lt;blockquote&gt;&lt;div class=&quot;line number1 index0 alt2&quot;&gt;&lt;code class=&quot;csharp keyword&quot;&gt;public&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;interface&lt;/code&gt; &lt;code class=&quot;csharp plain&quot;&gt;IArvore&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number2 index1 alt1&quot;&gt;&lt;code class=&quot;csharp plain&quot;&gt;{&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number3 index2 alt2&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt; &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;ICaracteristicasComuns CaracteristicasComuns {&lt;/code&gt;&lt;code class=&quot;csharp keyword&quot;&gt;get&lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;; }&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number4 index3 alt1&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt; &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;CaracteristicasIncomuns CaracteristicasIncomuns {&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;get&lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;; }&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number5 index4 alt2&quot;&gt; &lt;/div&gt;
&lt;div class=&quot;line number6 index5 alt1&quot;&gt;&lt;code class=&quot;csharp plain&quot;&gt;}&lt;/code&gt;&lt;/div&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;&lt;div id=&quot;highlighter_496340&quot; class=&quot;syntaxhighlighter csharp&quot;&gt;&lt;div class=&quot;toolbar&quot;&gt;&lt;span&gt;&lt;a href=&quot;http://juliano-sales.net/2013/07/class-abstratas-x-interface/?preview=true&amp;amp;preview_id=797&amp;amp;preview_nonce=ce518ee61d#&quot; class=&quot;toolbar_item command_help help&quot;&gt; &lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;table border=&quot;0&quot; cellspacing=&quot;0&quot;&gt;
&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;blockquote&gt;&lt;div class=&quot;line number1 index0 alt2&quot;&gt;1&lt;/div&gt;
&lt;div class=&quot;line number2 index1 alt1&quot;&gt;2&lt;/div&gt;
&lt;div class=&quot;line number3 index2 alt2&quot;&gt;3&lt;/div&gt;
&lt;div class=&quot;line number4 index3 alt1&quot;&gt;4&lt;/div&gt;
&lt;div class=&quot;line number5 index4 alt2&quot;&gt;5&lt;/div&gt;
&lt;div class=&quot;line number6 index5 alt1&quot;&gt;6&lt;/div&gt;
&lt;div class=&quot;line number7 index6 alt2&quot;&gt;7&lt;/div&gt;
&lt;div class=&quot;line number8 index7 alt1&quot;&gt;8&lt;/div&gt;
&lt;/blockquote&gt;
&lt;/td&gt;
&lt;td class=&quot;code&quot;&gt;&lt;div class=&quot;container&quot;&gt;&lt;blockquote&gt;&lt;div class=&quot;line number1 index0 alt2&quot;&gt;&lt;code class=&quot;csharp keyword&quot;&gt;public&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;interface&lt;/code&gt; &lt;code class=&quot;csharp plain&quot;&gt;ICaracteristicasComuns&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number2 index1 alt1&quot;&gt;&lt;code class=&quot;csharp plain&quot;&gt;{&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number3 index2 alt2&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;    &lt;/code&gt;&lt;code class=&quot;csharp keyword&quot;&gt;void&lt;/code&gt; &lt;code class=&quot;csharp plain&quot;&gt;Folha();&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number4 index3 alt1&quot;&gt; &lt;/div&gt;
&lt;div class=&quot;line number5 index4 alt2&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;    &lt;/code&gt;&lt;code class=&quot;csharp keyword&quot;&gt;void&lt;/code&gt; &lt;code class=&quot;csharp plain&quot;&gt;Galho();&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number6 index5 alt1&quot;&gt; &lt;/div&gt;
&lt;div class=&quot;line number7 index6 alt2&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;    &lt;/code&gt;&lt;code class=&quot;csharp keyword&quot;&gt;void&lt;/code&gt; &lt;code class=&quot;csharp plain&quot;&gt;Tronco();&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number8 index7 alt1&quot;&gt;&lt;code class=&quot;csharp plain&quot;&gt;}&lt;/code&gt;&lt;/div&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;&lt;div id=&quot;highlighter_192977&quot; class=&quot;syntaxhighlighter csharp&quot;&gt;&lt;div class=&quot;toolbar&quot;&gt;&lt;span&gt;&lt;a href=&quot;http://juliano-sales.net/2013/07/class-abstratas-x-interface/?preview=true&amp;amp;preview_id=797&amp;amp;preview_nonce=ce518ee61d#&quot; class=&quot;toolbar_item command_help help&quot;&gt; &lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;blockquote&gt;&lt;table border=&quot;0&quot; cellspacing=&quot;0&quot;&gt;
&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;div class=&quot;line number1 index0 alt2&quot;&gt;1&lt;/div&gt;
&lt;div class=&quot;line number2 index1 alt1&quot;&gt;2&lt;/div&gt;
&lt;div class=&quot;line number3 index2 alt2&quot;&gt;3&lt;/div&gt;
&lt;div class=&quot;line number4 index3 alt1&quot;&gt;4&lt;/div&gt;
&lt;/td&gt;
&lt;td class=&quot;code&quot;&gt;&lt;div class=&quot;container&quot;&gt;&lt;div class=&quot;line number1 index0 alt2&quot;&gt;&lt;code class=&quot;csharp keyword&quot;&gt;         public&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;abstract&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;class&lt;/code&gt; &lt;code class=&quot;csharp plain&quot;&gt;CaracteristicasIncomuns&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number2 index1 alt1&quot;&gt;&lt;code class=&quot;csharp plain&quot;&gt;         {&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number3 index2 alt2&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;              &lt;/code&gt;&lt;code class=&quot;csharp keyword&quot;&gt;public&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;abstract&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;string&lt;/code&gt; &lt;code class=&quot;csharp plain&quot;&gt;Fruto();&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number4 index3 alt1&quot;&gt;&lt;code class=&quot;csharp plain&quot;&gt;         }&lt;/code&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;&lt;div id=&quot;highlighter_726646&quot; class=&quot;syntaxhighlighter csharp&quot;&gt;&lt;blockquote&gt;&lt;div class=&quot;toolbar&quot;&gt;&lt;span&gt;&lt;a href=&quot;http://juliano-sales.net/2013/07/class-abstratas-x-interface/?preview=true&amp;amp;preview_id=797&amp;amp;preview_nonce=ce518ee61d#&quot; class=&quot;toolbar_item command_help help&quot;&gt; &lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/blockquote&gt;
&lt;table border=&quot;0&quot; cellspacing=&quot;0&quot;&gt;
&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;blockquote&gt;&lt;div class=&quot;line number1 index0 alt2&quot;&gt;1&lt;/div&gt;
&lt;div class=&quot;line number2 index1 alt1&quot;&gt;2&lt;/div&gt;
&lt;div class=&quot;line number3 index2 alt2&quot;&gt;3&lt;/div&gt;
&lt;div class=&quot;line number4 index3 alt1&quot;&gt;4&lt;/div&gt;
&lt;div class=&quot;line number5 index4 alt2&quot;&gt;5&lt;/div&gt;
&lt;div class=&quot;line number6 index5 alt1&quot;&gt;6&lt;/div&gt;
&lt;div class=&quot;line number7 index6 alt2&quot;&gt;7&lt;/div&gt;
&lt;div class=&quot;line number8 index7 alt1&quot;&gt;8&lt;/div&gt;
&lt;div class=&quot;line number9 index8 alt2&quot;&gt;9&lt;/div&gt;
&lt;div class=&quot;line number10 index9 alt1&quot;&gt;10&lt;/div&gt;
&lt;div class=&quot;line number11 index10 alt2&quot;&gt;11&lt;/div&gt;
&lt;div class=&quot;line number12 index11 alt1&quot;&gt;12&lt;/div&gt;
&lt;div class=&quot;line number13 index12 alt2&quot;&gt;13&lt;/div&gt;
&lt;/blockquote&gt;
&lt;/td&gt;
&lt;td class=&quot;code&quot;&gt;&lt;div class=&quot;container&quot;&gt;&lt;blockquote&gt;&lt;div class=&quot;line number1 index0 alt2&quot;&gt;&lt;code class=&quot;csharp keyword&quot;&gt;public&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;class&lt;/code&gt; &lt;code class=&quot;csharp plain&quot;&gt;Goiabeira : IArvore&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number2 index1 alt1&quot;&gt;&lt;code class=&quot;csharp plain&quot;&gt;{&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number3 index2 alt2&quot;&gt; &lt;/div&gt;
&lt;div class=&quot;line number4 index3 alt1&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;    &lt;/code&gt;&lt;code class=&quot;csharp keyword&quot;&gt;public&lt;/code&gt; &lt;code class=&quot;csharp plain&quot;&gt;ICaracteristicasComuns CaracteristicasComuns&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number5 index4 alt2&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;    &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;{&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number6 index5 alt1&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;           &lt;/code&gt;&lt;code class=&quot;csharp keyword&quot;&gt;get&lt;/code&gt; &lt;code class=&quot;csharp plain&quot;&gt;{&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;return&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;new&lt;/code&gt; &lt;code class=&quot;csharp plain&quot;&gt;GoiabeiraPadrao(); }&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number7 index6 alt2&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;    &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;}&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number8 index7 alt1&quot;&gt; &lt;/div&gt;
&lt;div class=&quot;line number9 index8 alt2&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;    &lt;/code&gt;&lt;code class=&quot;csharp keyword&quot;&gt;public&lt;/code&gt; &lt;code class=&quot;csharp plain&quot;&gt;CaracteristicasIncomuns CaracteristicasIncomuns&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number10 index9 alt1&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;    &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;{&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number11 index10 alt2&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;           &lt;/code&gt;&lt;code class=&quot;csharp keyword&quot;&gt;get&lt;/code&gt; &lt;code class=&quot;csharp plain&quot;&gt;{&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;return&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;new&lt;/code&gt; &lt;code class=&quot;csharp plain&quot;&gt;GoiabeiraPersonalizada(); }&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number12 index11 alt1&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;    &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;}&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number13 index12 alt2&quot;&gt;&lt;code class=&quot;csharp plain&quot;&gt;}&lt;/code&gt;&lt;/div&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;&lt;div id=&quot;highlighter_518360&quot; class=&quot;syntaxhighlighter csharp&quot;&gt;&lt;div class=&quot;toolbar&quot;&gt;&lt;span&gt;&lt;a href=&quot;http://juliano-sales.net/2013/07/class-abstratas-x-interface/?preview=true&amp;amp;preview_id=797&amp;amp;preview_nonce=ce518ee61d#&quot; class=&quot;toolbar_item command_help help&quot;&gt; &lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;table border=&quot;0&quot; cellspacing=&quot;0&quot;&gt;
&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;blockquote&gt;&lt;div class=&quot;line number1 index0 alt2&quot;&gt;1&lt;/div&gt;
&lt;div class=&quot;line number2 index1 alt1&quot;&gt;2&lt;/div&gt;
&lt;div class=&quot;line number3 index2 alt2&quot;&gt;3&lt;/div&gt;
&lt;div class=&quot;line number4 index3 alt1&quot;&gt;4&lt;/div&gt;
&lt;div class=&quot;line number5 index4 alt2&quot;&gt;5&lt;/div&gt;
&lt;div class=&quot;line number6 index5 alt1&quot;&gt;6&lt;/div&gt;
&lt;div class=&quot;line number7 index6 alt2&quot;&gt;7&lt;/div&gt;
&lt;div class=&quot;line number8 index7 alt1&quot;&gt;8&lt;/div&gt;
&lt;div class=&quot;line number9 index8 alt2&quot;&gt;9&lt;/div&gt;
&lt;div class=&quot;line number10 index9 alt1&quot;&gt;10&lt;/div&gt;
&lt;div class=&quot;line number11 index10 alt2&quot;&gt;11&lt;/div&gt;
&lt;div class=&quot;line number12 index11 alt1&quot;&gt;12&lt;/div&gt;
&lt;div class=&quot;line number13 index12 alt2&quot;&gt;13&lt;/div&gt;
&lt;div class=&quot;line number14 index13 alt1&quot;&gt;14&lt;/div&gt;
&lt;div class=&quot;line number15 index14 alt2&quot;&gt;15&lt;/div&gt;
&lt;div class=&quot;line number16 index15 alt1&quot;&gt;16&lt;/div&gt;
&lt;div class=&quot;line number17 index16 alt2&quot;&gt;17&lt;/div&gt;
&lt;div class=&quot;line number18 index17 alt1&quot;&gt;18&lt;/div&gt;
&lt;/blockquote&gt;
&lt;/td&gt;
&lt;td class=&quot;code&quot;&gt;&lt;div class=&quot;container&quot;&gt;&lt;blockquote&gt;&lt;div class=&quot;line number1 index0 alt2&quot;&gt;&lt;code class=&quot;csharp keyword&quot;&gt;public&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;class&lt;/code&gt; &lt;code class=&quot;csharp plain&quot;&gt;GoiabeiraPadrao : ICaracteristicasComuns&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number2 index1 alt1&quot;&gt;&lt;code class=&quot;csharp plain&quot;&gt;{&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number3 index2 alt2&quot;&gt; &lt;/div&gt;
&lt;div class=&quot;line number4 index3 alt1&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;    &lt;/code&gt;&lt;code class=&quot;csharp keyword&quot;&gt;public&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;void&lt;/code&gt; &lt;code class=&quot;csharp plain&quot;&gt;Folha()&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number5 index4 alt2&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;    &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;{&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number6 index5 alt1&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;        &lt;/code&gt;&lt;code class=&quot;csharp keyword&quot;&gt;throw&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;new&lt;/code&gt; &lt;code class=&quot;csharp plain&quot;&gt;NotImplementedException();&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number7 index6 alt2&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;    &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;}&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number8 index7 alt1&quot;&gt; &lt;/div&gt;
&lt;div class=&quot;line number9 index8 alt2&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;    &lt;/code&gt;&lt;code class=&quot;csharp keyword&quot;&gt;public&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;void&lt;/code&gt; &lt;code class=&quot;csharp plain&quot;&gt;Galho()&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number10 index9 alt1&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;    &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;{&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number11 index10 alt2&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;        &lt;/code&gt;&lt;code class=&quot;csharp keyword&quot;&gt;throw&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;new&lt;/code&gt; &lt;code class=&quot;csharp plain&quot;&gt;NotImplementedException();&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number12 index11 alt1&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;    &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;}&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number13 index12 alt2&quot;&gt; &lt;/div&gt;
&lt;div class=&quot;line number14 index13 alt1&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;    &lt;/code&gt;&lt;code class=&quot;csharp keyword&quot;&gt;public&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;void&lt;/code&gt; &lt;code class=&quot;csharp plain&quot;&gt;Tronco()&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number15 index14 alt2&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;    &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;{&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number16 index15 alt1&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;        &lt;/code&gt;&lt;code class=&quot;csharp keyword&quot;&gt;throw&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;new&lt;/code&gt; &lt;code class=&quot;csharp plain&quot;&gt;NotImplementedException();&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number17 index16 alt2&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;    &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;}&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number18 index17 alt1&quot;&gt;&lt;code class=&quot;csharp plain&quot;&gt;}&lt;/code&gt;&lt;/div&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;&lt;div id=&quot;highlighter_442725&quot; class=&quot;syntaxhighlighter csharp&quot;&gt;&lt;div class=&quot;toolbar&quot;&gt;&lt;span&gt;&lt;a href=&quot;http://juliano-sales.net/2013/07/class-abstratas-x-interface/?preview=true&amp;amp;preview_id=797&amp;amp;preview_nonce=ce518ee61d#&quot; class=&quot;toolbar_item command_help help&quot;&gt; &lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;table border=&quot;0&quot; cellspacing=&quot;0&quot;&gt;
&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;blockquote&gt;&lt;div class=&quot;line number1 index0 alt2&quot;&gt;1&lt;/div&gt;
&lt;div class=&quot;line number2 index1 alt1&quot;&gt;2&lt;/div&gt;
&lt;div class=&quot;line number3 index2 alt2&quot;&gt;3&lt;/div&gt;
&lt;div class=&quot;line number4 index3 alt1&quot;&gt;4&lt;/div&gt;
&lt;div class=&quot;line number5 index4 alt2&quot;&gt;5&lt;/div&gt;
&lt;div class=&quot;line number6 index5 alt1&quot;&gt;6&lt;/div&gt;
&lt;div class=&quot;line number7 index6 alt2&quot;&gt;7&lt;/div&gt;
&lt;/blockquote&gt;
&lt;/td&gt;
&lt;td class=&quot;code&quot;&gt;&lt;div class=&quot;container&quot;&gt;&lt;blockquote&gt;&lt;div class=&quot;line number1 index0 alt2&quot;&gt;&lt;code class=&quot;csharp keyword&quot;&gt;public&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;class&lt;/code&gt; &lt;code class=&quot;csharp plain&quot;&gt;GoiabeiraPersonalizada : CaracteristicasIncomuns&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number2 index1 alt1&quot;&gt;&lt;code class=&quot;csharp plain&quot;&gt;{&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number3 index2 alt2&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;    &lt;/code&gt;&lt;code class=&quot;csharp keyword&quot;&gt;public&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;override&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;string&lt;/code&gt; &lt;code class=&quot;csharp plain&quot;&gt;Fruto()&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number4 index3 alt1&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;    &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;{&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number5 index4 alt2&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;           &lt;/code&gt;&lt;code class=&quot;csharp keyword&quot;&gt;throw&lt;/code&gt; &lt;code class=&quot;csharp keyword&quot;&gt;new&lt;/code&gt; &lt;code class=&quot;csharp plain&quot;&gt;NotImplementedException();&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number6 index5 alt1&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt;    &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;}&lt;/code&gt;&lt;/div&gt;
&lt;div class=&quot;line number7 index6 alt2&quot;&gt;&lt;code class=&quot;csharp spaces&quot;&gt; &lt;/code&gt;&lt;code class=&quot;csharp plain&quot;&gt;}&lt;/code&gt;&lt;/div&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&lt;strong&gt;Conclusão&lt;/strong&gt;:&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;A melhor maneira de entendermos um conceito  e praticar e praticar, espero que todos tenham conseguido entender as diferenças entre class abstrata e interface, mais uma vez obrigado a todos.&lt;/p&gt;</content>
<category term="Brasil" />

                                    </entry>
                            <entry>
                    <title>Conhecendo o Glimpse - Plataforma de diagnostico extensível para sua aplicação ASP.NET</title>
                    <link rel="alternate" href="http://devbrasil.net/xn/detail/2307362:BlogPost:225895"/>
                                        <id>tag:devbrasil.net,2013-07-18:2307362:BlogPost:225895</id>
                                        <updated>2013-07-18T20:35:49.000Z</updated>
                    
                                            <author>
                            <name>Wilian Santos</name>
                            <uri>http://devbrasil.net/profile/WilianSantos</uri>
                        </author>
                    
                    <summary type="html">
                        &lt;p&gt;Se você esta precisando de uma ferramenta de diagnostico para sua aplicação ASP.NET que seja extensível, com vários recursos, e ainda não ouviu falar ou testou o Glimpse, esta na hora de avaliar esta ferramenta e suas possibilidades.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h4&gt;Como funciona e como ele pode me ajudar?&lt;/h4&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;O Glimpse quando instalado em sua aplicação, ativa uma toolbar no rodapé das páginas similar a ferramenta para desenvolvedores do Chrome ou o Firebug. O Glimpse pode lhe ajudar de diversas…&lt;/p&gt;                    </summary>

                    <content type="html">
&lt;p&gt;Se você esta precisando de uma ferramenta de diagnostico para sua aplicação ASP.NET que seja extensível, com vários recursos, e ainda não ouviu falar ou testou o Glimpse, esta na hora de avaliar esta ferramenta e suas possibilidades.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h4&gt;Como funciona e como ele pode me ajudar?&lt;/h4&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;O Glimpse quando instalado em sua aplicação, ativa uma toolbar no rodapé das páginas similar a ferramenta para desenvolvedores do Chrome ou o Firebug. O Glimpse pode lhe ajudar de diversas maneiras, oferecendo visualização de dados de requisições, respostas, dados servidor e informações como o tempo do processamento, entre outras que podem ser obtidas através de extensões adicionado ao próprio Glimpse. Ele possui extensões de suporte para aplicações ASP.NET WebForms e MVC entre outros. Confira no próprio site a documentação e extensões disponíveis, &lt;a href=&quot;http://getglimpse.com/&quot; target=&quot;_blank&quot;&gt;http://getglimpse.com&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h4&gt;Demonstração - diagnóstico para a execução da aplicação e consultas ao banco de dados.&lt;/h4&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Vejamos em alguns passos como configurar o Glimpse em uma aplicação exemplo feita com ASP.NET MVC 4 e o Entity Framework 5. A aplicação pode ser obtida &lt;a href=&quot;http://sdrv.ms/1bITIe4&quot; target=&quot;_blank&quot;&gt;aqui&lt;/a&gt;.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Obs: Solution criado com o Visual Studio 2012 e o &lt;a href=&quot;http://msdn.microsoft.com/pt-br/library/hh510202.aspx&quot; target=&quot;_blank&quot;&gt;Sql Server 2012 Express LocalDB&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;A aplicação prove uma simples página de registros de visitantes (guestbook), o suficiente para demonstrar um pouco do que o Glimpse tem a oferecer. Execute a aplicação e verá que o Glimpse ainda não esta instalado. Pare a execução da aplicação e abra o console do &lt;a href=&quot;http://docs.nuget.org/&quot; target=&quot;_blank&quot;&gt;nuget&lt;/a&gt; em seu Visual Studio. Execute os comandos a seguir:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Install-Package Glimpse.Mvc4&lt;/p&gt;
&lt;p&gt;Install-Package Glimpse.EF5&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Rode novamente sua aplicação, e através da url base, adicione glimpse.axd, ex: http://localhost:[porta]/glimpse.axd, ao acessar verá que existe uma opção para habilitar o Glimpse, &quot;Turn Glimpse On&quot; (obs: estas opções podem ter seus nomes alterados em releases futuras).&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://storage.ning.com/topology/rest/1.0/file/get/2230051747?profile=original&quot; target=&quot;_self&quot;&gt;&lt;img src=&quot;http://storage.ning.com/topology/rest/1.0/file/get/2230051747?profile=original&quot; width=&quot;288&quot; class=&quot;align-center&quot;/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Habilite e volte a url raiz da aplicação. Veja no rodapé as informações não somente do servidor e requisições/resposta como também das consultas SQL realizadas pelo Entity Framework.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://willianns.github.io/images/posts/glimpse_tabs.png&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://willianns.github.io/images/posts/glimpse_tabs.png&quot; class=&quot;align-center&quot;/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Clique no logo do Glimpse, e será aberta uma toolbar com várias tabs especificas.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Tab referente a execução do controller/action&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://willianns.github.io/images/posts/glimpse_exectab.png&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://willianns.github.io/images/posts/glimpse_exectab.png&quot; class=&quot;align-center&quot;/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Tab referente a execução de SQL&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://willianns.github.io/images/posts/glimpse_querytab.png&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://willianns.github.io/images/posts/glimpse_querytab.png&quot; class=&quot;align-center&quot;/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Para desabilitar o Glimpse volte a pagina glimpse.axd e clique &quot;Turn Glimpse Off&quot;. É importante ressaltar que foram instaladas duas extensões do Glimpse, &#039;Mvc4&#039; especifica para realizar o diagnóstico da aplicação MVC e o &#039;EF5&#039; específico para diagnósticos na execução do Entity Framework 5, o Core do Glimpse foi automaticamente incluído quando executou-se os comandos do nuget por ser uma dependência.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h4&gt;Grandes poderes, grandes responsabilidades.&lt;/h4&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;A configuração praticamente automática, pode parecer mágica aos olhos, porém deve se tomar cuidado e analisar as mudanças realizadas no web.config da aplicação, veremos que o próprio Glimpse realiza algumas configurações e cria uma seção especifica para ele onde defini-se se o Glimpse estará disponível ou não pelo atributo defaultRuntimePolicy e a url de acesso em endpointBaseUri. Há também a opção de habilitar o acesso remoto, ou seja fora de localhost, por padrão somente aceita requisições locais. Deste modo é certo que seja desabilitado este recurso em produção, e habilitar somente por demanda, se necessário realizar a consulta aos diagnósticos de possíveis problemas na aplicação.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h4&gt;Finalizando&lt;/h4&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Fica a dica de uma excelente ferramenta de auxilio a nós desenvolvedores, espero que se alguém se interessar este seja o passo inicial para o estudo aprofundado da ferramenta.&lt;/p&gt;
&lt;p&gt;Abraços, sucesso a todos!&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;</content>
<category term="Brasil" />

                    <link rel="enclosure" href="http://willianns.github.io/images/posts/glimpse_tabs.png" type="image/png"/><link rel="enclosure" href="http://willianns.github.io/images/posts/glimpse_exectab.png" type="image/png"/><link rel="enclosure" href="http://willianns.github.io/images/posts/glimpse_querytab.png" type="image/png"/>                </entry>
                            <entry>
                    <title>Escrever um Arquivos de Texto em C# utilizando o StreamWriter</title>
                    <link rel="alternate" href="http://devbrasil.net/xn/detail/2307362:BlogPost:223733"/>
                                        <id>tag:devbrasil.net,2013-07-04:2307362:BlogPost:223733</id>
                                        <updated>2013-07-04T18:28:54.000Z</updated>
                    
                                            <author>
                            <name>Julio Arruda</name>
                            <uri>http://devbrasil.net/profile/JulioCesarBuenodeArruda</uri>
                        </author>
                    
                    <summary type="html">
                        &lt;p&gt;Boa Tarde Pessoal,&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Estou mais uma vez aqui, escrevendo este artigo para vocês, pois por diversas vezes, temos a necessidade de criar arquivos de texto, que podem ser utilizados para criar log&#039;s, criar uma integração com outro sistema, enfim, precisamos criar arquivos de texto, mas como fazer isso com o C#.&lt;br&gt;&lt;/br&gt;Neste artigo, irei demonstrar como fazer isso com o C# utilizando o StreamWriter.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Para começar, você deve incluir em seu projeto a…&lt;/p&gt;                    </summary>

                    <content type="html">
&lt;p&gt;Boa Tarde Pessoal,&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Estou mais uma vez aqui, escrevendo este artigo para vocês, pois por diversas vezes, temos a necessidade de criar arquivos de texto, que podem ser utilizados para criar log&#039;s, criar uma integração com outro sistema, enfim, precisamos criar arquivos de texto, mas como fazer isso com o C#.&lt;br/&gt;Neste artigo, irei demonstrar como fazer isso com o C# utilizando o StreamWriter.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Para começar, você deve incluir em seu projeto a referencia:&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;using System.IO;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Para realizar a escrita de um arquivo, você deve utilizar um método semelhante a esse: &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;private void EscreveArquivo()&lt;br/&gt; {&lt;/p&gt;
&lt;p&gt;      //Declaração do método StreamWriter passando o caminho e nome do arquivo que deve ser salvo&lt;br/&gt;      StreamWriter writer = new StreamWriter(@&quot;c:\ArquivoPronto.txt&quot;);&lt;/p&gt;
&lt;p&gt;      //Escrevendo o Arquivo e pulando uma linha&lt;br/&gt;      writer.WriteLine(&quot;Hello World&quot;);&lt;br/&gt;     //Escrevendo o Arquivo sem pular linha&lt;/p&gt;
&lt;p&gt;      writer.Write(&quot;Exemplo de arquivo escrito com o StreamWriter&quot;);&lt;/p&gt;
&lt;p&gt;      writer.WriteLine();&lt;br/&gt;      writer.WriteLine(&quot;www.devbrasil.net&quot;);&lt;/p&gt;
&lt;p&gt;      //Fechando o arquivo&lt;br/&gt;      writer.Close();&lt;/p&gt;
&lt;p&gt;     //Limpando a referencia dele da memória&lt;br/&gt;     writer.Dispose();&lt;br/&gt; }&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Em resumo, basta instanciar a Classe StreamWriter e passar o arquivo que ele deve criar, passar os dados para escrever o arquivo.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Bom pessoal, espero que tenha ajudado.&lt;/p&gt;
&lt;p&gt;Qualquer duvida, comente.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Veja mais sobre StreamWriter em:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://msdn.microsoft.com/pt-br/library/system.io.stream.aspx&quot; target=&quot;_blank&quot;&gt;StreamWriter&lt;/a&gt;&lt;/p&gt;</content>
<category term="Brasil" />

                                    </entry>
                            <entry>
                    <title>Leitura de Arquivo CSV em C#</title>
                    <link rel="alternate" href="http://devbrasil.net/xn/detail/2307362:BlogPost:223537"/>
                                        <id>tag:devbrasil.net,2013-07-03:2307362:BlogPost:223537</id>
                                        <updated>2013-07-03T16:59:03.000Z</updated>
                    
                                            <author>
                            <name>Julio Arruda</name>
                            <uri>http://devbrasil.net/profile/JulioCesarBuenodeArruda</uri>
                        </author>
                    
                    <summary type="html">
                        &lt;p&gt;Boa Tarde Pessoal,&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Estou aqui mais uma vez, postando um conteúdo simples, mais que muitas vezes, acaba sendo complexo por acabar caindo no esquecimento, pois nem sempre realizamos tal tarefa.&lt;/p&gt;
&lt;p&gt;Vou explicar, como realizar a leitura de um arquivo .csv, mais esse mesmo método funciona para qualquer outra estrutura que possua algum tipo de separador como virgula, etc.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Para realizar a leitura de um arquivo texto, necessitamos incluir a…&lt;/p&gt;                    </summary>

                    <content type="html">
&lt;p&gt;Boa Tarde Pessoal,&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Estou aqui mais uma vez, postando um conteúdo simples, mais que muitas vezes, acaba sendo complexo por acabar caindo no esquecimento, pois nem sempre realizamos tal tarefa.&lt;/p&gt;
&lt;p&gt;Vou explicar, como realizar a leitura de um arquivo .csv, mais esse mesmo método funciona para qualquer outra estrutura que possua algum tipo de separador como virgula, etc.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Para realizar a leitura de um arquivo texto, necessitamos incluir a referência:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;using System.IO;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;static void LerCSV()&lt;br/&gt; {&lt;/p&gt;
&lt;p&gt;    //Declaro o StreamReader para o caminho onde se encontra o arquivo&lt;br/&gt;    StreamReader rd = new StreamReader(@&quot;c:\txt\produtos.csv&quot;);&lt;/p&gt;
&lt;p&gt;    //Declaro uma string que será utilizada para receber a linha completa do arquivo&lt;br/&gt;    string linha = null;&lt;/p&gt;
&lt;p&gt;    //Declaro um array do tipo string que será utilizado para adicionar o conteudo da linha separado&lt;br/&gt;    string[] linhaseparada = null;&lt;/p&gt;
&lt;p&gt;    //realizo o while para ler o conteudo da linha&lt;/p&gt;
&lt;p&gt;       while ((linha = rd.ReadLine()) != null)&lt;br/&gt;      {&lt;/p&gt;
&lt;p&gt;          //com o split adiciono a string &#039;quebrada&#039; dentro do array&lt;br/&gt;          linhaseparada = linha.Split(&#039;;&#039;);&lt;br/&gt;         //aqui incluo o método necessário para continuar o trabalho&lt;/p&gt;
&lt;p&gt;&lt;br/&gt;      }&lt;br/&gt;      rd.Close();&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;p&gt;Em resumo, basta utilizar o StreamReader para ler o arquivo, declaro as variaveis necessárias, e com o auxilio do while realizo as leituras.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Bom pessoal, espero ter ajudado vocês.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Você pode obter mais informações sobre o StreamReader em:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://msdn.microsoft.com/en-us/library/system.io.streamreader.aspx&quot; target=&quot;_blank&quot;&gt;StreamReader MSDN&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;</content>
<category term="Brasil" />

                                    </entry>
                            <entry>
                    <title>Como organizar seus Casos de Teste na MTM?</title>
                    <link rel="alternate" href="http://devbrasil.net/xn/detail/2307362:BlogPost:223609"/>
                                        <id>tag:devbrasil.net,2013-07-03:2307362:BlogPost:223609</id>
                                        <updated>2013-07-03T14:34:20.000Z</updated>
                    
                                            <author>
                            <name>Winnie Miranda</name>
                            <uri>http://devbrasil.net/profile/WinnieMiranda</uri>
                        </author>
                    
                    <summary type="html">
                        &lt;p&gt;Um plano de teste desorganizado pode ser prejudicial no desempenho do &lt;strong&gt;&lt;em&gt;Tester&lt;/em&gt;&lt;/strong&gt; durante a execução. É papel do &lt;strong&gt;&lt;em&gt;Arquiteto de Testes&lt;/em&gt; &lt;/strong&gt;garantir que os &lt;strong&gt;Planos de Testes &lt;/strong&gt;estejam devidamente organizados e garantam cobertura dos cenários necessários para a release.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Para organizar os casos de teste na MTM, basta criar uma nova &lt;strong&gt;Suíte de Testes&lt;/strong&gt; e vincular os casos de teste a mesma.…&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;                    </summary>

                    <content type="html">
&lt;p&gt;Um plano de teste desorganizado pode ser prejudicial no desempenho do &lt;strong&gt;&lt;em&gt;Tester&lt;/em&gt;&lt;/strong&gt; durante a execução. É papel do &lt;strong&gt;&lt;em&gt;Arquiteto de Testes&lt;/em&gt; &lt;/strong&gt;garantir que os &lt;strong&gt;Planos de Testes &lt;/strong&gt;estejam devidamente organizados e garantam cobertura dos cenários necessários para a release.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Para organizar os casos de teste na MTM, basta criar uma nova &lt;strong&gt;Suíte de Testes&lt;/strong&gt; e vincular os casos de teste a mesma.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://2.bp.blogspot.com/-cit4Kg7qg_w/UdQyT1TyyaI/AAAAAAAABGo/1uh8xwlD9JQ/s1339/View.PNG&quot;&gt;&lt;img class=&quot;aligncenter align-center&quot; src=&quot;http://2.bp.blogspot.com/-cit4Kg7qg_w/UdQyT1TyyaI/AAAAAAAABGo/1uh8xwlD9JQ/s320/View.PNG&quot; alt=&quot;&quot; width=&quot;320&quot; height=&quot;139&quot; border=&quot;0&quot;/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Existem 3 tipos de&lt;strong&gt; suites:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://3.bp.blogspot.com/-oI-h8FKoqVs/UdQyh-rymoI/AAAAAAAABGw/Ln0PamabDBw/s470/Adicionar.png&quot;&gt;&lt;img class=&quot;aligncenter align-center&quot; src=&quot;http://3.bp.blogspot.com/-oI-h8FKoqVs/UdQyh-rymoI/AAAAAAAABGw/Ln0PamabDBw/s320/Adicionar.png&quot; alt=&quot;&quot; width=&quot;320&quot; height=&quot;128&quot; border=&quot;0&quot;/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Suite (simples)&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;p&gt;          Ao criar uma suite de testes, você pode adicionar a ela novos casos de testes e criar novos casos de testes vinculados a mesma.&lt;/p&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Query-based Suite&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;p&gt;          A querry-based suite, como o próprio nome já diz, é uma suite de testes baseada em uma pesquisa. Ela é preenchida como os casos de testes resultantes da pesquisa na qual a mesma é baseada. Uma vez que forem adicionados novos casos de testes que se aplicarem a resultado da pesquisa, eles serão automaticamente vinculados a suite em questão.&lt;/p&gt;
&lt;/div&gt;
&lt;div&gt;&lt;p&gt; &lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href=&quot;http://2.bp.blogspot.com/-4SUNtq8IzCc/UdQyj8u4aLI/AAAAAAAABG4/8mCkuS60LlQ/s1361/QBS+-+Create.PNG&quot;&gt;&lt;img class=&quot;aligncenter align-center&quot; src=&quot;http://2.bp.blogspot.com/-4SUNtq8IzCc/UdQyj8u4aLI/AAAAAAAABG4/8mCkuS60LlQ/s320/QBS+-+Create.PNG&quot; alt=&quot;&quot; width=&quot;320&quot; height=&quot;157&quot; border=&quot;0&quot;/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Requirements&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;p&gt;          É possível também, adicionar uma suite baseada em um requisito do sistema. Esta suite será preenchida com os casos de teste que estiverem vinculados ao requisito em questão. Todos os novos casos de testes criados a partir desta suite serão vinculados automaticamente ao requisito e todos os novos casos de teste vinculados ao requisito estarão disponíveis na suite.&lt;/p&gt;
&lt;/div&gt;
&lt;div&gt;&lt;p&gt; &lt;/p&gt;
&lt;/div&gt;
&lt;div&gt;&lt;p&gt;Bom trabalho e até o próximo post.&lt;/p&gt;
&lt;/div&gt;
&lt;div&gt;&lt;p&gt; &lt;/p&gt;
&lt;/div&gt;
&lt;div&gt;&lt;p&gt;O artigo original pode ser visualizado em: &lt;a href=&quot;http://mundodeti.blogspot.com.br/2013/07/como-organizar-seus-casos-de-teste-na.html&quot;&gt;http://mundodeti.blogspot.com.br/2013/07/como-organizar-seus-casos-de-teste-na.html&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;</content>
<category term="Brasil" />

                    <link rel="enclosure" href="http://3.bp.blogspot.com/-oI-h8FKoqVs/UdQyh-rymoI/AAAAAAAABGw/Ln0PamabDBw/s470/Adicionar.png" type="image/png"/>                </entry>
                            <entry>
                    <title>Enviar E-mail com C#</title>
                    <link rel="alternate" href="http://devbrasil.net/xn/detail/2307362:BlogPost:223604"/>
                                        <id>tag:devbrasil.net,2013-07-02:2307362:BlogPost:223604</id>
                                        <updated>2013-07-02T12:30:00.000Z</updated>
                    
                                            <author>
                            <name>Julio Arruda</name>
                            <uri>http://devbrasil.net/profile/JulioCesarBuenodeArruda</uri>
                        </author>
                    
                    <summary type="html">
                        &lt;p&gt;Bom dia Pessoal,&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Venho percebendo que apesar de ser uma coisa simples, ainda existem duvidas sobre como enviar e-mails através do C#, tendo isto em mente, vou postar uma maneira simples de enviar e-mails utilizando o C#.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Para utilizar as classes de e-mail, são necessárias as seguintes referencias:&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;using System.Net.Mail;&lt;br&gt;&lt;/br&gt; using System.Net;&lt;/p&gt;
&lt;p&gt;Para enviar os e-mails basta criar um método de acordo com o seguinte…&lt;/p&gt;                    </summary>

                    <content type="html">
&lt;p&gt;Bom dia Pessoal,&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Venho percebendo que apesar de ser uma coisa simples, ainda existem duvidas sobre como enviar e-mails através do C#, tendo isto em mente, vou postar uma maneira simples de enviar e-mails utilizando o C#.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Para utilizar as classes de e-mail, são necessárias as seguintes referencias:&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;using System.Net.Mail;&lt;br/&gt; using System.Net;&lt;/p&gt;
&lt;p&gt;Para enviar os e-mails basta criar um método de acordo com o seguinte exemplo: &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;public bool EnviarEmail(string assunto,string destinatario,string file)&lt;br/&gt; {&lt;br/&gt;    try&lt;br/&gt;   {&lt;/p&gt;
&lt;p&gt;      string CorpoEmail = file;&lt;br/&gt;       MailMessage mailMessage = new MailMessage();&lt;/p&gt;
&lt;p&gt;     //Endereço que irá aparecer no e-mail do usuário&lt;/p&gt;
&lt;p&gt;     mailMessage.From = new MailAddress(&quot;email@seudominio.com&quot;, &quot;Fale Conosco&quot;);&lt;/p&gt;
&lt;p&gt;    //destinatarios do e-mail, para incluir mais de um basta separar por ponto e virgula &lt;br/&gt;     mailMessage.To.Add(destinatario); &lt;br/&gt;     mailMessage.Subject = assunto ;&lt;br/&gt;     mailMessage.IsBodyHtml = true;&lt;/p&gt;
&lt;p&gt;    //conteudo do corpo do e-mail&lt;br/&gt;     mailMessage.Body = CorpoEmail.ToString();&lt;br/&gt;     mailMessage.Priority = MailPriority.High;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;    //smtp do e-mail que irá enviar&lt;br/&gt;     SmtpClient smtpClient = new SmtpClient(&quot;smtp.seudominio.com&quot;);&lt;/p&gt;
&lt;p&gt;    smtpClient.EnableSsl = false;&lt;/p&gt;
&lt;p&gt;    //credenciais da conta que utilizará para enviar o e-mail&lt;br/&gt;     smtpClient.Credentials = new NetworkCredential(&quot;email@seudominio.com&quot;, &quot;senhadoemail&quot;);&lt;/p&gt;
&lt;p&gt;    smtpClient.Send(mailMessage);&lt;br/&gt;     return true;&lt;/p&gt;
&lt;p&gt;  }&lt;br/&gt;   catch&lt;br/&gt;   {&lt;br/&gt;      return false;&lt;br/&gt;    }&lt;br/&gt; }&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Bom pessoal, é isso, espero que tenha ajudado.&lt;/p&gt;</content>
<category term="Brasil" />

                                    </entry>
                    </feed>
        