You are on page 1of 62

Manual .

NET do
Desenvolvedor

Microsoft Consulting Services


Sumrio
I. Desenvolvendo em N Camadas......................................5
a. Servios de Apresentao...................................................5
b. Servios de Negcio............................................................5
c. Camada de Gerenciamento.................................................6
d. Camada de Regras de Negcio............................................6
Recomendaes...............................................................................7
Implementando Componentes de Negcio com .NET.............................8
e. Camada de Dados.............................................................10
Recomendaes para a criao das classes da camada de dados...........10
Ao implementar Componentes de Acesso a Dados...............................12
Exemplo de Componente para a Camada de Dados.............................13
f. Servios de Dados.............................................................13
g. Comunicao entre Camadas (entre Classes)....................14
II. Utilizando XML.............................................................14
III. Web Forms e ASP.NET.................................................15
a. Dicas ao Programar ASP.NET............................................15
Dicas de Visual Basic 7 para programadores ASP
(que utilizavam VBScript)................................................................16
b. Nomenclatura de Variveis...............................................18
c. Escopo de Variveis..........................................................19
d. Nome de Mtodos.............................................................19
e. Comentrios em VB...........................................................20
IV. Win Forms - VB............................................................21
a. Recomendaes ao Projetar Windows User Interfaces......21
b. Nomenclatura de Variveis e Mtodos...............................22
c. Escopo de Variveis..........................................................22
d. Constantes........................................................................23
e. Indentao.......................................................................23
f. Componentes e Classes.....................................................24
V. Dicas de Performance..................................................25
a. Turbinando cdigo VB.NET................................................25
Seguem algumas regras de otimizao para cdigo .NET.....................25
VI. ADO.NET Acessando Dados.......................................30
VII. Web Services.............................................................32

350737652.doc Pgina 2 de 62
a. Procedimento...................................................................32
b. Exemplo............................................................................33
VIII. .NET Remoting...........................................................36
IX. Interagindo com componentes COM (Unmanaged Code)36
a. Procedimento...................................................................37
b. Gerenciando as Transaes Automticas com COM+.........38
c. Transaes Automticas em Classes .NET.........................40
d. Implementando Workflows de Negcio usando BizTalk. . . .41
X. Gerenciamento de Excees (Erros)............................43
XI. Tarefas Mais Comuns...................................................45
a. Tratamento de Log e Auditoria..........................................45
Auditoria.......................................................................................45
Auditoria na interface do usurio (UI)................................................46
Auditoria na Camada de Negcio......................................................46
Auditoria na Camada de Acesso a Dados............................................46
b. Rotinas em lotes...............................................................46
c. Criao de arquivos seqenciais.......................................46
d. Sistemas sem fio...............................................................47
e. Aplicaes Assncronas (MSMQ)........................................48
Vantagens do uso de comunicao baseada em mensagens:................48
Desvantagens do uso de comunicao baseada em mensagens:...........48
Cenrios tpicos para Comunicao Assncrona...................................48
Exemplo C#...................................................................................49
Exemplo Visual Basic......................................................................50
f. Dicas sobre o MS Message Queue......................................50
Controle de Timeouts......................................................................51
XII. Documentao de Projeto..........................................53
XIII. Recomendaes de Design........................................54
XIV. Comunicao Segura entre Componentes..................55
XV. Migrando aplicaes para .NET....................................56
XVI. Escolha seu Objetivo.................................................57
a. Escalabilidade...................................................................57
b. Disponibilidade.................................................................57
c. Facilidade de Manuteno.................................................58
d. Segurana.........................................................................58
e. Facilidades de Gerenciamento Operacional.......................59
XVII. ndices......................................................................60
XVIII. Referncias.............................................................61

350737652.doc Pgina 3 de 62
350737652.doc Pgina 4 de 62
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)

350737652.doc Pgina 5 de 62
Classes implementadas em cdigo no-gerencivel (componentes COM)

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)

350737652.doc Pgina 6 de 62
ou

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.

350737652.doc Pgina 7 de 62
Implementando Componentes de Negcio com .NET

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) tanto
para consultar dados como para atualiz-los;
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.

350737652.doc Pgina 8 de 62
Figura 1 - Exemplo de cdigo utilizando Component Services

350737652.doc Pgina 9 de 62
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 Servios de Servios de


Usurio Negcio Dados

Web Forms Classes


Gerenciamento
SQL, Oracle,
DB2

