Você está na página 1de 63

Manual .

NET do Desenvolvedor

Microsoft Consulting Services

371_Visual Basic1638549491428042889.doc Pgina 2 de 63

Sumrio
I. Desenvolvendo em N Camadas...........................................6
a. Servios de Apresentao......................................................6 b. Servios de Negcio...............................................................6 c. Camada de Gerenciamento.....................................................7 d. Camada de Regras de Negcio...............................................7 Recomendaes .............................................................................8 Implementando Componentes de Negcio com .NET............................8 e. Camada de Dados................................................................11 Recomendaes para a criao das classes da camada de dados..........11 Ao implementar Componentes de Acesso a Dados .............................13 Exemplo de Componente para a Camada de Dados............................14 f. Servios de Dados................................................................14 g. Comunicao entre Camadas (entre Classes).......................15

II. Utilizando XML................................................................15 III. Web Forms e ASP.NET...................................................16


a. Dicas ao Programar ASP.NET...............................................16 Dicas de Visual Basic 7 para programadores ASP (que utilizavam VBScript)......................................................................................17 b. Nomenclatura de Variveis..................................................19 c. Escopo de Variveis.............................................................20 d. Nome de Mtodos ...............................................................20 e. Comentrios em VB.............................................................21

IV. Win Forms - VB..............................................................22


a. Recomendaes ao Projetar Windows User Interfaces ........22 b. Nomenclatura de Variveis e Mtodos.................................23 c. Escopo de Variveis.............................................................23 d. Constantes..........................................................................24 e. Indentao..........................................................................24 f. Componentes e Classes........................................................25

V. Dicas de Performance......................................................26
a. Turbinando cdigo VB.NET...................................................26 Seguem algumas regras de otimizao para cdigo .NET...................26

VI. ADO.NET Acessando Dados..........................................31 VII. Web Services................................................................33


371_Visual Basic1638549491428042889.doc Pgina 3 de 63

a. Procedimento......................................................................33 b. Exemplo..............................................................................34

VIII. .NET Remoting............................................................37 IX. Interagindo com componentes COM (Unmanaged Code)37
a. Procedimento......................................................................38 b. Gerenciando as Transaes Automticas com COM+............39 c. Transaes Automticas em Classes .NET............................41 d. Implementando Workflows de Negcio usando BizTalk.......42

X. Gerenciamento de Excees (Erros) ...............................44 XI. Tarefas Mais Comuns .....................................................46


a. Tratamento de Log e Auditoria.............................................46 Auditoria......................................................................................46 Auditoria na interface do usurio (UI)...............................................47 Auditoria na Camada de Negcio.....................................................47 Auditoria na Camada de Acesso a Dados...........................................47 b. Rotinas em lotes..................................................................47 c. Criao de arquivos seqenciais..........................................47 d. Sistemas sem fio.................................................................48 e. Aplicaes Assncronas (MSMQ)..........................................49 Vantagens do uso de comunicao baseada em mensagens:...............49 Desvantagens do uso de comunicao baseada em mensagens:..........49 Cenrios tpicos para Comunicao Assncrona..................................49 Exemplo C#..................................................................................50 Exemplo Visual Basic.....................................................................51 f. Dicas sobre o MS Message Queue.........................................51 Controle de Timeouts.....................................................................52

XII. Documentao de Projeto.............................................54 XIII. Recomendaes de Design..........................................55 XIV. Comunicao Segura entre Componentes....................56 XV. Migrando aplicaes para .NET......................................57 XVI. Escolha seu Objetivo....................................................58
a. Escalabilidade......................................................................58 b. Disponibilidade ...................................................................58 c. Facilidade de Manuteno....................................................59 d. Segurana...........................................................................59 e. Facilidades de Gerenciamento Operacional..........................60

XVII. ndices........................................................................61 XVIII. Referncias...............................................................62


371_Visual Basic1638549491428042889.doc Pgina 4 de 63

371_Visual Basic1638549491428042889.doc Pgina 5 de 63

I. Desenvolvendo em N Camadas
O desenvolvimento em N Camadas continua sendo o cerne da arquitetura de aplicaes distribudas. Porm, agora com o advento dos Web Services o desenvolvimento em camadas rompe fronteiras ampliando as possibilidades de uso de componentes distribudos separados pela Internet. Note que nos referimos a N camadas e no simplesmente a trs camadas, pois seguindo-se a orientao de diversas boas prticas de programao, chega-se a uma estrutura de camadas ainda mais refinada. Diversas interpretaes podem dar espao quando falamos em camadas: podemos pensar em camadas fsicas definidas por mquinas, camadas definidas por aplicaes que conversam entre si, camadas funcionais, e assim por diante. Como forma de padronizar a abordagem e permitir um melhor entendimento dos aspectos comuns aos projetos e tirar o mximo proveito do desenvolvimento de software em componentes, partimos para uma abordagem conceitual e lgica que identifica e separa as funcionalidades do software em servios. Esses servios so, ento, classificados logicamente em trs categorias, a saber: Servios de Apresentao: incluem as interfaces grficas bem como a lgica de apresentao; Servios de Negcio: incluem todas as regras de negcio assim como a lgica necessria para a aplicao das mesmas; Servios de Dados: incluem os sistemas de bancos de dados bem como as interfaces utilizadas para acess-los.

a. Servios de Apresentao
Win Forms; Web Forms; Namespaces e Classes com funes de fazer a validao dos dados inseridos pelo usurio No mundo .Net, temos a misso de atingir qualquer tipo de cliente, seja ele um PC (Personal Computer), WebTV, telefone celular, PDA, tablet PC, etc... Neste contexto aparece um novo conceito: SMART CLIENT (cliente inteligente). Por definio, o cliente inteligente um dispositivo que tem poder de processamento. Logo, teremos clientes inteligentes com maior ou menor poder de processamento (o telefone celular tem baixo poder de processamento e o PC tem um enorme poder de processamento). A tecnologia .NET permite, atravs do uso de Win Forms ou atravs do Mobile Internet Toolkit, aproveitar as vantagens de um smart client.

