Академический Документы
Профессиональный Документы
Культура Документы
NET do
Desenvolvedor
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)
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.
350737652.doc Pgina 6 de 62
ou
Recomendaes
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
Use funcionalidades do Enterprise Services tanto para iniciar como para votar
(participar de forma ativa) em transaes heterogneas.
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.
Classes Regras
Win Forms
de Negcio
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)]
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.
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.
System.Xml
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:
5. Etc.
Exemplo:
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>
Exemplo:
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.
Exemplo:
possvel agora declarar mais do que uma varivel em uma mesma declarao
DIM.
Exemplo:
Exemplo:
Exemplo:
' equivalente a:
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.
Exemplo:
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:
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.
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:
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
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.
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.
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.
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.
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.
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
Inherits System.Windows.Forms.Form
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
1. Certifique-se que o cdigo que ser colocado em produo seja compilado com
a opo de suporte a debug desabilitada.
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
350737652.doc Pgina 25 de 62
Exemplo:
Exemplo:
Class TestObject
' put the garbage collector under pressure
Dim dummyArr(1000) As Byte
Sub New()
OpenClipboard(0)
End Sub
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
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
Exemplo:
' ...
' remove o tratador do evento
RemoveHandler o.TestEvent, _
AddressOf MyHandler
End Sub
Sub MyHandler()
' ...rotina que trata o evento aqui.
End Sub
350737652.doc Pgina 27 de 62
Exemplo:
Contra-exemplo:
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
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.
Exemplo:
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:
ou
350737652.doc Pgina 29 de 62
VI. ADO.NET Acessando Dados
350737652.doc Pgina 30 de 62
Figura 5 - Esquema de integrao do ADO.NET
350737652.doc Pgina 31 de 62
VII. Web Services
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:
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.
Objeto
Aplicativo Host
Aplicativo Cliente
(server)
Arquivo Arquivo
Config
Remoting Remoting Config
Canal
350737652.doc Pgina 36 de 62
a. Procedimento
Usando
350737652.doc Pgina 37 de 62
Compile e teste seu cdigo.
Controle transacional
Pool de objetos
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)
Exemplo:
try
{
// Executa comando de atualizao de dados
sqlCommand.ExecuteNonQuery();
// Commit
ContextUtil.SetComplete ();
}
catch
{
// Rollback
ContextUtil.SetAbort ();
}
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
sn -k TestApp.snk
<assembly: AssemblyKeyFileAttribute("TestApp.snk")>
[Transaction(TransactionOption.Disabled)]
[Transaction(TransactionOption.NotSupported)]
[Transaction(TransactionOption.Supported)]
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")>
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
350737652.doc Pgina 42 de 62
X. Gerenciamento de Excees (Erros)
O gerenciamento de excees em .NET abrange:
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.
Quando quiser criar suas prprias classes de excees, faa isso herdando a
partir da classe ApplicationException.
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.
350737652.doc Pgina 43 de 62
350737652.doc Pgina 44 de 62
XI. Tarefas Mais Comuns
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
Assim sendo o log de auditoria deve ser tratado com alguns cuidados
adicionais:
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;
Log-on;
Log-off;
Mudana de senha;
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.
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
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.
Escalabilidade e disponibilidade;
Isolamento;
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);
Mtodo Funcionalidade
Send Escreve mensagem na fila especificada
Receive L uma mensagem da fila (retira a mensagem da
fila)
Exemplo C#
return;
}
350737652.doc Pgina 49 de 62
Exemplo Visual Basic
End Sub
Exemplo:
"public = 228B7F89-EB76-11D2-8A55-0080C7E276C0"
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.
Exemplo:
PathName = "Machine_Name\Queue_name"
Exemplo:
FormatName = "Direct=OS:Machine_Name\Queue_Name"
Controle de Timeouts
Time-to-reach-queue
MaxTimeToReachQueue = 3000
350737652.doc Pgina 51 de 62
Time-to-be-received
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.
diagrama de seqncia;
diagrama de componentes;
diagrama de classes;
350737652.doc Pgina 53 de 62
XIII. Recomendaes de Design
Quando planejar uma aplicao ou um servio, considere as seguintes
recomendaes:
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.
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.
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).
latncia da rede;
projeto da aplicao.
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.
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:
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.
Instrumentao;
Ferramentas e processos;
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
http://www.microsoft.com/BizTalk/techinfo/planning/2000/wp_orchestration.as
p
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
SQL Server Database Design in the Internet Data Center Reference Architecture
guide
350737652.doc Pgina 62 de 62