Classes Regras
Win Forms
de Negcio

Classes Classes Acesso ADO.NET


a Dados
(Validaes)

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

350737652.doc Pgina 10 de 62
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 (read-
only, forward only) apenas. Nesse caso, faa a sua camada de dados retornar
DataReaders objects;
Quando h a necessidade de uso prolongado do objeto DataReader, aconselha-
se 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;

350737652.doc Pgina 11 de 62
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;

350737652.doc Pgina 12 de 62
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

350737652.doc Pgina 13 de 62
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 aplicao tambm sero


consideradas servios de dados do ponto de vista fsico.

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 auto-
descritiva (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 numa estrutura hierrquica em memria


(System.Xml.Serialize)
Exemplo:

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']");

350737652.doc Pgina 14 de 62
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 o tag <%@ Page


Language="XXXXXX" %> declarado uma nica vez

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>

350737652.doc Pgina 15 de 62
<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)

Ao instanciar ou atribuir valores a variveis de objetos, no use mais a palavra


"SET".

Exemplo:

Errado : Set x = Form1.text1


Correto: x = Form1.text1

350737652.doc Pgina 16 de 62
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.

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

350737652.doc Pgina 17 de 62
O Visual Basic .NET 7.0 oferece uma maior segurana quanto aos tipos. Erros
sero gerados quando uma converso puder falhar em run-time.

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), lembrando-
se 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

350737652.doc Pgina 18 de 62
identifica o tipo deve ser sempre escrito em letra minscula. Recomenda-se que o
tamanho mximo do nome da varivel no exceda 32 caracteres.

Nome do Tipo Alias em Alias em


Descrio
em .NET (CTS) VB C#
Classe bsica para todos os tipos (CTS) System.Object Object object
String System.String String string
8-bit byte com sinal System.SByte SByte sbyte
8-bit byte sem sinal System.Byte Byte byte
16-bit value com sinal System.Int16 Short short
16-bit value sem sinal System.UInt16 UInt16 ushort
32-bit value com sinal System.Int32 Integer int
32-bit value sem sinal System.UInt32 Uint32 uint
64-bit value com sinal System.Int64 Long long
64-bit value sem sinal System.UInt64 UInt64 ulong
16-bit caracter tipo Unicode System.Char Char char
IEEE 32-bit float System.Single Single float
IEEE 64-bit float System.Double Double double
Valor Booleano (true/false) System.Boolean Boolean bool
128-bit armazena at 28 ou 29 digitosusado em
System.Decimal Decimal decimal
aplicaes financeiras.
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

350737652.doc Pgina 19 de 62
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.

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
Contedo
Cabealho
Objetivo O que o mtodo (classe) faz
Parmetros Lista descritiva dos parmetros recebidos pelo mtodo ou
pelo constructor no caso de uma classe
Data Data da Criao
Autor Autor do cdigo
Alterao 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.

350737652.doc Pgina 20 de 62
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
}

350737652.doc Pgina 21 de 62
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

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

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

350737652.doc Pgina 23 de 62
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

350737652.doc Pgina 24 de 62
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.

350737652.doc Pgina 25 de 62
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
Implements IDisposable
Public Sub Dispose() _
Implements IDisposable.Dispose

350737652.doc Pgina 26 de 62
' 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

No use o tradicional WithEvents que, embora continue sendo suportado no


VB.NET, tem menor desempenho.

350737652.doc Pgina 27 de 62
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
Return False ' notifica a falha
Else
Return True ' notifica o sucesso
End If
End Function

350737652.doc Pgina 28 de 62
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)

350737652.doc Pgina 29 de 62
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:

350737652.doc Pgina 30 de 62
Figura 5 - Esquema de integrao do ADO.NET

350737652.doc Pgina 31 de 62
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).

350737652.doc Pgina 32 de 62
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

350737652.doc Pgina 33 de 62
Clique no boto Start ou no menu Debug. Escolha Start para obter a seguinte
tela de navegador:

350737652.doc Pgina 34 de 62
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:

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.

350737652.doc Pgina 35 de 62
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:

Objeto

Aplicativo Host
Aplicativo Cliente
(server)

Arquivo Arquivo
Config
Remoting Remoting Config

Canal

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.

350737652.doc Pgina 36 de 62
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.

350737652.doc Pgina 37 de 62
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

350737652.doc Pgina 38 de 62
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 ();
}
}

350737652.doc Pgina 39 de 62
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:

350737652.doc Pgina 40 de 62
' 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 System
Imports System.Runtime.CompilerServices
Imports System.EnterpriseServices
Imports 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;

350737652.doc Pgina 41 de 62
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 .

350737652.doc Pgina 42 de 62
X. Gerenciamento de Excees (Erros)
O gerenciamento de excees em .NET abrange:

Como tratar excees;

Como disparar excees;

Como fazer fluir a informao de uma exceo;

Como publicar (mostrar) ao usurio a informao de uma exceo.

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:

Refazer a operao que fracassou;

Expor a situao ao usurio;

Parar, reiniciar ou continuar com o fluxo da interao com o usurio.

350737652.doc Pgina 43 de 62
350737652.doc Pgina 44 de 62
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;

350737652.doc Pgina 45 de 62
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

350737652.doc Pgina 46 de 62
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 extenso
algarismos

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

350737652.doc Pgina 47 de 62
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: necessrio implementar controle quando for
pertinente.

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;

350737652.doc Pgina 48 de 62
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 Funcionalidade
Send Escreve mensagem na fila especificada
Receive L uma mensagem da fila (retira a mensagem da
fila)

ReceiveById 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;
}

350737652.doc Pgina 49 de 62
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 consulta para validar a existncia e as permisses

350737652.doc Pgina 50 de 62
Vantagens: Funciona off-line;
Se on-line, o MSMQ verifica a existncia da fila
Desvantagens: 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: Duas consultas ao repositrio, uma para buscar o GUID e


outra para verificar a existncia e as permisses
Vantagens: Descoberta dinmica da fila
Desvantagens: No funciona off-line

Utilize o FormatName direto ao enviar mensagens para uma fila

Exemplo:

FormatName = "Direct=OS:Machine_Name\Queue_Name"

Custo: Nenhuma consulta ao repositrio


Vantagens: Descoberta dinmica da fila
Desvantagens: O MSMQ no verifica a existncia da mquina destino;
No pode receber mensagens

Controle de Timeouts

Os Timeouts defaults do MSMQ so infinitos. Isso pode trazer resultados


indesejveis. Estes Timeouts incluem:

Parmetro ReceiveTimeout para a funo Receive;

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

350737652.doc Pgina 51 de 62
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

350737652.doc Pgina 52 de 62
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

350737652.doc Pgina 53 de 62
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.

350737652.doc Pgina 54 de 62
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 SSL em canais HTTP recomendado quando a aplicao fizer uso de Web


Services;
o IPSEC este mecanismo indicado quando as duas pontas so bem
conhecidas e controladas;
o 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 Assinatura digital da mensagem evidencia eventuais tentativas de


alterao e pode ser usada tambm como mtodo de autenticao;
o Criptografar a mensagem toda;

o 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.

350737652.doc Pgina 55 de 62
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.

350737652.doc Pgina 56 de 62
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);
Evite manter estado (faa, sempre que possvel, operaes stateless);

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:


Evite pontos nicos de falha. Evite ter um nico componente que,
quando tirado do sistema, deixa a aplicao sem condies de uso. Use

350737652.doc Pgina 57 de 62
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.

c. Facilidade de Manuteno
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.

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

350737652.doc Pgina 58 de 62
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.

e. Facilidades de Gerenciamento Operacional


Alm dos requisitos da poltica de operaes de cada empresa, considere
tambm:
Mudanas previsveis;

Instrumentao;

Identifique claramente os pontos instrumentados;

Ferramentas e processos;

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.

350737652.doc Pgina 59 de 62
XVII.ndices

Figuras
Figura 1 - Exemplo de cdigo utilizando Component Services..................................9
Figura 2 - As diversas camadas funcionais no modelo de programao .NET............10
Figura 3 - Esquema de construo de componentes de dados................................12
Figura 4 Exemplo de comentrios nas pginas ASP............................................21
Figura 5 - Esquema de integrao do ADO.NET....................................................31
Figura 6 O processo de negcio interage com servios de interfaces, agentes e
componentes de negcio.............................................................................42
Figura 7 - Esquema de nomenclatura de arquivos gerados pelo sistema..................47
Figura 8 - Diagrama UML de classes...................................................................53

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

350737652.doc Pgina 60 de 62
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/en-
us/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/en-
us/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_adapterdevelopers
guide.asp

http://www.BizTalk.org

350737652.doc Pgina 61 de 62
www.uddi.org

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

350737652.doc Pgina 62 de 62

You might also like