b. Servios de Negcio
As classes dessas camadas podem agora ser implementadas atravs de trs tecnologias distintas: Classes organizadas em namespaces e compiladas como DLLs Web Services disponibilizados como arquivos .ASMX para acesso via WEB (http://soap) Classes implementadas em cdigo no-gerencivel (componentes COM) 371_Visual Basic1638549491428042889.doc Pgina 6 de 63

Esta ltima destina-se principalmente para implementaes que: Interagem com cdigo legado desenvolvido em verses anteriores do Visual Studio; Apiam-se em controle transacional COM+;

Interagem com Servios Microsoft programaticamente por meio de automations ou APIs (Ex: CDONTS no Exchange, DMO no SQL Server, BizTalk AIC, etc...) Independentemente da tecnologia escolhida, identificamos trs tipos de funcionalidades que, em geral, sero implementadas pelos servios de negcio. Podemos dividir esses trs tipos de funcionalidades em trs grandes camadas funcionais : Camada de Gerenciamento; Camada de Regras de Negcio; Camada de Acesso a Dados.

A identificao e classificao das funcionalidades em tais camadas fraciona o desenvolvimento de cdigo e permite o trabalho em equipe em grandes projetos.

c. Camada de Gerenciamento
As classes escritas na Camada de Gerenciamento esto diretamente relacionadas aos servios de usurio. Eles faro a devida interao com as classes de validao de entrada de dados pelo usurio e eventuais dependncias com regras de negcio, servios de log, servios de auditoria, controle transacional e outros. Na sua implementao, geralmente as classes gerentes delegam seus servios s classes de regras de negcio depois de j terem agregado seu trabalho.

d. Camada de Regras de Negcio


Esta camada o ncleo dos servios de negcio e onde se encontra a maior probabilidade de reutilizao de objetos, devendo prever extenses de forma a aceitar novos requisitos e circunstncias do negcio. nesta camada, ainda, que identificamos fluxos de trabalho (Workflows) que determinam a dinmica de operao do negcio a ser automatizado e a criao dos principais componentes de cdigo. Ao implementar regras de negcio, sugerimos que voc verifique a natureza do negcio versus as necessidades e os desejos pretendidos para a automao do sistema em questo, e identifique o que ser preponderante: Orquestrao do processo de negcio (Workflow) ou 371_Visual Basic1638549491428042889.doc Pgina 7 de 63

Conjuntos modulares de lgicas independentes Para a primeira situao, utilize fluxos de trabalho de negcio implementados com orquestraes BizTalk para gerenciar um processo que envolva vrios passos (steps) e transaes muito demoradas (long running transactions). Integre o sistema com outros sistemas ou servios atravs de troca de mensagens. Construa servios que precisam ser expostos atravs de vrias tecnologias (COM, MSMQ, HTTP, SOAP, E-MAIL) e serem integrados junto a diversos sistemas. Aproveite os diversos adapters e conectores disponveis para o uso com BizTalk Server. Para a segunda situao voc dever implementar o negcio utilizando-se apenas de componentes quando: No tiver necessidade de utilizar-se de interfaces baseadas em mensagens ou negcios assncronos; Tiver necessidade de encapsular funcionalidades e lgicas que possam ser reutilizadas por vrios processos de negcio; A lgica a ser implementada exigir processamento intensivo ou fizer uso de muitas chamadas em APIs;

Recomendaes
Use comunicao assncrona sempre que possvel. Quando usar mensagens, garanta estado nas interfaces que evitem que uma mesma mensagem recebida duas vezes seja tratada novamente. Defina com cuidado as fronteiras (incio e trmino) das transaes de forma a permitir recorrncia de tentativas e composies. Rode os componentes de regras de negcio sempre que possvel no contexto de um usurio de servio especfico. Escolha e mantenha um formato interno para estados consistentes. Defina por exemplo XML ou DataSet. Avalie cuidadosamente se voc precisa, ou no, utilizar-se de anlise e programao orientada a objetos. Em muitos casos, pode ser mais simples usar padres de representaes de dados prontos e consolidados, tais como DataSets, do que elaborar modelos de objetos proprietrios.

Implementando Componentes de Negcio com .NET

371_Visual Basic1638549491428042889.doc Pgina 8 de 63

Em .NET temos a criao de componentes a partir de classes. As classes em .NET que so declaradas como private no se tornam componentes. Voc pode criar componentes que encapsulam regras de negcio utilizando o framework .NET. Todo cdigo criado dentro do ambiente .NET chama de cdigo gerencivel ou popularmente managed code. Um managed code pode aproveitar das vantagens oferecidas pelo Enterprise Component Services (COM+) ao se implementarem transaes distribudas e outros servios comuns s aplicaes distribudas. essencial que, logo no incio do desenvolvimento dos componentes (classes pblicas), seja definido o uso, ou no, do Enterprise Component Services. Uma vez que seus componentes (classes) vo sendo codificados, fica cada vez mais difcil acrescentar ou retirar funcionalidades do Enterprise Services. As classes (components) da camada de negcio: So chamadas por classes na camada gerenciadora, por outras classes de outros processos da camada de negcio ou por outros servios existentes em aplicaes externas. Em geral, essas chamadas so feitas com a passagem de dados de negcio que devem ser trabalhados. Quando o conjunto de tais dados de negcio complexo, ns o chamamos de documento; So as razes (roots) das transaes que iniciaro ou devero votar quando participarem de outras transaes iniciadas por outras classes (components); Devem fazer toda a validao de entradas e sadas; Podem expor operaes de compensao para falhas ou problemas que podem acontecer ao processo; Chamam classes (components) de acesso a dados (camada de dados) para consultar dados como para atualiz-los; tanto

Podem chamar servios externos atravs de interfaces existentes chamando outros processos de negcio; Ao identificar que algo est inadequado, geram uma exceo (erro) de forma a garantir transaes atmicas.

Use funcionalidades do Enterprise Services tanto para iniciar como para votar (participar de forma ativa) em transaes heterogneas. Para fazer isso, necessrio herdar da classe ServicedComponent e utilizar o objeto ContextUtil.

371_Visual Basic1638549491428042889.doc Pgina 9 de 63

Figura 1 - Exemplo de cdigo utilizando Component Services

371_Visual Basic1638549491428042889.doc Pgina 10 de 63

e. Camada de Dados
As classes deste grupo isolam o resto da aplicao de tudo que esteja relacionado manipulao dos bancos de dados. Elas fornecem dados para as regras de negcio de forma mais simplificada e modificam o contedo do banco de dados sob a orientao dessas regras, isolando as funcionalidades e os detalhes da implementao fsica. Em .NET, temos muitas possibilidades de uso do ADO.NET; assim, importante identificar padres que resolvam os tipos de problemas mais comuns no dia a dia de forma a garantir produtividade e facilidade em futuras manutenes de cdigo. importante notar que o que sugerido como boa prtica em termos de arquitetura de aplicao .NET coloca a aplicao dividida em camadas funcionais. A utilizao de uma camada de dados entre a camada de regra de negcios encapsulando o ADO.NET garante a padronizao do mesmo para as funcionalidades mais comuns do dia a dia, promovendo facilidades de manuteno, extenso e produtividade.

Servios de Usurio Web Forms

Servios de Negcio
Classes Gerenciamento

Servios de Dados SQL, Oracle, DB2

Win Forms

Classes Regras de Negcio

Classes (Validaes)

Classes Acesso a Dados

ADO.NET

Figura 2 - As diversas camadas funcionais no modelo de programao .NET

Recomendaes para a criao das classes da camada de dados


Retorne apenas os dados de que voc realmente necessita; Use as Stored Procedures para abstrair o acesso aos dados (recomendvel); Balanceie a utilizao de Stored Procedures quanto a implementao de regras de negcio. Faa isso tendo em mente bom senso quanto ao real 371_Visual Basic1638549491428042889.doc Pgina 11 de 63

reaproveitamento de lgica e facilidade de manuteno. Muitas Stored Procedures podem ser afetadas, o que acabar resultando em dificuldades de manuteno; Evite a situao em que uma Stored Procedure chama outra Stored Procedure, e assim por diante. Isso um sintoma de excesso de Stored Procedures; Implemente um conjunto padro de Stored Procedures para aquelas tarefas mais comuns, tais como insert, delete, update, find, etc. Se possvel, use geradores de cdigo. Isso trar produtividade, consistncia e padro ao desenvolvimento; Quando houver funcionalidades que sejam utilizadas por vrios componentes, implemente-as em uma interface separada; Planeje e faa a interface de comunicao com a camada de negcios de forma consistente e compatvel, evitando sempre a necessidade de transformaes ou mappings; Utilize DataReaders sempre que houver operaes de leitura de dados (readonly, forward only) apenas. Nesse caso, faa a sua camada de dados retornar DataReaders objects; Quando h a necessidade de uso prolongado do objeto DataReader, aconselhase considerar a opo de se utilizar Datasets, que so sempre desconectados (isso aumenta a escalabilidade) Quando possvel, interessante que a camada de dados exponha metadados (informaes a respeito dos dados) tais como schema ou nomes de colunas: isso oferece maior flexibilidade para a camada de negcio. Os ganhos com flexibilidade tm um custo que pago com degradao de performance ou at mesmo escalabilidade. Evite a construo automtica de um componente de acesso a dados para cada tabela fsica. Considere a possibilidade de escrever seus componentes de acesso a dados num nvel de abstrao e de normalizao maior e mais prximo das necessidades imediatas da camada de negcio. muito comum a criao de uma classe representando uma tabela que faz relacionamento entre duas tabelas. Neste caso, d preferncia por implementar mtodos nas classes principais. Por exemplo, imagine que existem em sua base as seguintes entidades: Livros e Autores. Essas entidades contm um relacionamento do tipo vrios para vrios. Esse relacionamento implementado fisicamente na base de dados por uma tabela. Em vez de se criar uma classe responsvel por essa tabela, d preferncia por criar mtodos, nas camadas Autor e ou na classe Livro, que faam a incluso desse relacionamento (na classe Autor, crie o mtodo AcrescentarLivro e, na classe Livro, crie o mtodo AcrescentarAutor); Sempre que for necessrio guardar dados criptografados, ser esta camada que dever criptografar e descriptografar os dados; Quando as classes da camada de negcio usarem Enterprise Services (COM+), crie as classes de acesso a dados como sendo do tipo componentes de servios e faa seu deployment no Enterprise Service (COM+) como uma library Application;

371_Visual Basic1638549491428042889.doc Pgina 12 de 63

Habilite transaes apenas quando for realmente imprescindvel. Nunca marque todos os componentes de acesso a dados com Require Transactions. Marque tais componentes com Supports Transactions, adicionando o seguinte atributo:
[Transaction (TransactionOption.Supported)]

Ao fazer uso de nveis alternativos ao default de isolation levels em queries, balanceie seu benefcio quanto a performance e conteno, confrontando os requisitos de vazo e acurcia dos dados. Em casos de alta vazo (throughput), a acurcia dos dados pode ser prejudicada se forem utilizados nveis de isolamento menos rgidos; Quando houver transaes heterogneas e a camada de dados tiver de participar, garanta que esta nunca seja o root da transao. mais apropriado que a camada de negcio ou a gerenciadora seja o root da transao; Quando a aplicao contiver mltiplos componentes de acesso a dados, recomenda-se usar a camada testada e de alta performance Data Access Application Block em suas aplicaes para gerenciar as conexes, executar comandos, fazer cache de parmetros, etc. (veja a figura).

Figura 3 - Esquema de construo de componentes de dados

Ao implementar Componentes de Acesso a Dados


Faa simples transformaes e mapeamentos para entrada e sada de dados; Use um componente para interfacear os dados e um componente (apenas um) para conectar-se fonte dos dados; 371_Visual Basic1638549491428042889.doc Pgina 13 de 63

Componentes da camada de acesso a dados no necessariamente devem encapsular operaes em apenas uma tabela. Geralmente, eles atuam em uma tabela principal e operam algumas tarefas em outras tabelas relacionadas.

Exemplo de Componente para a Camada de Dados


O cdigo em C# a seguir mostra um exemplo de um simples componente de acesso a dados. Este cdigo no tem a inteno de ser um modelo a ser copiado em seu cdigo. Sua funo apenas ilustrar o conceito envolvido nesta seo:

public class OrderData { private string conn_string; public OrderData() { // obtm a string de conexo em fonte segura e criptografada // atribui a string a conn_string } public DataSet RetrieveOrders() { // Cdigo que retorna um DataSet contendo Dados da tabela Orders } public OrderDataSet RetrieveOrder(Guid OrderId) { // Cdigo que retorna um tipo DataSet de nome OrderDataSet // que representa uma ordem especfica. // (OrderDataSet ter um schema que tenha sido definido no Visual Studio) } public void UpdateOrder(DataSet updatedOrder) { // cdigo que altera o Banco de dados baseado nas propriedades // da Order passada como parmetro do tipo Dataset } }

f. Servios de Dados
Correspondem ao software de armazenamento e gerenciamento dos dados assim como as classes que conhecem o repositrio de dados, a disposio lgica e

371_Visual Basic1638549491428042889.doc Pgina 14 de 63

fsica em que os dados esto armazenados, os protocolos de comunicao, a concorrncia no acesso e o uso dos dados, a segurana, a sincronia, etc. No Universo .NET, temos como principais representantes o namespace System.Data (ADO.NET) e o Sistema Gerenciador de Banco de Dados Relacional SQL Server. Stored Procedures implementadas em sua consideradas servios de dados do ponto de vista fsico. aplicao tambm sero

g. Comunicao entre Camadas (entre Classes)


A comunicao entre camadas se faz sempre via criao de instncia da classe chamada pela classe chamadora, seguida de chamada de execuo de mtodo. Neste momento, os dados que devem ser transferidos da classe chamadora para a classe chamada devero ser passados como parmetros. Tais parmetros podero ser objetos ou referncias a objetos.

II. Utilizando XML


Extendable Markup Language um padro consolidado no mundo da tecnologia que destina-se a organizar e descrever informaes. Devido sua essncia autodescritiva (Dados + Metadados), o XML usado em todas as camadas lgicas e fsicas de uma aplicao como meio para a comunicao e a transferncia de dados. Em .NET, temos um Namespace especfico para a rpida manipulao e criao de informao no formato XML: System.Xml Este namespace oferece classes com mtodos que executam as principais tarefas relacionadas manipulao de dados em XML, tais como: 1. Carrega os dados XML (System.Xml.Serialize) Exemplo: numa estrutura hierrquica em memria

XmlDocument myDoc = new XmlDocument(); myDoc.Load ("c:\\samples\\arquivo.xml"); 2. Pesquisa, no documento, valores ou atributos de um determinado TAG ou caracterstica. Exemplo: XmlNodeList myList; myList = myDoc.SelectNodes ("Book[Author/@lastname='Smith']");

371_Visual Basic1638549491428042889.doc Pgina 15 de 63

3. Cria nodes XML e permite sua incluso em documentos de maior hierarquia Exemplo: XmlNode newNode = myDoc.CreateElement ("Book"); myDoc.DocumentElement.AppendChild (newNode); 4. Altera valores ou atributos Exemplo: // Incluindo um novo atributo XmlAttribute newAttr = myDoc.CreateAttribute ("Title"); newNode.Attributes.Append (newAttr) // Alterando o valor de um atributo newNode.Attributes["Title"].Value = "Visual Studio.Net"; 5. Etc.

III.Web Forms e ASP.NET


a. Dicas ao Programar ASP.NET
Verifique sempre se seu arquivo .aspx contm Language="XXXXXX" %> declarado uma nica vez o tag <%@ Page

Garanta que o valor do atributo Language (a linguagem a ser utilizada nesta pgina) corresponde sua linguagem de preferncia (VB ou C# so as linguagens mais comuns) Ao programar uma aplicao ASP.NET, d preferncia por "Server Controls" sempre que houver o objetivo de se atingir a maior quantidade de browsers e dispositivos distintos possveis (Pocket PC, TV, PCs, telefone celular, rdios automotivos, etc.) Prefira sempre os intrinsic server controls aos tradicionais html controls Exemplo: <%@Page Language="C#" %> <html> <script language="C#" runat="server"> void EnterBtn_Click(Object Src, EventArgs E) { Message.Text = "Ola " + Name.Text + ", bem vindo ao ASP.NET!"; } </script> <body> 371_Visual Basic1638549491428042889.doc Pgina 16 de 63

<h3><font face="Verdana">Exemplo Pagina ASP.NET</font></h3> <p> <hr> <form action="controls3.aspx" runat=server> <font face="Verdana"> Por favor, entre seu nome: <asp:textbox id="Name" runat=server/> <asp:button text="Enter" Onclick="EnterBtn_Click" runat=server/> <p> <asp:label id="Message" runat=server/> </font> </form> </body> </html> Ao utilizar "Server Controls" do tipo "HTML Controls", sempre faa uso do atributo "id" para habilitar uma referncia ao universo de programao com propriedades, mtodos e eventos. Todo controle HTML ("HTML Control") deve ser declarado atravs de uma tag bem formada. A tag deve ser fechada com uma barra de terminao dentro dela prpria ou ter uma tag de terminao da mesma forma que a sintaxe XML. Ao escrever cdigo em sua pgina ASPX, d preferncia por escrev-los sempre dentro de tags <SCRIPT> </SCRIPT>. Embora a sintaxe de ASP <% cdigo %> continue sendo suportada pelo ASP.NET framework, no recomendada a sua utilizao pois ela pode conduzi-lo a misturar HTML com cdigo. Mantenha as funes separadas em classes .NET de suporte pgina .aspx. Implemente uma pgina de tratamento de erro e um tratador de erro global dentro do arquivo global.asax. Use tal funo e pgina como alternativa unificada para tratar de todos os tipos de excees, evitando mensagens no amigveis ao usurio. A partir desta, faa tratamentos mais especficos para as situaes que assim exigirem.

Dicas de Visual Basic 7 para programadores ASP (que utilizavam VBScript)


"SET". Ao instanciar ou atribuir valores a variveis de objetos, no use mais a palavra Exemplo: Errado : Correto: Set x = Form1.text1 x = Form1.text1

O conceito de propriedade default ou mtodo default no existe mais. Logo, voc dever sempre definir explicitamente o nome da propriedade ou mtodo que pretende utilizar. 371_Visual Basic1638549491428042889.doc Pgina 17 de 63

Quando chamados todos os mtodos, funes e subs, devem-se utilizar, obrigatoriamente, parnteses em sua sintaxe. Exemplo: Errado: Response.Write "Esta chamada dar erro de compilao" Correto: Response.Write ("Estes parnteses agora so obrigatrios") Quando um parmetro passado e no se informa qual o mtodo (ByVal ou ByRef), o default agora ser por valor e no mais por referncia. O tipo de varivel VARIANT no mais suportado. possvel agora declarar mais do que uma varivel em uma mesma declarao DIM. Exemplo: 'tanto a varivel strTitle quanto strAddress sero do tipo string Dim strTitle, strAddress As String 'Esta declarao equivalente a: Dim strTitle As String Dim strAddress As String

Habilite a opo de Option Explicit declarando o atributo Explicit igual a true. Exemplo: <%@Page Language="vb" Explicit="true" %> No Visual Basic .NET possvel fazer a inicializao de uma varivel na mesma linha em que esta declarada. Exemplo: Dim intCounter As Integer = 1 ' equivalente a: Dim intCounter As Integer intCounter = 1 O Visual Basic .NET 7.0 oferece uma maior segurana quanto aos tipos. Erros sero gerados quando uma converso puder falhar em run-time. 371_Visual Basic1638549491428042889.doc Pgina 18 de 63

O Tratamento de Erro Estruturado atravs do uso dos comandos Try...Catch...Finally permite aos desenvolvedores utilizar de forma hierrquica o tratamento de erros de run-time escrevendo menos cdigo, fazendo um cdigo mais limpo e evitando as duplicaes que tanto ocorriam na verso anterior. Exemplo: Sub WriteToFile (CustomerInformation As String) Try FileOpen (1, "TEST.TXT", OpenMode.Output) FilePut (1, CustomerInformation) Catch e As Exception Kill ("TEST.TXT") MsgBox (e.ToString) Finally FileClose (1) End Try End Sub

Existem novos mtodos de converso de tipos, tal como ToString. Embora os antigos comandos de converso continuem sendo suportados, d preferncia a esses novos mtodos.

b. Nomenclatura de Variveis
Utilize sempre nomes bem significativos e relacionados funo da varivel. No use nomes muito extensos nem muito curtos. Use o bom senso de forma a balancear a representatividade do nome e a praticidade em ter que se escrever tal nome vrias vezes durante o desenvolvimento do cdigo. Recomenda-se como boa prtica utilizar uma regra de nomenclatura com prefixos de 3 letras associados a cada um dos tipos desejados (Tabela 1), lembrandose sempre das restries impostas aos nomes de variveis: Deve ser iniciado com caractere alfabtico No pode conter o caractere ponto (.) Tamanho mximo de 255 caracteres Precisa ser nico no escopo no qual declarado

Se a varivel for composta de vrias palavras, use a notao hngara. Para tanto, use, aps o prefixo, a primeira letra de cada palavra em maiscula, concatenando-as sem o uso de caractere de sublinhado (_) ou hfen (-); o sufixo que identifica o tipo deve ser sempre escrito em letra minscula. Recomenda-se que o tamanho mximo do nome da varivel no exceda 32 caracteres.

371_Visual Basic1638549491428042889.doc Pgina 19 de 63

Descrio Classe bsica para todos os tipos (CTS) String 8-bit byte com sinal 8-bit byte sem sinal 16-bit value com sinal 16-bit value sem sinal 32-bit value com sinal 32-bit value sem sinal 64-bit value com sinal 64-bit value sem sinal 16-bit caracter tipo Unicode IEEE 32-bit float IEEE 64-bit float Valor Booleano (true/false) 128-bit armazena at 28 ou 29 digitosusado em aplicaes financeiras.

Nome do Tipo em .NET (CTS) System.Object System.String System.SByte System.Byte System.Int16 System.UInt16 System.Int32 System.UInt32 System.Int64 System.UInt64 System.Char System.Single System.Double System.Boolean System.Decimal

Alias em VB Object String SByte Byte Short UInt16 Integer Uint32 Long UInt64 Char Single Double Boolean Decimal

Alias em C# object string sbyte byte short ushort int uint long ulong char float double bool decimal

Tabela 1 - Tipos de dados bsicos do Framework .NET

c. Escopo de Variveis
O escopo de uma varivel determinado pelo local em que feita sua declarao. Quando a declarao for realizada dentro de um mtodo de uma classe, apenas o cdigo interno a esse mtodo do procedure poder acessar ou modificar tal varivel. Quando uma varivel for declarada externamente a um mtodo especfico, porm internamente a uma classe, essa varivel poder ser acessada por todo cdigo de qualquer mtodo interno classe. importante que se tenha ateno redobrada para com os antigos usos de variveis globais como elemento de comunicao entre procedimentos e funes. Esta prtica deve ser substituda por chamadas de mtodos com passagens de parmetros.

d. Nome de Mtodos
O nome de um mtodo (procedure/function, sub, etc.) deve ser formado por um identificador que seja representativo sua funcionalidade. Use notao hngara para concatenar palavras at que seu significado esteja ilustrado. Lembre-se que a letra inicial de cada palavra deve ser maiscula e as demais, minsculas. Sugere-se que seja utilizada, na primeira palavra, sempre um verbo.

371_Visual Basic1638549491428042889.doc Pgina 20 de 63

e. Comentrios em VB
O caractere apstrofo (') deve ser utilizado para indicar incio de comentrios. Exemplo: Dim intCounter As Integer = 1 'Esta varivel um contador

O incio de toda pgina ASPX deve conter um cabealho em que deve ser feita uma descrio das funes que essa pgina exerce na aplicao. Julga-se muito importante que toda classe e todo mtodo tenham um cabealho de comentrio precedendo seu prototype descrevendo seu propsito, descrio dos parmetros e/ou constructor, Data de criao, nome do programador e dados de alterao, caso tenha sofrido algum. Essa descrio no deve detalhar a implementao e, sim, seu objetivo.

Seo do Cabealho
Objetivo Parmetros Data Autor Alterao

Contedo
O que o mtodo (classe) faz Lista descritiva dos parmetros recebidos pelo mtodo ou pelo constructor no caso de uma classe Data da Criao Autor do cdigo Data e Autor de eventuais manutenes feitas ao cdigo Numero da verso
Tabela 2 - Regras de documentao de Procedures

Sugere-se tambm: Seguir toda declarao de varivel de comentrios que explicam a finalidade de tal varivel. Indentar blocos aninhados usando 4 espaos.

371_Visual Basic1638549491428042889.doc Pgina 21 de 63

Figura 4 Exemplo de comentrios nas pginas ASP

IV. Win Forms - VB


a. Recomendaes ao Projetar Windows User Interfaces
Evite escrever cdigo diretamente nos tratadores de eventos dos controles utilizados para construir a interface do usurio (UI). D preferncia a fazer chamadas a cdigos escritos em classes nas rotinas dos tratadores de eventos. Isso facilitar muito a manuteno do cdigo e da interface. Segue um exemplo de cdigo escrito para o tratamento de um evento de clique. Repare na chamada de uma rotina mais especfica //Tratador do Evento Event Handler private void addIten_Click(object sender, System.EventArgs e) { AddItemToBasket(selectedProduct, selectedQuantity) } //Rotina que realmente responde com o efeito desejado public void AddItemToBasket(ProductID, Quantity) { // cdigo que coloca o produto no carrinho de compras } 371_Visual Basic1638549491428042889.doc Pgina 22 de 63

Gerencie a interao com o usurio abrindo e fechando diferentes forms em diferentes momentos. Use forms modais para situaes em que for necessrio que o usurio feche esta janela antes de usar outra. Sempre que uma aplicao contiver janelas no modais abertas que se relacionem, ser necessrio manter seus dados sincronizados. Use de forma consciente os eventos dessas janelas, escrevendo cdigo que as mantenha sincronizadas. Tenha sempre o bom senso de implementar tratamento de erros em seus forms de modo a evitar mensagens no amigveis de excees .NET Em UIs feitas em ASP.NET, use cache explicito em elementos visuais que sejam: utilizados intensamente ou visualizados por muitos usurios, ou elementos que representem dados que se alteram com pouca freqncia e que no so utilizados em contextos transacionais.

Ao implementar funcionalidades de UNDO (desfazer) para seus usurios, lembre-se de verificar as funcionalidades de UNDO j suportadas pelos controles e o Sistema Operacional. Oferea funcionalidades do tipo recortar/colar ou copiar/colar em suas interfaces. Muitos de seus usurios j utilizam-se de tais facilidades e sentem-se familiarizados ao encontr-las. Use o clipboard. Ao exibir longas listas, sempre que possvel faa uso de paginao. Nessas situaes, de bom tom mostrar a quantidade total de pginas necessrias para se mostrar todos os itens e a pgina que est sendo mostrada. Em alguns casos em que se desejam exibir dados armazenados, vale a pena dar acesso a suas classes de acesso a dados. Considere estas situaes: Fisicamente existe apenas uma mquina com o banco de dados, componentes e o web server. Existe explicitamente a necessidade de se manter o sistema altamente acoplado.

b. Nomenclatura de Variveis e Mtodos


Aplicam-se as mesmas regras j estipuladas para ASP.NET. Lembre-se que no h mais diferena entre uma classe escrita em VB.NET que ser utilizada numa aplicao com interface Windows e uma aplicao com interface Web.

c. Escopo de Variveis
Aplicam-se as mesmas regras de ASP.NET 371_Visual Basic1638549491428042889.doc Pgina 23 de 63

d. Constantes
Declare constantes usando o identificador em letras maisculas. esquea de comentar a constante dizendo qual a sua finalidade. No se

e. Indentao
Configure o Visual Studio de todos os desenvolvedores da equipe para usar a mesma quantidade de espaos quando for pressionada a tecla de tabulao. Sugere-se como padro o valor de 4 espaos. Isso aumentar a produtividade e a facilidade de manipulao de cdigos em manuteno, alm de contribuir com a identidade da padronizao dos cdigos. Toda estrutura criada dever ter seu cdigo interno indentado. Assim sendo, tudo o que estiver interno a uma estrutura condicional if dever estar deslocado de quatro espaos. Exemplo de indentao para estrutura condicional: If (r.x = x And r.y = y And r.width = w And r.height = h) Then Equals = True Else Equals = False End If Exemplo de indentao para estrutura for: Dim x As Integer For x = 0 To (o.Length - 1) Dim cc As Color = CType(o(x), Color) Console.WriteLine(x & ": Name=" & cc.ToString()) Next Exemplo de indentao para declarao de classe: Inherits System.Windows.Forms.Form Public Class SimpleHelloWorld Public Sub New() MyBase.New() Me.Text = "Hello World" End Sub End Class

371_Visual Basic1638549491428042889.doc Pgina 24 de 63

f. Componentes e Classes
Todas as classes devem ter seu nome iniciado pela letra C maiscula, podendo esse nome ser composto por mais de uma palavra concatenada, desde que a primeira letra de cada palavra seja maiscula e as demais, minsculas (Notao Hngara). Tente manter os nomes curtos e significativos, pois sero referenciados constantemente ao longo do cdigo.

Modificador Modificador Descrio VB C# O contedo da classe pode ser acessado de fora public Public da definio da classe e das classes derivadas. O contedo da classe no acessado de fora da Protected protected definio da classe, mas pode ser acessado por classes derivadas. O contedo da classe no acessado de fora da Private private definio da classe e nem acessado por classes derivadas. O contedo da classe visvel apenas de dentro internal Friend da unidade de compilao da unidade. Protected Une as caractersticas de uma classe protected Friend e uma classe Friend. Shadows Indica que a classe reflete um elemento de nome idntico na classe base. MustInherit Indica que o contedo desta classe s poder ser acessado em classes derivadas. A classe com o modificador Must Inherit no pode ser instanciada. NotInheritable Indica que esta classe no permitir mais ser derivada.
Tabela 3 - Resumo dos Modificadores

371_Visual Basic1638549491428042889.doc Pgina 25 de 63

V. Dicas de Performance
a. Turbinando cdigo VB.NET
Seguem algumas regras de otimizao para cdigo .NET.
1. Certifique-se que o cdigo que ser colocado em produo seja compilado com a opo de suporte a debug desabilitada. 2. Habilite a opo Enable Optimizations (menu Configuration Properties | Optimizations page da caixa de dilogo Project Properties. 3. Sempre que possvel, crie mtodos que no possam ser reescritos (overridable). Ou seja, no use indiscriminadamente o modificador Overridable. Um mtodo selado (aquele que no pode ser reescrito , em mdia, 35% mais rpido) deve ser sempre preferido quando a questo for performance. Exemplo: Class Teste ' Este mtodo pode ser reescrito Overridable Sub Procedimento() 'Cdigo End Sub ' Mtodo que no pode ser reescrito Interno Private Sub Interno() 'Cdigo End Sub ' Mtodo que no pode ser reescrito Public Sub Externo() 'Cdigo End Sub End Class 4. Chame mtodos diretamente na interface principal da classe. Mtodos chamados via interfaces secundrias sero de quatro a cinco vezes mais lentos. 5. Evite repeties de Strings. Em aplicaes acessadas por vrios usurios, podem existir vrias instncias simultneas na memria que carregam vrias duplicaes de string para a memria. Use shared member ou string intern pool para evitar o uso desnecessrio de memria e garbage collectors. Segue abaixo um exemplo de cdigo para a implementao de uma propriedade para string de conexo que faz uso do string intern pool, evitando a duplicao de strings.

371_Visual Basic1638549491428042889.doc Pgina 26 de 63

Exemplo: ' The private member Dim m_ConnString As String Property ConnectionString() As String Get Return m_ConnString End Get Set(ByVal Value As String) m_ConnString = String.Intern(Value) End Set End Property 6. Codifique destrutores implementando um mtodo Finalize para liberar recursos que no so automaticamente gerenciados pelo .NET Framework (exemplos: Clipboard, arquivos, conexes com base de dados, etc) Em .NET, no existe o evento Terminate; porm, possvel implementar o mtodo Finalize (protected). Esse ser automaticamente chamado pelo .NET Framework sempre que o objeto estiver prestes a ser destrudo pelo garbage collector. Exemplo: Class TestObject ' put the garbage collector under pressure Dim dummyArr(1000) As Byte Sub New() OpenClipboard(0) End Sub Protected Overrides Sub Finalize() ' close the clipboard when finalized CloseClipboard() MyBase.Finalize() End Sub End Class

Outra soluo que aumenta ainda mais o desempenho, mas que acarreta um pouco mais de disciplina implementar o mtodo Dispose atravs da interface Idisposable. Esse mtodo conter o mesmo tipo de cdigo que o mtodo Finalize teria e dever ser chamado diretamente por clients antes de atribuir nothing ao objeto. Exemplo: Class TestObject 371_Visual Basic1638549491428042889.doc Pgina 27 de 63

Implements IDisposable Public Sub Dispose() _ Implements IDisposable.Dispose ' fecha o clipboard CloseClipboard() ' No necessrio finalizar este objeto GC.SuppressFinalize(Me) End Sub ' o resto do cdigo como era no original... End Class O cdigo que deve ser escrito no client : Dim o As TestObject Try ' cria o objeto o = New TestObject() ' ... Finally ' roda o cdigo de limoeza final e o destroi o.Dispose() o = Nothing End Try 7. Ao escrever cdigo que faa uso de classes/objetos que disparam eventos, d preferncia para utilizar a nova tcnica disponvel em .NET de fazer, em run time, a atribuio (link) de um evento a um mtodo chamado quando este for disparado. Note que, com a nova tcnica, possvel fazer o link do evento com o mtodo de tratamento (event handler) e desfaz-lo. Exemplo: Dim o As New TestObject Sub UseDynamicEvents() ' associa o evento com a procedure local AddHandler o.TestEvent, _ AddressOf MyHandler ' usa o objeto (agora MyHandler suporta os eventos) ' ... ' remove o tratador do evento RemoveHandler o.TestEvent, _ AddressOf MyHandler End Sub Sub MyHandler() ' ...rotina que trata o evento aqui. End Sub

371_Visual Basic1638549491428042889.doc Pgina 28 de 63

No use o tradicional WithEvents que, embora continue sendo suportado no VB.NET, tem menor desempenho.

Exemplo: ' Pode ser usada a declarao New com WithEvents Dim WithEvents obj As New TestObject Sub obj_TestEvent() Handles obj.TestEvent ' ..Trata o evento aqui End Sub

8. Evite disparar excees desnecessariamente em seu cdigo. Sobretudo ao criar componentes chamados por outros componentes, tente reduzir a probabilidade de uma exceo para zero. Contra-exemplo: Dim rand As New Random() Sub CanThrowException(ByVal prob As Double) If rand.NextDouble <= prob Then Throw New System.Exception() End If End Sub

A rotina acima pode disparar uma exceo e isso dever ser tratado na camada cliente da seguinte forma: Dim i As Integer Dim prob As Double = 0.01 For i = 1 To 1000000 Try CanThrowException(prob) Catch ' No faz nada neste caso End Try Next Abaixo segue um exemplo de cdigo alternativo que ter um desempenho muito superior: Function DoesntThrowException( _ ByVal prob As Double) As Boolean If rand.NextDouble <= prob Then 371_Visual Basic1638549491428042889.doc Pgina 29 de 63

Return False Else Return True End If End Function

' notifica a falha ' notifica o sucesso

Observao: No a incluso dos operadores Try Catch que onera o desempenho do cdigo e, sim, o disparar de uma exceo. 9. Ao concatenar strings repetidas vezes, use o objeto StringBuilder (System.Text.StringBuilder). Isso evitar que a cada alterao da string seja alocada um novo bloco de memria. Exemplo: Criando uma lista de 500 numeros separados por virgula Dim sb As New System.Text.StringBuilder(2000) Dim i As Integer For i = 1 To 500 sb.Append(CStr(i)) sb.Append(", ") Next Dim s As String = sb.ToString armazena o resultado em s Para mxima performance, instancie o StringBuilder com tamanho igual ou maior que a quantidade mxima de caracteres a ser armazenada e nunca reaproveite o objeto aps a extrao da string com o uso do mtodo ToString. Observao: a antiga tcnica de se utilizar uma string grande fixa e usar a funo MID em .NET no mais adequada pois, a cada chamada, alocada uma nova rea de memria. 10. Sempre que possvel, d preferncia por usar value types. Porm, evite-os quando existir a necessidade de atribuir um value type a uma varivel de objeto (isso causar uma operao de boxing). Quando atribuir um objeto a um value type, faa uso da chamada de um mtodo, no objeto, que retorne apenas o valor desejado (isso evitar unboxing) Lembre-se de que todos os tipos de dados em .NET podem ser agrupados em: Value types (tipos Numricos, Datas, char, structures, enum) ou Reference types (strings, arrays, classes)

371_Visual Basic1638549491428042889.doc Pgina 30 de 63

VI. ADO.NET Acessando Dados


O ADO.NET a nova gerao do conjunto de classes de acesso a dados feito sob medida para o universo .NET. O ADO.NET agrega vantagens principalmente na manipulao de dados em um ambiente composto de clientes espalhados e conectados pela Internet, aplicaes assncronas e dispositivos que trabalham off-line. O ADO.NET composto de vrias classes, a destacar: Connection usado para criar a conexo entre o programa e o engine do banco de dados Command usado para armazenar comandos SQL que so executados na base de dados (SELECT, INSERT, UPDATE, DELETE, Stored Procedures, etc) DataReader trata-se de um cursor read-only e forward-only com o objetivo de oferecer a mxima performance na busca de dados (til e eficiente para preencher combos, listas e tabelas) DataAdapter classe usada para buscar dados na base de dados e preencher uma instncia DataSet ou DataTable. DataSet Esta classe funciona como uma base de dados na memria da aplicao. Cria uma estrutura que permite armazenar dados de tabelas, colunas, registros e relacionamentos entre as tabelas. Os dados podem ser serializados em XML, alterados, excludos, inseridos e sincronizados com a fonte original. DataTable - Destaca-se, ainda, as classes DataTable, hierarquicamente internas classe DataSet. A classe DataTable armazena o resultado de um comando select ou stored procedure.

O ADO.NET oferece, hoje, dois tipos especializados de acesso a dados: acesso nativo ao SQL Server (SQL Server .NET data provider) ou acesso a OLEDB Provider (OLEDB.NET data provider). Use as classes de SQL Server .NET data provider para mximo proveito ao acessar dados no SQL Server e use as classes do OLEDB.NET data provider ao acessar dados em bases que no o SQL Server. Veja abaixo como o ADO.NET se encaixa no modelo de acesso a dados:

371_Visual Basic1638549491428042889.doc Pgina 31 de 63

Figura 5 - Esquema de integrao do ADO.NET

371_Visual Basic1638549491428042889.doc Pgina 32 de 63

VII. Web Services


XML Web Services a melhor estratgia de componentizao para aplicaes que se integram Internet. O motivo disso que os Web Services resolvem questes especficas relacionadas Internet , que so diferentes dos desafios comuns envolvidos em aplicaes de intranet ou LANs, tais como latncia, falhas, heterogeneidade e segurana. Observao: Se voc no tiver planos para distribuir suas aplicaes atravs da Internet ou aproveitar as vantagens de tecnologias web tais como Web Farms com o intuito de escalar sua aplicao, considere usar outras tecnologias .NET que sejam otimizadas para redes internas (Exemplo: .NET Remoting)

a. Procedimento
1. Abra um novo projeto no Visual Studio .NET. 2. Selecione a linguagem de sua preferncia (Exemplo: Visual Basic Projects). 3. Selecione o template ASP.NET Web Services. 4. Altere o nome do projeto de forma a identificar o nome de seu Web Service. 5. Pressione Enter. 6. Um Web Service bsico criado e disponibilizado. Clique no link click here to switch to code view para visualizar o cdigo que o Visual Studio pr-escreveu (veja figura abaixo).

371_Visual Basic1638549491428042889.doc Pgina 33 de 63

7. Na tela de cdigo que se abre, repare que existe um Web Service chamado HelloWorld comentado. Copie ou modifique esse cdigo para criar agora o Web Service com a funcionalidade desejada. 8. Retire os comentrios e edite o cdigo comentado do Web Service HelloWorld definindo o nome para o Web Service. 9. Defina e declare eventuais parmetros da mesma forma que se faz na criao de uma funo. 10. Codifique a lgica do Web Service da mesma forma que se implementa a lgica de uma funo. 11. Compile o cdigo. O Web Service est pronto para ser testado. 12. Clique no boto start ou ento selecione a opo Start no menu Debug. 13. Uma tela de navegador ser aberta, trazendo uma pgina .asmx. Note que, nessa tela, voc ter todas as informaes de definio, teste e de como consumir o Web Service que acabou de fazer. 14. Clique no link com o nome de seu Web Service. 15. Digite os valores dos parmetros a serem testados. 16. Clique no boto Invoke e verifique o resultado que retorna em XML.

b. Exemplo

371_Visual Basic1638549491428042889.doc Pgina 34 de 63

Clique no boto Start ou no menu Debug. Escolha Start para obter a seguinte tela de navegador:

Clicando no link Service Description da pgina acima, o desenvolvedor poder ver a definio do Web Service em XML (WSDL). Clicando no link com o nome do Web Service (neste caso, Multiplica), uma nova tela de navegador trar informaes de como testar e consumir o Web Service usando soap, get ou post:

371_Visual Basic1638549491428042889.doc Pgina 35 de 63

Para testar o Web Service, preencha os campos de valores e clique no boto Invoke. Uma vez satisfeito com o comportamento do Web Service, use os exemplos de cdigo oferecidos substituindo os placeholders por variveis e/ou constantes de acordo com o contexto da aplicao-cliente que ir consumir o Web Service atravs de SOAP, GET ou POST.

371_Visual Basic1638549491428042889.doc Pgina 36 de 63

VIII. .NET Remoting


.NET Remoting um mecanismo de interoperabilidade que pode ser usado para fazer chamadas de cdigo .NET em mquinas remotas. Pode-se dizer que o .NET Remoting o equivalente ao DCOM no mundo .NET. O .NET Remoting uma alternativa ao DCOM ou aos Web Services, e sua utilizao em aplicaes que rodem em redes internas (LANs) muito interessante. O .NET Remoting oferece algumas vantagens, tais como: Possibilidade de configurar o canal de comunicao (TCP ou HTTP); Configurao da porta (porta TCP 80); Uso de arquivo de configurao para cliente e servidor, evitando a necessidade de recompilao dos cdigos no evento de alterao de configurao. Esquema da arquitetura do .NET Remoting:

IX. Interagindo com componentes COM (Unmanaged Code)


A compatibilidade com antigos componentes COM garantida no universo .NET, permitindo o aproveitamento do investimento j feito em tecnologias anteriores. O desenvolvedor em .NET poder incluir, em seus projetos, chamadas a componentes escritos em verses anteriores do Visual Studio. Ainda permitido ao desenvolvedor .NET escrever cdigo .NET que ser utilizado por componentes e/ou servios como se fossem componentes COM.

371_Visual Basic1638549491428042889.doc Pgina 37 de 63

a. Procedimento
Usando Faa uma referncia ao componente COM que ser utilizado Clique no item Reference do menu Project. Na janela que se abrir, clique no tab COM Escolha o componente a ser utilizado com um duplo clique. Clique no boto OK.

No se esquea de incluir em seu cdigo a linha imports <nome do componente>. No exemplo, Imports Excel. Instancie a classe referenciada do componente COM . Codifique chamadas de mtodos e propriedades a partir do cdigo .NET.

371_Visual Basic1638549491428042889.doc Pgina 38 de 63

Compile e teste seu cdigo. O cdigo do exemplo anterior instancia e mostra uma classe application do Excel.

b. Gerenciando as Transaes Automticas com COM+


O popular COM+ (Enterprise Services) o ambiente natural para suportar os componentes .NET de negcio. Vantagens oferecidas pelo COM+: Segurana baseada em papis (role-based security) Controle transacional Pool de objetos Interface com gerenciador de mensagens (queued components)

E as restries: Suporta apenas HTTP e DCOM-RPC

371_Visual Basic1638549491428042889.doc Pgina 39 de 63

Etapas adicionais na implantao (necessidade de registrar os componentes, configurao de papis desempenhados e segurana)

Seguindo a filosofia de ativao Just in Time e a liberao de recursos o mais cedo possvel, todos os mtodos de componente COM+ devem conter as chamadas SetComplete (sinalizando sucesso ou encerramento do uso) e SetAbort (sinalizando erro durante a execuo da transao). Exemplo: // Classe utilizvel no COM+ (Component Services) [Transaction(TransactionOption.Required)] public class MyClass : ServicedComponent { public void UpdateValue(float newValue) { // Prepara conexo com o BD SqlConnection Database = new SqlConnection("server=(local);" + "Trusted_Connection=yes;" + "Database=Northwind"); // Abre conexo com BD Database.Open (); // Prepara comando para alterao de valor SqlCommand sqlCommand = new SqlCommand(@"UPDATE MyTable " + "SET currentValue = @currentValue", Database); sqlCommand.Parameters.Add("@currentValue",SqlDbType.Int,4); sqlCommand.Parameters["@currentValue"].Value = newValue; try {

// Executa comando de atualizao de dados sqlCommand.ExecuteNonQuery(); // Commit ContextUtil.SetComplete ();

} catch { // Rollback ContextUtil.SetAbort (); } // Fecha conexo com BD Database.Close ();

} }

371_Visual Basic1638549491428042889.doc Pgina 40 de 63

c. Transaes Automticas em Classes .NET


Outra maneira de se usar suporte automtico a transaes preparar a classe para suportar transaes automaticamente. Para tanto: 1. Aplique o atributo TransactionAttribute na classe em questo; [Visual Basic]
<Transaction(TransactionOption.Required)> Public Class Bar Inherits ServicedComponent '. . .continua o cdigo End Class

2. Derive a classe da classe ServicedComponent; 3. Use o utilitrio Sn.exe para criar um par de chaves. Na linha de cdigo digite:
sn -k TestApp.snk

4. Adicione ao cdigo o atributo AssemblyKeyFileAttribute, especificando o nome do arquivo criado com as chaves;
<assembly: AssemblyKeyFileAttribute("TestApp.snk")>

Defina, via constructor, o tipo de suporte transacional desejado;


[Transaction(TransactionOption.Disabled)]

[Transaction(TransactionOption.NotSupported)]

[Transaction(TransactionOption.Supported)]

5. Registre o arquivo que contm a classe gerada no catlogo do COM+. Exemplo :


[Visual Basic]

' ----------------------------------------------------------------' TestApp.vb ' Gerar um Strong name: 371_Visual Basic1638549491428042889.doc Pgina 41 de 63

' sn -k TestApp.snk ' compile o cdigo: ' vbc /target:exe /r:System.EnterpriseServices.dll TestApp.vb ' Rode o cdigo TestApp: ' inicie o aplicativo TestApp.exe ' ----------------------------------------------------------------Option Explicit Option Strict Imports Imports Imports Imports System System.Runtime.CompilerServices System.EnterpriseServices System.Reflection

'Detalhes do registro. 'Nome da aplicao COM+ como aparece no catalogo do COM+. <assembly: ApplicationName("TestApp")> ' O Strong name criado. <assembly: AssemblyKeyFileAttribute("TestApp.snk")> <Transaction(TransactionOption.Required)> Public Class Account Inherits ServicedComponent 'Prove comportamento de SetComplete na ausncia de uma exceo. <AutoComplete()> Public Sub Debit(amount As Integer) ' Faa alguma atividade em base de dados. ' Alguma exceo que ocorra aqui ir abortar a ' transao; caso contrrio, a transao aborta . End Sub End Class Public Class client Public Shared Sub Main() Dim accountX As New Account() accountX.Debit(100) Environment.Exit(0) End Sub End Class

d. Implementando Workflows de Negcio usando BizTalk


O BizTalk Server oferece um servio de orquestraes que permite implementar a lgica de processos de negcios atravs do uso de um tipo de script grfico chamado XLANG. Os scripts XLANG so criados atravs de uma ferramenta do BizTalk chamada BizTalk Orchestration Designer. O estado de cada processo persistido em base de dados SQL Server e permitido criar transaes de longa durao (2 dias). XLANG scripts representam graficamente o processo do negcio permitindo a rpida e imediata integrao com: Componentes .NET; 371_Visual Basic1638549491428042889.doc Pgina 42 de 63

Mensagens MSMQ; BizTalk Messaging; Componentes COM; Scripts.

Figura 6 O processo de negcio interage com servios de interfaces, agentes e componentes de negcio

Um script XLANG pode ser disparado de duas formas distintas: Uma mensagem BizTalk aciona o script. Essa mensagem pode se originar atravs de uma receive function para mensagem MSMQ ou receive function que detecta a presena de um novo arquivo em determinado diretrio; Programaticamente, a partir de um componente COM que implemente mtodos BizTalk especficos .

371_Visual Basic1638549491428042889.doc Pgina 43 de 63

X. Gerenciamento de Excees (Erros)


O gerenciamento de excees em .NET abrange: exceo. Como tratar excees; Como disparar excees; Como fazer fluir a informao de uma exceo; Como publicar (mostrar) ao usurio a informao de uma

Toda aplicao deve implementar algum tipo de tratamento de exceo. As excees devem ser capturadas e resolvidas sempre que possvel. Quando um estado de erro no pode ser resolvido, mensagens amigveis devero informar e direcionar o usurio. aconselhvel que toda exceo seja registrada em log. Isso ajudar muito a monitorar o comportamento do cdigo, permitindo melhorar a qualidade e a interatividade da aplicao e facilitando manutenes e ajustes de cdigo. Devido incluso de um tratamento de excees estruturado no framework .NET, mostra-se abaixo uma sugesto de abordagem a ser adotada de forma padronizada em todos os cdigos. Para as situaes que este padro no atender, abrem-se as excees. A padronizao proposta visa unificar os dilogos de sada de mensagens de erros aos usurios sobre operaes que esto sendo realizadas. Quando quiser criar suas prprias classes de excees, faa isso herdando a partir da classe ApplicationException. Faa a informao da exceo fluir pelas camadas da aplicao at o nvel em que tal informao seja pertinente. Faa a informao de uma exceo atingir apenas as pessoas que devem ser avisadas (pessoal de operaes, staff, gerentes, etc.). E, ao faz-lo, fornea de forma visualmente adequada todas as informaes pertinentes. As informaes das excees so passadas pelas camadas de negcio, pela camada de dados e pela camada gerencial at alcanar a interface do usurio. Nesse caminho, necessrio gerenciar tais informaes tomando deciso quanto a: usurio. Refazer a operao que fracassou; Expor a situao ao usurio; Parar, reiniciar ou continuar com o fluxo da interao com o

371_Visual Basic1638549491428042889.doc Pgina 44 de 63

371_Visual Basic1638549491428042889.doc Pgina 45 de 63

XI. Tarefas Mais Comuns


a. Tratamento de Log e Auditoria
Recomenda-se a gravao, em banco de dados, de informaes de: Mensagens de erro originadas em excees; Cdigo (nmero de erro) originado em excees;

Contexto em que uma exceo foi gerada (classe, mtodo, parmetros); Pontos estratgicos do cdigo que comprovam a execuo, com sucesso, de uma determinada funcionalidade; Nome do usurio, funcionalidade requerida, sucesso ou fracasso, data e hora das funcionalidades que devem ser auditadas. Repare que os primeiros itens referem-se a informaes pertinentes ao adequado funcionamento da aplicao. J o ltimo item trata de uma necessidade de negcio bastante comum em muitas aplicaes: auditoria. importante notar que muitos desenvolvedores gostam de tratar log e auditoria de forma unificada. Isso pode ser at possvel, desde que se atente para a incluso de mecanismos que diferenciem a natureza de cada funcionalidade. Veja maiores detalhes abaixo, no item Auditoria. Utilize uma nica classe especificamente criada com mtodos que fazem as operaes de guardar as informaes de log e auditoria na base de dados. Tenha uma aplicao .NET de leitura desses dados para apreciao dos desenvolvedores (basta uma tela de pesquisa com filtros e outra de exibio dos itens encontrados).

Auditoria
Chamamos de auditoria a necessidade de negcio de se registrar o rastro das atividades dos usurios e do negcio. Principalmente, por motivos de segurana. Assim sendo o log de auditoria deve ser tratado com alguns cuidados adicionais: O local de armazenagem desses dados deve ser de segurana garantida; Se possvel, use assinaturas digitais, autenticaes rigorosas e acesso restrito para garantir que os dados no sejam alterados ou usados de forma maliciosa; 371_Visual Basic1638549491428042889.doc Pgina 46 de 63

Crie, em sua aplicao, um mecanismo de LIGA/DESLIGA. Lembre-se de que qualquer log que se faa causa degradao na performance. Tenha a funcionalidade de ligar/desligar sempre implementada em seu cdigo. Mesmo em situaes em que a auditoria no se faz por amostragens, essa funcionalidade ser til em manuteno e tuning da aplicao; Auditoria na interface do usurio (UI) No se costuma auditar o que acontece na interface do usurio, exceto para eventos dos tipos: Log-on; Log-off; Mudana de senha; Excees de segurana que venham a acontecer.

Auditoria na Camada de Negcio Em geral, aqui que se encontram as principais atividades a serem registradas. Auditoria na Camada de Acesso a Dados Para a mxima granularidade de auditoria, implemente seus logs a partir da camada de acesso a dados. Devido sua proximidade do repositrio de dados, cada evento pode ser completamente monitorado. Para o caso de se desejar utilizar de auditoria dentro do banco de dados (SGBDR), recomenda-se a utilizao de auditoria do servidor SQL Server

b. Rotinas em lotes
Sempre que houver necessidade de se desenvolverem processos que executam em lote, sugere-se a implementao dos passos em componentes .NET; A montagem do Workflow, do controle de execuo, do monitoramento e do tratamento de falhas devem ser implementados via BizTalk Orchestration e BizTalk Messaging.

c. Criao de arquivos seqenciais


Quando uma aplicao fizer uso da gerao de arquivos seqenciais, implemente um mecanismo que verifique os arquivos existentes no diretrio e crie um 371_Visual Basic1638549491428042889.doc Pgina 47 de 63

novo arquivo com nome montado por um radical mais o incremento do nmero de maior valor encontrado na parte Nmero Seqencial.

Exemplo:
Nmero seqencial 5 algarismos

Arq00002.dat
Radical 3 algarismos extenso

Figura 7 - Esquema de nomenclatura de arquivos gerados pelo sistema

A idia que os arquivos gerados tenham seus nomes montados atravs da concatenao de um radical de trs letras e cinco algarismos numricos. O primeiro valor numrico a ser usado dever ser sempre o 00001. Reservaremos o arquivo de nmero 00000 para ser uma cpia do ltimo arquivo criado. Assim sendo, sempre que for criado um novo arquivo, dever tambm ser criada uma cpia desse arquivo, renomeada com o nmero seqencial 00000. Caso um outro sistema precise utilizar esse arquivo, ir se referenciar sempre ao arquivo com final zero para ler a verso mais atual.

d. Sistemas sem fio


Ao desenvolver sistemas que envolvam tecnologias sem fio (wireless), baseie a arquitetura de tal aplicao em troca de mensagens. O advento de dispositivos mveis baseados em redes IP, a evoluo dos padres de segurana em transmisses Wireless, o padro 802.11, IPV.6, o Tablet PC e outras novas tecnologias faro com que sistemas em redes Wireless se tornem cada vez mais populares. O ponto principal a ser considerado ao se desenvolver aplicaes baseadas em comunicao sem fio o fato de no se poder garantir um alto nvel de qualidade da conexo em todas as reas possveis. Por exemplo, estruturas de prdios, proximidade de maquinrios e outros fatores podem resultar em zonas mortas (dark zones) de sinal temporrias ou permanentes. Por isso, ao se projetar uma 371_Visual Basic1638549491428042889.doc Pgina 48 de 63

aplicao destinada ao uso em ambientes Wireless. deve-se considerar sempre o uso de uma dinmica baseada em troca de mensagens e, dessa forma, prevenir-se de ter uma aplicao com muitas excees e retentativas. A notificao de usurios ou sistemas a respeito da ocorrncia de determinado evento outra questo importante nesses tipos de sistemas. Com a evoluo da Internet, novas opes aparecero. Entretanto, hoje sugere-se que se usem as tecnologias disponveis, tais como e-mail, mensagem para telefone celular, acionamento de pager e mensagem instantnea (Messenger, Alert).

e. Aplicaes Assncronas (MSMQ)


Vantagens do uso de comunicao baseada em mensagens:
Escalabilidade e disponibilidade;

Transparncia quanto ao devido funcionamento de um recurso remoto; Isolamento; Maiores similaridades com o modelo de negcio.

Desvantagens do uso de comunicao baseada em mensagens:


Necessidade de gerenciamento de estados;

Message Correlation ( necessrio implementar um mecanismo de identificao de mensagens em aplicaes em que isso for pertinente); Atraso nas mensagens; Fluxo transacional diferente do convencional;

Mensagens repetidas: necessrio implementar controle quando for pertinente; Seqncia de mensagens: controle quando for pertinente. necessrio implementar

Cenrios tpicos para Comunicao Assncrona


Faa aplicaes baseadas em mensagens quando: Se tratar de um sistema de implementao e uso a mdio ou longo prazo (mdios e grandes sistemas); For implementar um sistema que exija alta escalabilidade ou alta disponibilidade; 371_Visual Basic1638549491428042889.doc Pgina 49 de 63

For implementar um servio que deva ser isolado de outros servios ao qual este fica exposto; A comunicao entre as pontas pode ficar temporariamente indisponvel (tal como redes Wireless ou aplicaes de uso off-line; veja o caso de um caixa de banco: quando o banco est sem conexo, so usadas contingncias); Os nomes das filas MSMQ so case sensitive, e o MSMQ Explorer apresenta todos os nomes em caixa baixa. Para utilizar os objetos do MSMQ, necessrio fazer referncia ao Namespace System.Messaging O Namespace System.Messaging prov classes que permitem conectar, monitorar e administrar filas de mensagens, alm de enviar, receber ou selecionar mensagens. Veja abaixo os principais mtodos. Use a Classe MessageQueue, usada para ler e escrever mensagens em filas. Mtodo Send Receive ReceiveById Funcionalidade Escreve mensagem na fila especificada L uma mensagem da fila (retira a mensagem da fila)

L mensagem da fila controlando por Id (retira a mensagem da fila) ReceiveByCorrelationId L mensagem da fila (retirando a mensagem da fila) Peek L mensagem da fila sem retir-la da fila Objeto Message Prov controle detalhado sobre a informao contida na mensagem

Exemplo C#
public static void Main() { // Abre conexo com uma Fila .\MyQueue MessageQueue myNewQueue = new MessageQueue(.\\MyQueue); //Instancia classe mensagem Message oMensagem = new Message(): // Envia uma mensagem a Fila myNewQueue.Send (oMensagem); // Recebe uma mensagem da fila Message myMessage = myQueue.Receive(); return; } 371_Visual Basic1638549491428042889.doc Pgina 50 de 63

Exemplo Visual Basic


Public Sub SendMessage() ' Conecta a uma fila. Dim myQueue As New MessageQueue(".\myQueue") Dim oMesangem As New Message ' Envia uma mensagem fila myQueue.Send(oMensagem) End Sub

f. Dicas sobre o MS Message Queue


Os servios de mensagens do MSMQ (Microsoft Message Queuing Services) permitem que as aplicaes sejam executadas assincronamente, utilizando uma rede heterognea para comunicao. O MSMQ disponibiliza vrias formas de envio e recebimento de mensagens; entretanto, essa flexibilidade pode trazer performance inferior a aplicaes sncronas. Eis algumas recomendaes em relao programao do MSMQ: D preferncia por utilizar filas privadas; Quando utilizar filas pblicas, lembre-se de que todas as informaes sobre filas pblicas so armazenadas num repositrio de dados chamado MQIS. O MSMQ 2.0 utiliza o Active Directory como seu servio de repositrio.

Muitas funes precisam acessar o repositrio enquanto outras, no. A idia minimizar o trfego. Para isso, podemos escolher algumas estratgias de acordo com o caso: Utilize o GUID da fila ao referenci-la: Exemplo:
"public = 228B7F89-EB76-11D2-8A55-0080C7E276C0"

Custo:

Uma nica permisses

consulta

para

validar

existncia

as

371_Visual Basic1638549491428042889.doc Pgina 51 de 63

Vantagens: Desvantagens:

Funciona off-line; Se on-line, o MSMQ verifica a existncia da fila O GUID hard-coded, o que significa que, numa operao de recriao das filas, a aplicao precisar ser alterada.

Utilize o caminho da fila ao referenci-la: Exemplo: PathName = "Machine_Name\Queue_name" Custo: Vantagens: Desvantagens: Duas consultas ao repositrio, uma para buscar o GUID e outra para verificar a existncia e as permisses Descoberta dinmica da fila No funciona off-line

Utilize o FormatName direto ao enviar mensagens para uma fila Exemplo: FormatName = "Direct=OS:Machine_Name\Queue_Name" Custo: Vantagens: Desvantagens: Nenhuma consulta ao repositrio Descoberta dinmica da fila O MSMQ no verifica a existncia da mquina destino; No pode receber mensagens

Controle de Timeouts
Os Timeouts defaults do MSMQ so infinitos. indesejveis. Estes Timeouts incluem: Parmetro ReceiveTimeout para a funo Receive; Isso pode trazer resultados

O padro infinito. Essa funo especifica quanto tempo a aplicao fica aguardando o recebimento de uma mensagem na fila. A aplicao pra de responder enquanto est aguardando a mensagem. Time-to-reach-queue

O default infinito. aconselhvel que se especifique o menor timeout possvel. Caso contrrio, se o destino for invlido (por exemplo, o computador destino no existe mais), a mensagem continua existindo e consumindo recursos. MaxTimeToReachQueue = 3000

371_Visual Basic1638549491428042889.doc Pgina 52 de 63

Time-to-be-received

O default infinito. A mensagem permanece na fila at ser retirada. Existem vrias situaes em que esse timeout importante; por exemplo, confirmaes (acknowledgements) ou journal messages. MaxTimeToReceive = 3000

371_Visual Basic1638549491428042889.doc Pgina 53 de 63

XII. Documentao de Projeto


Recomenda-se, como ferramenta de documentao dos projetos, o Microsoft Visio .NET Enterprise Architect. Com essa ferramenta, muito fcil e prtica a rpida elaborao de documentao bsica. Utilize o UML Static Structure para produzir documentos para: componentes implementados (UML Components); diagrama de seqncia; diagrama de componentes; diagrama de classes; relao de mtodos e parmetros; Use cases descriptions; DER (Diagrama de Entidades Relacionais); Diagramao de interfaces UI;

Figura 8 - Diagrama UML de classes

371_Visual Basic1638549491428042889.doc Pgina 54 de 63

XIII. Recomendaes de Design


Quando planejar uma aplicao ou um servio, considere as seguintes recomendaes: Mantenha o modelo de componentes dentro de uma camada consistente. Baseie-se em modelos de sucesso ou design patterns sempre que possvel; Entenda como os componentes conversam entre si antes de escolher a sua distribuio fsica e suas fronteiras. Mantenha um baixo acoplamento e uma alta coeso; Mantenha a troca de dados consistente (escolha padres como XML, DataReader, etc). Caso decida misturar formatos de representao de dados, mantenha essa variao no mnimo possvel; Faa as polticas de organizao do sistema (segurana, gerenciamento operacional, limitaes de comunicao) o mais abstratas possvel quanto lgica de negcio da aplicao. Utilize componentes que agreguem tais funcionalidades; Identifique os tipos de componentes que a aplicao vai necessitar. Nem todos os componentes so necessrios em todas as aplicaes.

371_Visual Basic1638549491428042889.doc Pgina 55 de 63

XIV.Comunicao Segura entre Componentes


Alm de garantir segurana atravs da autenticao de usurios e autorizao de requisies, importante garantir segurana nas comunicaes entre as camadas da aplicao. Deseja-se aqui evitar que os dados sejam grampeados (sniffer) ou alterados de forma maliciosa enquanto esto sendo transportados entre as camadas. Por isso uma comunicao segura envolve transferncia de dados segura entre componentes e servios. Mecanismos de autenticao na ida ou na ida e vinda dos dados podem ser utilizados em tais comunicaes de forma a garantir que as pontas sejam quem realmente dizem ser. As opes para comunicaes seguras so: Segurana no canal inteiro: o o o SSL em canais HTTP recomendado quando a aplicao fizer uso de Web Services; IPSEC este mecanismo indicado quando as duas pontas so bem conhecidas e controladas; Implementao de rotinas de criptografia antes de enviar e ao receber dados (use o namespace System.Security.Cryptography); veja mais detalhes em http://msdn.microsoft.com/library/default.asp? url=/library/en-us/cpref/html/frlrfsystemsecuritycryptography.asp.

Segurana dos Dados: o o o Assinatura digital da mensagem evidencia eventuais tentativas de alterao e pode ser usada tambm como mtodo de autenticao; Criptografar a mensagem toda; Criptografar partes estratgicas da mensagem.

Uma alternativa para Web Services implementar assinatura digital XML em SOAP. Isso possvel usando a classe SignedXml e SOAP Headers.

371_Visual Basic1638549491428042889.doc Pgina 56 de 63

XV. Migrando aplicaes para .NET


.NET e Web Services XML apenas expandem os princpios da arquitetura de uma aplicao Windows DNA para a Internet. No existe nenhum pr-requisito para se migrar uma aplicao existente em Windows DNA para uma aplicao .NET: a mesma arquitetura que funciona bem em Windows DNA continuar funcionando bem em .NET. Alm disso, o fato de a natureza de uma aplicao Windows DNA ser formada por diversas camadas facilita a migrao gradual para .NET. A melhor motivao para migrar uma aplicao Windows DNA para .NET com Web Services XML so as vantagens de se poder utilizar Web Services XML como mdulos de cdigo distribudos em mquinas conectadas pela Internet ou em redes heterogneas. Os Web Services XML so a melhor estratgia para aplicaes distribudas atravs da Internet porque endeream com eficincia e eficcia as questes relativas a latncia, falha, heterogeneidade e segurana que, no ambiente de Internet, diferem do ambiente de uma LAN. Se no existirem planos para distribuir uma aplicao atravs da Internet ou em redes heterogneas ou, ainda, se no houver inteno de aproveitar benefcios especficos oferecidos por Web Services, tais como sua facilidade para aplicaes de alta escalabilidade atravs do uso em web farms, ento o Framework .NET tem outras opes melhores (.NET Remoting, por exemplo) otimizadas para o uso em redes internas.

371_Visual Basic1638549491428042889.doc Pgina 57 de 63

XVI.Escolha seu Objetivo


Veja abaixo algumas recomendaes que devero ser aplicadas em seu projeto da aplicao, conforme seus principais objetivos no-funcionais.

a. Escalabilidade
Quando falamos de escalabilidade de uma aplicao, estamos preocupados com a habilidade de a aplicao prover uma boa performance para um nmero crescente de usurios simultneos e o aumento da carga de dados que so manipulados. Basicamente, pensamos em vazo (throughput) e tempo de resposta (response time). Entre algumas das variveis que influenciam a escalabilidade de uma aplicao, podemos citar: desempenho do hardware; recursos fsicos tais como quantidade de memria; latncia da rede; projeto da aplicao.

Para o ltimo item, algumas recomendaes devem ser levadas em considerao no caso de ser necessrio priorizar a escalabilidade: Use operaes assncronas (isso reduz o tempo de resposta e a demanda por throughput); Use cache de dados onde este for requerido (isso evita idas e vindas em operaes simples); stateless); Evite manter estado (faa, sempre que possvel, operaes

Evite conteno de recursos (conexes de base, locks, transaes, escrita e leitura de arquivos, uso de registry, uso de log). Em transaes, coloque os inserts e updates e deletes sempre no final da operao; Use tecnologias de balanceamento tais como NLB (Network Load balancing); Use estratgias de partio de tabelas tais como DDR (Dynamic Data Routing.

b. Disponibilidade
Disponibilidade a medida da porcentagem do tempo em que a aplicao capaz de responder a uma requisio, conforme a expectativa de seu usurio. Em aplicaes de misso critica, comum se falar em "five nines" (cinco noves) ou 99,999% de disponibilidade Ao projetar aplicaes com alta disponibilidade, tenha em mente: 371_Visual Basic1638549491428042889.doc Pgina 58 de 63

Evite pontos nicos de falha. Evite ter um nico componente que, quando tirado do sistema, deixa a aplicao sem condies de uso. Use tcnicas como CLB (Component Load Balance do Application Center Server, Fail Over clusters nas Bases de Dados, RAID, etc...); Use cache de dados e filas (MSMQ) para atender a requisies, mesmo quando algum recurso no est operacional; Faa um planejamento cuidadoso e eficaz de backup. O Microsoft Operations Framework um conjunto de prticas e procedimentos de sucesso comprovados para a operaes em produo; Teste e depure cuidadosamente o cdigo. Use ferramentas como WinDBG e/ou Application Center Test.

Dependendo de como a aplicao projetada, implementada e, posteriormente, instalada, existiro maiores facilidades ou dificuldades para sua administrao, configurao, reparo e alterao. Considere as seguintes recomendaes quando projetar uma aplicao que deve ter facilidade de manuteno: Estruture o cdigo de toda a aplicao de maneira previsvel e consistente: padronize classes, variveis, constantes, uso de arrays e faa comentrios in-line; Isole dados e comportamentos que mudam com freqncia encapsule toda a lgica com probabilidade de mudanas em componentes independentes; Sempre que possvel, faa uso de metadados para configuraes e parmetros de aplicaes. XML uma excelente escolha. Evite ao mximo configuraes hard coded; Quando um certo pedao de lgica puder ser implementado de vrias maneiras, defina uma interface e faa a aplicao carregar a classe correta que implementa tal interface em runtime. No futuro, novas classes que implementam a mesma interface podero ser adicionadas; Projete classes que tenham propriedades e parmetros de mtodos de tipos comuns. Evite tipos especficos.

c. Facilidade de Manuteno

d. Segurana
Segurana sempre ser uma das maiores preocupaes em todas as aplicaes. As decises quanto segurana devero sempre se basear na poltica de segurana da empresa ou organizao em questo; porm, independentemente dos detalhes especficos que so recomendados em cada poltica de segurana, veja algumas recomendaes que devem ser sempre consideradas:

371_Visual Basic1638549491428042889.doc Pgina 59 de 63

Avalie os riscos: lembre-se de que sempre existiro os riscos externos e os riscos internos; Aplique o princpio do Mnimo Privilgio Possvel: cada usurio deve ter apenas o privilgio exato para executar as tarefas exigidas por sua atividade. A pr-existncia de Active Directory (AD) traz facilidades e robustez ao controle dos privilgios. Realize checagens de autenticao nas fronteiras de cada zona de segurana; Avalie cuidadosamente o papel de usurios de contexto em processos assncronos.

Alm dos requisitos da poltica de operaes de cada empresa, considere tambm: Mudanas previsveis; Instrumentao; Identifique claramente os pontos instrumentados; Ferramentas e processos;

e. Facilidades de Gerenciamento Operacional

Entenda e atenda s reais necessidades do pessoal de operaes; Use ferramentas de monitorao dos sistemas em produo, tais como MOM (Microsoft Operations Manager) ou ferramentas de monitorao da NetIQ.

371_Visual Basic1638549491428042889.doc Pgina 60 de 63

XVII.ndices

Figuras
Figura 1 - Exemplo de cdigo utilizando Component Services10 Figura 2 - As diversas camadas funcionais no modelo de programao .NET........................................................................11 Figura 3 - Esquema de construo de componentes de dados13 Figura 4 Exemplo de comentrios nas pginas ASP..........22 Figura 5 - Esquema de integrao do ADO.NET....................32 Figura 6 O processo de negcio interage com servios de interfaces, agentes e componentes de negcio............................43 Figura 7 - Esquema de nomenclatura de arquivos gerados pelo sistema........................................................................................48 Figura 8 - Diagrama UML de classes....................................54

Tabelas
Tabela 1 - Tipos de dados bsicos do Framework .NET........20 Tabela 2 - Regras de documentao de Procedures.............21 Tabela 3 - Resumo dos Modificadores..................................25

371_Visual Basic1638549491428042889.doc Pgina 61 de 63

XVIII. Referncias
Veja abaixo uma lista de endereos contendo informaes importantes para o desenvolvimento: Acesso a dados: http://msdn.microsoft.com/library/default.asp?url=/library/enus/dnbda/html/daag.asp http://www.microsoft.com/BizTalk http://www.BizTalk.org/home/default.asp http://msdn.microsoft.com/default.asp http://www.w3.org/ http://msdn.microsoft.com/library/backgrnd/html/msmqbest.htm MSDN: Architectural Options for Asynchronous Workflow

Suporte a transaes automticas: http://msdn.microsoft.com/library/default.asp?url=/library/enus/cpguide/html/cpconautomatictransactionsnetframeworkclasses.asp Understanding Enterprise Services (COM+) in.NET Para mais informaes sobre Biztalk informaes, consulte: Building a Scalable Business Process Automation Engine Using BizTalk Server 2002 and Visual Studio .NET Designing BizTalk Orchestrations http://www.microsoft.com/BizTalk/techinfo/planning/2000/wp_orchestration.as p Para informaes a respeito de adaptadores de BizTalk: http://www.microsoft.com/BizTalk/evaluation/adapters/adapterslist.asp http://www.microsoft.com/BizTalk/techinfo/development/wp_adapterdeveloper sguide.asp http://www.BizTalk.org www.uddi.org 371_Visual Basic1638549491428042889.doc Pgina 62 de 63

Exception Management in .NET Exception Management Application Block for .NET Auditing SQL Server Activity SQL Server Database Design in the Internet Data Center Reference Architecture guide

371_Visual Basic1638549491428042889.doc Pgina 63 de 63