﻿<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>egomesbrandao, blog &#187; .net</title>
	<atom:link href="http://egomesbrandao.net/blog/category/net/feed/" rel="self" type="application/rss+xml" />
	<link>http://egomesbrandao.net/blog</link>
	<description>.net, scrum, scripts e afins...</description>
	<lastBuildDate>Tue, 11 Oct 2011 20:38:05 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.5</generator>
		<item>
		<title>O prestígio do VB</title>
		<link>http://egomesbrandao.net/blog/2011/10/o-prestigio-do-vb/</link>
		<comments>http://egomesbrandao.net/blog/2011/10/o-prestigio-do-vb/#comments</comments>
		<pubDate>Tue, 11 Oct 2011 18:45:21 +0000</pubDate>
		<dc:creator>egomesbrandao</dc:creator>
				<category><![CDATA[.net]]></category>
		<category><![CDATA[vb]]></category>
		<category><![CDATA[vb.net]]></category>

		<guid isPermaLink="false">http://egomesbrandao.net/blog/?p=286</guid>
		<description><![CDATA[Semana passada fui prestigiado com a menção do meu nome no podcast sem prestígio dos meus amigos, Elemar Jr., Leandro Daniel e Vinicius Quaiato, que cada dia ganha mais prestígio, dias atrás estava em destaque na página de downloads de podcast do iTunes: Voidpodcast ! Este episódio teve como tema &#8220;Tecnologias sem prestígio&#8221; e fui mencionado quando [...]]]></description>
			<content:encoded><![CDATA[<p>Semana passada fui prestigiado com a menção do meu nome no podcast sem prestígio dos meus amigos, <a href="http://twitter.com/elemarjr" target="_blank">Elemar Jr.</a>, <a href="http://twitter.com/leandronet" target="_blank">Leandro Daniel</a> e <a href="http://twitter.com/vquaiato" target="_blank">Vinicius Quaiato</a>, que cada dia ganha mais prestígio, dias atrás estava em destaque na página de downloads de podcast do iTunes: <a href="http://voidpodcast.com/" target="_blank">Voidpodcast</a> ! Este episódio teve como tema <a href="http://voidpodcast.com/2011/10/03/void-podcast-011-prestigio-pouco-e-bobagem/" target="_blank">&#8220;Tecnologias sem prestígio&#8221;</a> e fui mencionado quando VB/VB.Net entrou na discussão. Mas será mesmo que esta linguagem não tem prestígio? Então, como diria o <a href="http://twitter.com/vsenger" target="_blank">Vinicius Senger</a>, esse post é: Pela honra do VB!</p>
<p>A minha história com o VB começou no início dos anos 2000, quando eu ainda trabalhava com projetos de automação predial. Cheguei a programar uma ou outra vez nessa época nas controladoras que utilizávamos porém em uma linguagem totalmente visual, que era um arrastar e soltar de blocos que representavam ventiladores, sensores, motores&#8230; Mas a maior parte do meu trabalho foi desenhando esquemas elétricos no AutoCAD, que para quem não conhece,  é o software padrão para desenhos de engenharia 2D e 3D. Com o meu amadurecimento no uso da ferramenta, comecei a sentir a necessidade de automatizar algumas coisas no meu trabalho. Acho que quando se conhece um processo tão profundamente as tarefas ficam tão monótonas que se começa a pensar em como podemos tornar essa tarefa melhor, mais rápida e melhor  ou ainda mais assertiva; e aí estava uma oportunidade escrever código dentro da ferramenta para atingir esses objetivos! Eu sempre gostei da ideia de programar, havia feito um curso de C, mas foi com ênfase em eletrônica, que era minha área na época. O AutoCAD até a versão 14 oferecia LISP, C++, e talvez outras coisas, para programar. Eu tentei estudar LISP (Lost In Stupid Parantheses), mas foi chato pra caramba. Até que na versão 2000, a Autodesk, incluiu o VBA para AutoCAD! Sim, o mesmo VBA que já estava presente no Access, Excel, Word. O VBA me permitiu não só criar macros para blocos de desenho no AutoCAD, como também acessar uma base de dados, criar Forms para entrada de dados, tudo de uma maneira muito simples, até mesmo para alguém sem conhecimentos profundos na área. Eu comecei aí, mas não parei, tive um mentor a época, <a href="http://twitter.com/felipe_store" target="_blank">Felipe Antunes</a> (escreve o blog <a href="http://agoradba.blogspot.com/" target="_blank">&#8220;E agora DBA&#8221;</a>), que me ajudou muito em questões básicas, em entender como funcionava um banco de dados relacional, o que me fez pular do Access para o SQL Server em pouco tempo. Fiz os treinamentos oficiais do VB6, até mesmo o 1016 que envolvia coisas como MTS (na época do Windows NT) e COM+. Adotei a famosa arquitetura WinDNA. E consegui desenvolver um software que solucionava um gap entre a área comercial e a de projetos, agilizando o processo, dando confiabilidade a informação, e por aí vai. Não é preciso dizer o quanto fiquei entusiasmado com isso, já que vim para a área de TI logo em seguida.</p>
<p>Mas não é por conta da minha história com a linguagem que ela tem prestígio para mim e sim por causa da história da própria linguagem. Antes,  o que quer dizer prestígio? Segundo a Wikipedia: &#8220;&#8230;se referia à ilusão causada aos espectadores pelos truques de um mágico&#8221;. &#8220;(&#8230;) O termo foi usado com este sentido até século XVIII, quando em francês se começou a dar a ‘prestige’ o significado de renome, ascendência, influência, e o prestígio francês nas cortes da Europa traduziu este significado para a nossa lingua&#8221;. O uso atual &#8220;(&#8230;) descreve importância social, alta consideração e sólida reputação&#8221;.</p>
<p>No fim da década de 90 e início dos anos 2000 a linguagem que tinha mais influência no mercado, corporações, produtos, &#8230; era o Visual Basic, que chegou até a versão 6, trouxe um grande poder ao desenvolvedor, no sentido de tornar simples o desenvolvimento, fazer um acesso a base de dados relacional, criar uma tela gráfica, acessar a API do Windows, desenvolver uma aplicação distribuída, tinha ficado muito mais simples. Em 2005 62% dos programadores usavam uma forma de Visual Basic (Wikipedia), já que nessa época já estavamos entrando na versão 2.0 do VB.Net, mas até hoje o Visual Basic 6 é utilizado em produção, em projetos, até mesmo alguns novos projetos são desenvolvidos com ele! Talvez atualmente o Visual Basic 6 não seja a melhor opção para desenvolver um projeto, mas no início dos anos 2000 era uma das melhores opções, Java ainda era extremamente lento e complexo, de se programar, de se criar um ambiente, o Delphi apesar de prático exigia um pouco mais. O VB dava poder para quem estava começando, dava agilidade. Mas com todo esse poder também vinha uma grande responsabilidade, que era ignorada.  Com a mesma simplicidade que se desenvolvia no VB,  se criava uma grande dívida técnica! Infelizmente o descontrole dos projetos, de arquitetura, de boas práticas não é culpa da linguagem. Não podemos culpar armas, carros, aviões por matar pessoas! Os próprios desenvolvedores foram os culpados por toda essa quantidade de brownfield que se criou na plataforma. E que não venham dizer que foram forçados a isso, que a gerência mandou. Ninguém faz o que não quer!</p>
<div id="_mcePaste">E hoje em dia, essa fama do VB.Net&#8230; Sinceramente não entendo isso! Apesar de hoje o VB.Net ser uma sintaxe para compilar para IL, tanto quanto C# ou qualquer outra linguagem da plataforma, e apesar dos compiladores das duas principais linguagens (VB.Net e C#) serem separados, o código gerado, a IL é praticamente a mesma! Havia uma diferença no início que foi diminuindo com o passar das versões. Até mesmo a quebra de linha sem o uso do caractere underscore foi implementada na versão atual da linguagem. E o inverso aconteceu também, foi implementado no C# parâmetros opcionais, algo que eu nunca achei legal, mesmo no VB6, contribui para o código spaguetthi, quebra a SRP, e por aí vai. Mas de novo, só depende do desenvolvedor em deixar isso acontecer. Acho a sintaxe do VB.Net mais perto da linguagem natural e acho isso legal. Se pensarmos em linguagem de negócio, de domínio, o código fica mais legível, é mais inteligível para um analista de negócios trabalhar junto com um desenvolvedor, isso especificamente em sistemas LOB. A escolha da sintaxe na plataforma .Net não afeta em nada o resultado do desenvolvimento, é mais uma escolha pessoal do que técnica, exetuando-se algumas particularidades.</div>
<p>Por fim, o VB.Net resolve o problema do cliente, que é o objetivo com que qualquer linguagem é criada, fora linguagens teóricas. E isso que é importante, juntamente com o cuidado de se escrever um código limpo.</p>
<div id="_mcePaste">Desenvolvo na plataforma .Net desde 2004 e tenho usado VB.Net e C#, praticamente meio a meio, e não tenho tido problemas nos meus projetos de precisar de algo que um não ofereça. Talvez hoje o VB não tenha o mesmo apelo que no incío dos anos 2000, hoje temos diversas linguagens maduras no mercado, que cresceram muito rápido e que atendem a nichos específicos. Mas certamente o prestígio do VB esta com toda uma geração de desenvolvedores que cresceu profissionalmente com ele.</div>
]]></content:encoded>
			<wfw:commentRss>http://egomesbrandao.net/blog/2011/10/o-prestigio-do-vb/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>foreach ou ForEach</title>
		<link>http://egomesbrandao.net/blog/2011/03/foreach-ou-foreach/</link>
		<comments>http://egomesbrandao.net/blog/2011/03/foreach-ou-foreach/#comments</comments>
		<pubDate>Tue, 15 Mar 2011 21:31:10 +0000</pubDate>
		<dc:creator>egomesbrandao</dc:creator>
				<category><![CDATA[.net]]></category>

		<guid isPermaLink="false">http://egomesbrandao.net/blog/?p=179</guid>
		<description><![CDATA[Outro dia saiu uma pergunta numa lista de discussão, sobre o que era melhor usar, For, foreach ou ainda ForEach? Histórinha do ForEach: Depois dos Generics, disponibilizado no framework 2.0, se tornou comum o uso de listas tipadas, muito melhores que o uso de Arrays de Objects! Também foi introduzido os tipos anônimos, expressões Lambda. Em [...]]]></description>
			<content:encoded><![CDATA[<p>Outro dia saiu uma pergunta numa lista de discussão, sobre o que era melhor usar, For, foreach ou ainda ForEach?</p>
<p>Histórinha do ForEach: Depois dos Generics, disponibilizado no framework 2.0, se tornou comum o uso de listas tipadas, muito melhores que o uso de Arrays de Objects! Também foi introduzido os tipos anônimos, expressões Lambda. Em seguida na versão 3.5 do framework foi introduzido o Linq, mudando a forma como são manipuladas coleções de objetos.</p>
<p>Se é necessário somar o valor dos itens de uma nota fiscal o modo &#8220;old school&#8221; é:</p>
<pre class="brush: csharp; title: ;">
List&lt;Item&gt; itens = new List&lt;Item&gt;();

itens.Add(new Item() { Valor = 10.3M });
itens.Add(new Item() { Valor = 11.7M });
itens.Add(new Item() { Valor = 15.8M });

decimal valorTotal = 0;

foreach (Item item in itens)
{
 valorTotal += item.Valor;
}
</pre>
<p>Ou você pode fazer:</p>
<pre class="brush: csharp; title: ;">
List&lt;Item&gt; itens = new List&lt;Item&gt;();

itens.Add(new Item() { Valor = 10.3M });
itens.Add(new Item() { Valor = 11.7M });
itens.Add(new Item() { Valor = 15.8M });

decimal valorTotal = 0;

itens.ForEach(item =&gt; valorTotal += item.Valor);
</pre>
<p>Mas fora a diferença de sintaxe, existe alguma outra? Performance? E o que é esse método ForEach?</p>
<p>ForEach é um método que recebe como parâmetro um delegate Action&lt;T&gt;, ou seja ele recebe uma função a ser executada, nesse caso será executado um foreach!! Sem emoção aqui, mas o legal é que percorrer uma coleção fazendo alguma alteração em seus itens agora requer apenas uma linha.</p>
<p>Mas não é só isso! Voltando a nossa questão de performance o ForEach é mais otimizado sim, eu ia fazer um pequeno projeto de teste mas&#8230; achei um post falando justamente sobre isso, então para reaproveitar código quem quiser testar é só usar o projeto que foi disponibilizado pelo <a href="http://diditwith.net/2007/08/01/ItsAllAboutMe.aspx" target="_blank">Dustin Russell Campbell</a> aqui neste <a href="http://diditwith.net/2006/10/05/PerformanceOfForeachVsListForEach.aspx">post</a>. A comparação é bem completa, usando vários tipos de interação (For, foreach, ForEach), e o ForEach ganha! Somente quando o código esta usando otimização na compilação com uma coleção pequena a velocidade se equipara, mas a medida que a quantidade de itens aumenta ele é mais rápido que outros métodos.</p>
<h3>A quem não goste</h3>
<p>Encontrei também comentários de pessoas que não gostam dessa abordagem, <a href="http://blogs.msdn.com/b/ericlippert/archive/2009/05/18/foreach-vs-foreach.aspx" target="_blank">dizendo que ela não adiciona poder representativo a linguagem</a>, o exemplo dado no link é bem simples então o autor tem razão. Porém minha opinião é que o código fica muito mais legível, tornando a leitura mais fluída.</p>
]]></content:encoded>
			<wfw:commentRss>http://egomesbrandao.net/blog/2011/03/foreach-ou-foreach/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>ABC App &#8211; 02 Populando objetos sem uso de Dataset</title>
		<link>http://egomesbrandao.net/blog/2009/10/abc-app-02-populando-objetos-sem-uso-de-dataset/</link>
		<comments>http://egomesbrandao.net/blog/2009/10/abc-app-02-populando-objetos-sem-uso-de-dataset/#comments</comments>
		<pubDate>Tue, 27 Oct 2009 19:15:49 +0000</pubDate>
		<dc:creator>egomesbrandao</dc:creator>
				<category><![CDATA[.net]]></category>
		<category><![CDATA[abcapp]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[entlib]]></category>
		<category><![CDATA[oo]]></category>

		<guid isPermaLink="false">http://egomesbrandao.net/blog/?p=65</guid>
		<description><![CDATA[Finalmente começando o código mesmo! Objetivo: Popular um objeto simples com dados do banco sem fazer uso de Dataset O que é necessário: Visual C# Express, MS SQL Express 2K8, banco de exemplo Adventure Works 2K8, MS Enterprise Library 4.1 Preparando o ambiente: Para quem nunca instalou o banco de exemplo Adventure Works, ele se [...]]]></description>
			<content:encoded><![CDATA[<p>Finalmente começando o código mesmo!</p>
<p>Objetivo: Popular um objeto simples com dados do banco sem fazer uso de Dataset</p>
<p>O que é necessário: Visual C# Express, MS SQL Express 2K8, banco de exemplo Adventure Works 2K8, MS Enterprise Library 4.1</p>
<p>Preparando o ambiente: Para quem nunca instalou o banco de exemplo Adventure Works, ele se encontra no <a href="http://www.codeplex.com/" target="_blank">CodePlex</a> neste link <a href="http://msftdbprodsamples.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=34032" target="_blank">aqui</a>, mas tem uma pegadinha! Se não instalou o SQL Express Advanced, é um download maior, você não tem SQL Full Text Filter (veja se tem no Configuration Manager do SQL, é um serviço) e daí a instalação automática das bases de dados vai falhar, você terá que rodar os scripts manualmente, mas vai ter que alterar algumas variáveis. Então é melhor você ter a versão SQL Full Text Search, que está <a href="http://www.microsoft.com/express/sql/download/" target="_blank">aqui</a>. Usaremos somente o LT, que é mais enxuto em quantidade de tabelas, mas totalmente compatível com sua versão completa.<br />
Quanto à MS Enterprise Library 4.1, ela é encontrada <a href="http://entlib.codeplex.com/" target="_blank">aqui</a>, quando terminar o instalador vai perguntar se deseja compilar, responda Sim.</p>
<p>Pronto?</p>
<p>Se imaginarmos que estamos em um ambiente real de negócio nos já temos o BD, que é o Adventure Works, o que precisamos fazer é contruir uma classe de Customer (Cliente) que vai ser populada com os dados da tabela Customer do BD, dentro de um projeto Class Library que eu chamei de ABCApp.Domain:</p>
<pre class="brush: csharp; title: ;">
namespace ABCApp.Domain
{
    public class Customer
    {
        public int CustomerId { get; set; }
        public string FirstName { get; set; }
        public string MiddleName { get; set; }
        public string LastName { get; set; }
        public string CompanyName { get; set; }
        public string EmailAddress { get; set; }
        public string Phone { get; set; }
        public DateTime ModifiedDate { get; set; }
    }
}
</pre>
<p>Como o nosso objetivo aqui é não usar Dataset e também agora não iremos usar ORM (não sabe o que é? espere próximos posts), vamos usar ADO.Net, mas para facilitar as coisas vamos usar a MS Enterprise Library (que chamarei daqui em diante de EntLib). Vamos criar então um novo projeto que será a nossa DAL, Data Access Layer, camada de acesso a dados:</p>
<pre class="brush: csharp; title: ;">
using ABCApp.Domain;

using Microsoft.Practices.EnterpriseLibrary.Data;

namespace ABCApp.DAL
{
    public class Customer
    {
        public Customer GetCustomerById(int customerId){

        }
    }
}
</pre>
<p>Repare que eu já adicionei duas referências, uma à EntLib, na janela Add Reference procure por Enterprise Library Data Access Application Block; e adicionei uma referência ao meu projeto ABCApp.Domain.<br />
A primeira é para poder usar o bloco de acesso a dados da EntLib, e isso só vai ocorrer nesse projeto de DAL, que é minha camada de acesso a dados, a camada de Domain não vai saber onde os dados estão sendo persistidos!<br />
E a segunda referência é porque o objeto que eu quero popular está na camada de domínio da aplicação.</p>
<p>Antes de continuarmos escrevendo a DAL, precisamos configurar como a EntLib irá fazer a conexão com o BD, e antes de fazermos isso precisamos adicionar um novo projeto a <em>Solution</em>, vamos adicionar um projeto do tipo <em>Console</em> para testarmos o código, por hora, por que existem maneiras melhores de fazer isso, mas não será feito nesse post. A <em>Solution</em> deverá ficar assim:</p>
<div id="attachment_76" class="wp-caption aligncenter" style="width: 224px"><img class="size-full wp-image-76" title="Solution" src="http://egomesbrandao.net/blog/wp-content/uploads/2009/10/Solution.PNG" alt="A Solution deverá estar parecida com essa figura" width="214" height="311" /><p class="wp-caption-text">A Solution deverá estar parecida com essa figura</p></div>
<p>Insira um arquivo do tipo App.config no novo projeto, é nele que iremos configurar a conexão com o BD, e para isso existe uma ferramente que é integrada ao VS.Net no momento da instalação da EntLib, mas como estou fazendo na versão Express vamos usar a ferramenta externa que também é instalada, procure no menu Inicar: Microsoft Patterns &amp; Practices &gt; Enterprise Library 4.1 &#8211; October 2008 &gt; Enterprise Library Configuration, e você terá a seguinte tela:</p>
<p> <img class="aligncenter size-full wp-image-80" title="EntLibConfiguration" src="http://egomesbrandao.net/blog/wp-content/uploads/2009/10/EntLibConfiguration.PNG" alt="EntLibConfiguration" width="1035" height="267" /></p>
<p>Quando abrir a janela, vá em <em>File &gt; Open</em>, e procure pelo arquivo <em>App.config</em> criado no projeto <em>Console</em>. Na pasta Connection String você pode criar várias conexões, mas no momento só precisamos de uma, apague as outras e crie uma nova, do lado direito da tela em <em>General &gt; ConnectionString</em> preencha com as informações de localização do SQL Express, BD, senha, &#8230; o padrão. Salve o arquivo, feche, e ao voltar ao VS.Net Express ele vai pedir para recarregar o arquivo <em>App.config</em>, se ele ficou aberto.</p>
<p>Agora finalmente vamos codificar o acesso ao BD, segue abaixo.</p>
<pre class="brush: csharp; title: ;">
using Domain = ABCApp.Domain;

using System.Data;
using System.Data.Common;
using System.Resources;
using Microsoft.Practices.EnterpriseLibrary.Data;

namespace ABCApp.DAL
{
    public class Customer
    {
        public Domain.Customer GetCustomerById(int customerId)
        { �
            Database db = DatabaseFactory.CreateDatabase(&quot;Connection String&quot;);

            string sql = &quot;select customerid, firstname, middlename, lastname, companyname, emailaddress, phone, modifieddate from saleslt.customer where customerid = @customerid&quot;;

            DbCommand cmd = db.GetSqlStringCommand(sql);

            db.AddInParameter(cmd, &quot;customerid&quot;, DbType.Int32, customerId);

            IDataReader dr = db.ExecuteReader(cmd);

            Domain.Customer c = new Domain.Customer();

            while (dr.Read())
            {
                c.CompanyName = dr[&quot;companyname&quot;].ToString();
                c.CustomerId = Convert.ToInt32(dr[&quot;customerid&quot;]);
                c.EmailAddress = dr[&quot;emailaddress&quot;].ToString();
                c.FirstName = dr[&quot;firstname&quot;].ToString();
                c.LastName = dr[&quot;lastname&quot;].ToString();
                c.MiddleName = dr[&quot;middlename&quot;].ToString();
                c.ModifiedDate = Convert.ToDateTime(dr[&quot;modifieddate&quot;]);
                c.Phone = dr[&quot;phone&quot;].ToString();
            }

            if (!dr.IsClosed)
                dr.Close();

            return c;
        }
    }
}
</pre>
<p>Explicando o código acima</p>
<p>Primeiramente repare nos <em>Using</em>, eu acrescentei uma referência ao projeto ABCApp.Domain, pois é lá que esta a classe que eu quero popular; e ao System.Data e System.Data.Common, pois vou usar o objeto <em>Command</em> e o <em>DataReader</em> do ADO.Net.<br />
Na linha 14 eu estou criando o &#8220;BD&#8221;, essa <em>DatabaseFactory</em> vai criar automáticamente uma <em>Connection</em> para mim, através da minha <em>ConnectionString</em> configurada, e através desse objeto vamos interagir com o BD. A vantagem é que a EntLib vai cuidar da conexão para a gente, abrir, fechar, e outras coisas!<br />
O objeto <em>Command</em> já é conhecido de quem já programou com ADO.Net, o legal aqui é que na linha 20 é criado um objeto de parâmetro, normalmente se concatenaria o código na string mas não é uma prática muito recomendada.<br />
A grande diferença aqui é o uso do <em>Data Reader</em>, como não estamos usando um <em>DataSet</em>, vamos puxar os dados do BD e popular um objeto, que é feito na linha 22, então é só ler o objeto dr e ir populando os dados depois de inicializado o nosso objeto de Domain.</p>
<p>Para testar é só escrever o código abaixo no <em>Main</em> do nosso projeto <em>Console</em>.</p>
<pre class="brush: csharp; title: ;">
static void Main(string[] args)
        {

            ABCApp.Domain.Customer c;

            ABCApp.DAL.Customer dalCustomer = new ABCApp.DAL.Customer();

            c = dalCustomer.GetCustomerById(1);
     �
            System.Console.WriteLine(c.CustomerId.ToString() + &quot; - &quot; + c.FirstName.ToString() + &quot; &quot; + c.LastName.ToString());

            System.Console.ReadKey();
        }
</pre>
<p>Qual a vantagem de usarmos isso tudo?</p>
<p>Bom, primeiramente estamos programando realmente em OO, temos um objeto de domínio, a camada de acesso a dados esta isolada do resto, e principalmente não estamos usando DataSet!</p>
<p>Se você quiser baixar o código esta disponível no <a href="http://abcapp.codeplex.com/" target="_blank">CodePlex &#8211; ABCApp</a> e baixe o <a href="http://abcapp.codeplex.com/SourceControl/changeset/view/33351" target="_blank">Change Set &#8211; 33351</a>.</p>
<p>No próximo post (assine o feed para acompanhar) vou mostrar o que podemos fazer de interessante tendo esse objeto de domínio e vou fazer um Refactoring para darmos uma melhorada no código já, pois a idéia aqui era mostrar mais o acesso através da EntLib e como fazer sem o uso de DataSet. Até lá!<br />
Críticas, sugestões, dúvidas são sempre bem-vindas, use o recurso de comentário do blog, a sua dúvida pode ser a de outro, e fica disponível para todos!</p>
]]></content:encoded>
			<wfw:commentRss>http://egomesbrandao.net/blog/2009/10/abc-app-02-populando-objetos-sem-uso-de-dataset/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A falácia do desenvolvimento em 3 camadas</title>
		<link>http://egomesbrandao.net/blog/2009/09/a-falacia-do-desenvolvimento-em-3-camadas/</link>
		<comments>http://egomesbrandao.net/blog/2009/09/a-falacia-do-desenvolvimento-em-3-camadas/#comments</comments>
		<pubDate>Thu, 10 Sep 2009 17:04:33 +0000</pubDate>
		<dc:creator>egomesbrandao</dc:creator>
				<category><![CDATA[.net]]></category>
		<category><![CDATA[abcapp]]></category>

		<guid isPermaLink="false">http://egomesbrandao.net/blog/?p=47</guid>
		<description><![CDATA[O desenvolvimento em 3 camadas, pedido em tantas vagas de emprego, em projetos de software, tanto discutido e difundido em fórums, livros e revistas de TI é uma verdadeira falácia! falácia1 fa.lá.cia1 sf (lat fallacia) 1 Qualidade de falaz. 2 Engano, logro, burla. 3 Sofisma. sofisma so.fis.ma sm (gr sóphisma) 1 Lóg Raciocínio capcioso, feito [...]]]></description>
			<content:encoded><![CDATA[<p>O desenvolvimento em 3 camadas, pedido em tantas vagas de emprego, em projetos de software, tanto discutido e difundido em fórums, livros e revistas de TI é uma verdadeira falácia!</p>
<blockquote><p><!-- /busca --><!-- conteudo --><label id="contents"></label><span>falácia<sup>1</sup></span><br />
<span>fa.lá.cia<sup>1</sup></span><br />
<span><em>sf</em> (<em>lat fallacia</em>) <strong>1 </strong>Qualidade de falaz.<strong> 2</strong> Engano, logro, burla.<strong> 3</strong> Sofisma.</span></p>
<p><!-- /busca --><!-- conteudo --><label id="contents"></label><span>sofisma</span><br />
<span>so.fis.ma</span><br />
<span><em>sm</em> (<em>gr sóphisma</em>)<strong> 1</strong><em> Lóg</em> Raciocínio capcioso, feito com intenção de enganar.<strong> 2</strong> Argumento ou raciocínio falso, com alguma aparência de verdade.<strong> 3</strong><em> pop</em> Dolo, engano, logro.</span></p></blockquote>
<p style="text-align: left;">Antes de começarmos a codificar alguma coisa, é bom um pouco de história para nos situarmos ! O termo foi difundindo erradamente. Vamos começar do começo e por partes, ou camadas , se preferir. <img src='http://egomesbrandao.net/blog/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
<p style="text-align: left;">Tive um primeiro contato com o termo desenvolvimento em camadas por volta do ano 2000. Na época, uma das linguagens mais usadas era o Visual Basic 6.0, o Java estava crescendo, e o Delphi era bem usado. A Microsoft recomendava o uso de ADO, presente no pacote MDAC, em detrimento ao DAO. O objetivo era ir no banco o mais tarde possível, pegar os dados e fechar a conexão o mais cedo possível. Surgiu então o Win DNA (<a href="http://en.wikipedia.org/wiki/Windows_DNA">Windows Distributed interNet Applications Architecture</a>), como o link diz é um nome marketeiro para tecnologias que já existiam mas foram agrupadas em uma arquitetura (COM, COM+, antigo MTS; ADO, ActiveX, ASP). Na época a minha bíblia era o livro <a href="http://www.submarino.com.br/books_productdetails.asp?ProdTypeId=1&amp;ProdId=87125&amp;St=WL126213">Mary Kirtland</a>, posteriormente li também o livro do <a href="http://www.submarino.com.br/books_productdetails.asp?Query=ProductPage&amp;ProdTypeId=1&amp;ProdId=175540&amp;ST=SR">Fábio Câmara</a>.</p>
<p style="text-align: left;">A arquitetura Win DNA</p>
<p style="text-align: left;">A MS,  então,  comecou a divulgar a divisão de responsabilidades. A maioria dos programadores VB na época não usava nem o conceito de Classe, isso passou a ser mais demonstrado nos exemplos e no próprio livro, mas como o VB não era verdadeiramente OO não surtiu muito efeito. Até mesmo a divisão em DLL&#8217;s não era comum, o que mais se via eram executáveis gigantescos ou vários gigantescos por módulo!</p>
<p style="text-align: left;">O acesso aos dados era feito usando-se o RecordSet do ADO, criava-se um, ia no banco de dados, populava ele, fechava-se a conexão e usava na aplicação. A arquitetura,  então, era os Formulários (Form) no EXE e DLL&#8217;s;  A escrita do CRUD ficava em uma DLL. Na época,  a MS incentivava o uso massivo de Stored Procedures. E começou um movimento para tirar a lógica de negócios da camada de apresentação, ainda na fase dessa arquitetura era muito comum ter regras no banco de dados, mas falava-se em colocar essas regras em DLL&#8217;s também, então a camada de apresentação chamava uma DLL que continha algumas regras, que chamava a DLL de CRUD, que populava um RecordSet e retornava pela cadeia até a tela do usuário.</p>
<p style="text-align: left;">As coisas mudam no .Net</p>
<p style="text-align: left;">Com a vinda do .Net tivemos uma migração de algumas aplicações de maneira automática por meio de Wizards, alguns programadores também começaram a programar em VB.Net ou foram para o C#, uma linguagem mais de &#8220;gente grande&#8221; por ser mais parecida com Java. Porém,  o paradigma é diferente! VB 6.0 não é puramente OO, VB.Net sim! Aliás, o VB.Net é somente a sintaxe do VB 6.0, ele é uma linguagem em cima de outra plataforma.</p>
<p style="text-align: left;">Mas as pessoas são acostumadas a hábitos e,  o desenvolvimento em .Net foi feito da mesma maneira que vinha sendo feito no VB 6.0: lógica separada dos dados.</p>
<p style="text-align: left;">O paradigma OO nos diz: Cada classe determina o comportamento (definido nos métodos) e estados possíveis (atributos) de seus objetos, assim como o relacionamento com outros objetos. (fonte: <a href="http://pt.wikipedia.org/wiki/Orienta%C3%A7%C3%A3o_a_objetos" target="_blank">Wikipedia</a>)</p>
<p style="text-align: left;">Na arquitetura Win DNA os dados ficavam em um RecordSet e o comportamento em funções de uma classe em uma DLL, o RecordSet passeava pela aplicação e,  se ela fosse um controle de Estoque uma função recebia o RecordSet, percorria ele para ver se algum item estava zerado para gerar um novo pedido.</p>
<p style="text-align: left;">Na arquitetura OO não existe essa separação, o que eu quero mostrar com os próximos posts é que ao termos objetos de domínio, estamos facilitando o desenvolvimento por deixarmos tudo agrupado (comportamento + estado), a facilidade de manutenção será muito maior. Outra coisa, o uso de DataSet&#8217;s deixa o código também mais confuso, usando classes <a href="http://en.wikipedia.org/wiki/Plain_Old_CLR_Object" target="_blank">POCO</a> o código será muito mais fácil de entender e leve.</p>
<p style="text-align: left;">Continue acompanhando!</p>
]]></content:encoded>
			<wfw:commentRss>http://egomesbrandao.net/blog/2009/09/a-falacia-do-desenvolvimento-em-3-camadas/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ABC App &#8211; 01</title>
		<link>http://egomesbrandao.net/blog/2009/08/abcapp01/</link>
		<comments>http://egomesbrandao.net/blog/2009/08/abcapp01/#comments</comments>
		<pubDate>Tue, 25 Aug 2009 17:13:09 +0000</pubDate>
		<dc:creator>egomesbrandao</dc:creator>
				<category><![CDATA[.net]]></category>
		<category><![CDATA[abcapp]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[entlib]]></category>
		<category><![CDATA[oo]]></category>

		<guid isPermaLink="false">http://egomesbrandao.net/blog/?p=44</guid>
		<description><![CDATA[Ano passado comecei um projeto no CodePlex para mostrar o padrão MVC em Windows Forms para quem ainda não conhece. Mas o projeto ficou parado, mudei de .Net 2005 para .Net 2008 e o projeto não andou, esse ficou pesado, mas acho que é hora de começar me mexer! Resolvi que não vou focar em [...]]]></description>
			<content:encoded><![CDATA[<p>Ano passado comecei um projeto no <a href="http://www.codeplex.com/" target="_blank">CodePlex</a> para mostrar o padrão MVC em Windows Forms para quem ainda não conhece. Mas o projeto ficou parado, mudei de .Net 2005 para .Net 2008 e o projeto não andou, esse ficou pesado, mas acho que é hora de começar me mexer!</p>
<p>Resolvi que não vou focar em MVC, vou usar o projeto para escrever sobre boas práticas, coisas que uso no meu dia- a-dia, então mudei o nome dele novamente (hehe) e ficou assim: ABC App.</p>
<p>Aqui no blog vou usar a categoria <a href="http://egomesbrandao.net/blog/category/abcapp/" target="_blank">abcapp</a> para publicar os posts referentes a essa série.</p>
<p>O código fonte deste projeto está hospedado no <a href="http://www.codeplex.com/">CodePlex</a> em <a href="http://abcapp.codeplex.com/" target="_blank">ABCApp</a>, e , como o projeto é para quem também está iniciando então vou usar as ferramentas Express da Microsoft, <a href="http://www.microsoft.com/express/vcsharp/" target="_blank">Visual C# Express 2008</a>. Vou usar também o <a href="http://tortoisesvn.net/">TortoiseSVN</a>, é só baixar o arquivo MSI e instalar. Antes , para acessar o CodePlex usando o TortoiseSVN era necessário o uso do  <a href="http://www.codeplex.com/SvnBridge">SvnBridge</a>, desenvolvido pela equipe do site, agora não é mais necessário. Todo o projeto tem uma URL para ele, do ABCApp é <a href="https://abcapp.svn.codeplex.com/svn" target="_blank"><strong>https://abcapp.svn.codeplex.com/svn</strong></a>.</p>
<p>Eu criei o projeto na pasta Projects que o VS.Net cria dentro da pasta Documentos do Usuário.</p>
<p>Depois que você instalou o TortoiseSVN é possível baixar em qualquer lugar o projeto, basta clicar com o botão direito do mouse dentro de uma pasta vazia, e escolher a opção <strong>&#8220;SVN Checkout&#8221; </strong>do menu de contexto.</p>
<p>Conforme o projeto for evoluindo é só atualizar o fonte, para isso clique com o botão direito do mouse dentro da pasta e escolha <strong>&#8220;SVN Update&#8221;.</strong><br />
<strong></strong><br />
Quem tem uma licença do VS.Net, pode baixar <a href="http://www.codeplex.com/CodePlex/Wiki/View.aspx?title=Obtaining%20the%20Team%20Explorer%20Client">aqui</a> o Team Explorer, ele não vai funcionar com as versões Express, infelizmente!</p>
<p>Para quem quer saber mais sobre o Subversion e Tortoise , saiu uma matéria na edição 07 de Fevereiro/Março da Mundo.Net, e <a href="http://svnbook.red-bean.com/">aqui</a> você pode baixar um livro sobre o Subversion.</p>
<p>Próximo post vou começar a desenvolver o aplicativo e vou começar a falar de uma maneira de desenvolver usando objetos de negócio acessando o banco de dados sem o uso de Dataset&#8217;s!</p>
]]></content:encoded>
			<wfw:commentRss>http://egomesbrandao.net/blog/2009/08/abcapp01/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

